Use VoxelBench from your agent
One endpoint, the tools of the API, and a diagnosis already computed. Your agent reads measurements and looks after your servers — it never produces a measurement, and never deletes anything.
Add the server — no token to create:
claude mcp add --transport http voxelbench https://voxelbench.com/api/v1/mcpThen type /mcp in Claude Code, pick voxelbench and choose Authenticate. Your browser opens the same consent page as Claude Web: you approve exactly what it may read and change, and Claude Code renews its access on its own.
For scripts and CI, where nobody is there to click
Mint a token, tick only the scopes you need, then run this. The token travels with every request; nothing is stored on our side.
claude mcp add --transport http voxelbench https://voxelbench.com/api/v1/mcp \
--header "Authorization: Bearer vb_your_token"Or write it yourself, in .mcp.json for the project or ~/.claude.json for your account:
{
"mcpServers": {
"voxelbench": {
"type": "http",
"url": "https://voxelbench.com/api/v1/mcp",
"headers": { "Authorization": "Bearer vb_your_token" }
}
}
}Your agent then sees what your account sees: your private reports, your servers, your runs.
Settings → Connectors → Add custom connector, then paste this URL. Claude will ask you to sign in and approve what it may read and change — no token to copy anywhere.
https://voxelbench.com/api/v1/mcpYou approve it, on screen
The connector form takes only a URL, so the server answers with an authorization challenge: Claude opens a VoxelBench page that names the application, where it will send you back, and exactly what it asks for. Approve, and it reads your own data — private reports included. The grant is one of your plan's API tokens and shows up alongside them, to revoke whenever you want.
What your agent can do
This list is the server's own catalogue — the tools every account can use, loaded by both transports, so it cannot drift from what is actually served.
list_reportsLists readable benchmark reports.
get_reportA full report: scores, sub-scores, multipliers, hardware.
compare_serversCompares two benchmark reports - one report is one measurement of one server - and returns a verdict that is ALREADY COMPUTED server-side.
get_report_diagnosisNamed findings for a report: what its measurements imply, each with a severity, the test concerned, a cause code when the payload settles one, and the numbers that produced it.
list_unit_testsLists unit tests.
get_unit_testA full unit test: percentiles, test-specific metrics, parameters, and for a tier run the rung-by-rung progression.
list_serversLinked servers, with their verification state.
list_auto_bench_targetsThe bearer's auto-bench targets.
list_auto_bench_jobsRuns of the bearer's targets.
run_auto_bench_nowTriggers a run on an EXISTING target.
cancel_auto_bench_jobAsks a run to stop.
update_serverRenames a linked server or changes its visibility settings: name, is_public, show_address_on_report, notify_on_report.
link_serverLinks a NEW Minecraft server to the account, using the 8-character code the VoxelBench plugin prints in the server console (/bench link).
list_server_groupsThe account's server groups (20 at most).
create_server_groupCreates a server group.
update_server_groupRenames, recolours or reorders a server group.
set_server_groupSorts a server into a group, or takes it out with group_id: null.
update_reportChanges a report's visibility, description or private notes.
list_alert_rulesThe monitoring alert rules of one of the bearer's servers.
create_alert_ruleCreates a monitoring alert rule on a server: fire when metric is below/above threshold for duration_minutes.
update_alert_ruleEdits an alert rule, or pauses it with enabled: false.
get_maintenanceWhether one of the bearer's servers is in a maintenance window, until when and why.
start_maintenanceStarts a maintenance window on one of the bearer's servers for duration_minutes (REQUIRED, 5 to 1440): every alert of the server keeps being evaluated and recorded, but nobody is notified until the window ends - use it before a planned restart, an update or any work that would trip the alerts.
end_maintenanceEnds the maintenance window in progress on one of the bearer's servers: its alerts are notified again from the next evaluation (within a minute).
list_alert_eventsAlerts the bearer's rules raised, most recent first, from BOTH families: threshold rules (kind: threshold) and event rules (kind: event, e.g.
list_event_alert_rulesThe event alert rules of one of the bearer's servers, read-only: what event type, category, source and minimum severity each one matches, and on which channels it notifies.
test_alert_ruleSends a TEST notification for a threshold alert rule now, on the channels the rule notifies (in-app, email, the server's Discord webhook, the owner's personal Discord), prefixed with [TEST], and returns what each channel did (delivery).
acknowledge_alertAcknowledges a triggered alert: marks it seen and stops it from being notified again.
update_auto_bench_targetReschedules an EXISTING auto-bench target: enabled (false pauses it), schedule_cron (five-field cron evaluated in UTC, at most once per hour - schedule_too_frequent otherwise), name, notes.
get_server_statusLive status of one of the bearer's servers (owned_by_you: true; another account's server answers not_owner).
get_server_regressionWhether a verified server's benchmark performance has dropped - the verdict the platform's regression alert computes, ALREADY DECIDED: quote it, do not recompute it.
get_monitoring_overviewThe state of ALL the bearer's monitored servers in ONE call - use it instead of calling get_server_status once per server, which spends quota for each.
get_server_metricsTime series of one of the bearer's servers (owned_by_you: true; another account's server answers not_owner) - the same data the dashboard charts.
list_server_eventsThe timeline of one of the bearer's servers (owned_by_you: true; another account's server answers not_owner), most recent first: starts, stops and restarts, benchmark runs, moderation actions, alerts raised by third-party plugins.
get_profile_historyThe performance-profile history of one of the bearer's servers (owned_by_you: true; another account's server answers not_owner): one summary per profile the server sent, most recent upload first - who used the tick (owners, plugins included, self_pct and total_pct), the busiest methods, a breakdown by kind of work (categories) and key_points.
get_profileOne full performance profile of one of the bearer's servers (owned_by_you: true; another account's server answers not_owner), while the plan's limits still keep it: take profile_id from get_profile_history - null there means the profile is gone and only its summary is left (404 here).
compare_profilesWhat changed between two performance profiles of the same server of the bearer (owned_by_you: true): shares per owner, per kind of work (categories) and per method, key points that appeared or were resolved.
list_profilesThe performance profiles of EVERY server the bearer owns, in one call, most recent upload first: one row per profile, read from its summary (kept a year) - server_id and server_name, trigger (manual, ring, lag), lag (kind, slow_ticks, longest_tick_ms), tick_samples, and top_plugin (the listed plugin with the largest own share of tick samples, with self_pct and total_pct).
list_memory_reportsMemory reports, most recent upload first: heap summaries (kind heap-summary, the JVM class histogram per plugin, shallow sizes) and heap dump analyses (kind heap-analysis: quick = shallow sizes by class loader, full = retained sizes and leak suspects, retained = a targeted analysis of ONE plugin: what that plugin alone retains, plus the quick-pass sections).
get_memory_reportOne memory report of one of the bearer's servers (owned_by_you: true; another account's server answers not_owner), with a compact diagnosis: totals, memory per owner, leak suspects with their path from a GC root (path.steps, first step the root side; via is how the previous object holds the next, e.g.
compare_memory_reportsCompares two memory reports of the SAME server of the bearer (owned_by_you: true; another account's server answers not_owner; a report of another server is not_found).
get_report_tuningTuning advice computed from a report - exactly what its page shows.
compare_before_afterDid a change improve a server? Give the report ids from BEFORE and AFTER the change, and the subtests it targeted.
list_offersHosting offers with the evidence behind their performance: certified (hoster-approved, not expired), measured (VoxelBench ran the benchmark), linked (only associated), or none.
What to ask it
Once connected, plain language is enough.
- « Open my latest report and tell me what its measurements imply. »
- « Compare these two reports and tell me which host wins, and on what. »
- « Launch a benchmark on my auto-bench target, then tell me when the report is in. »
- « Show my auto-bench jobs from this week and tell me which ones failed, and why. »
- « Link my new server with code K7PX2QMA, name it Survival 1.21 and put it in my Production group. »
What holds, whichever agent you use
- • Every figure comes out of the benchmark pipeline. Comparisons and diagnoses are computed server-side and handed over already decided — the model quotes them, it does not recompute them.
- • A resource you may not read answers 404, never 403. Your agent must not read that as "it does not exist".
- • One tool call costs one read. Your plan's daily cap applies per account — not per token, so a second connector buys nothing. A run occupies its target: replaying a launch adopts the run already in flight instead of starting a second one.
- • A token carries only the scopes you ticked, and never more than your current plan grants.