Skip to content

MCP tools reference

This is the real tool catalog registered by the MaxoPerf MCP server — every entry here is something you can call today over POST https://app.maxoperf.com/mcp. Read tools default to response_format: "concise"; pass "detailed" for the full payload. Tools marked write need a non-read-only session; destructive ones ask for confirmation in Loadrigo and should get the same care from any agent driving them.

ToolArgsReturns
whoami(none)Account identity + default workspace.
list_workspaces(none)Workspaces visible to the account.
set_active_workspace{ workspace_id }Sets the active workspace for the rest of the session.
ToolArgsReturns
list_projects{ workspace_id? }Projects visible in the account, with canEdit/canDelete flags.
create_project (write){ workspace_id, name }New project.
ToolArgsReturns
list_tests{ project_id?, workspace_id?, type?: 'single'|'vario'|'all', response_format? }Test list.
get_test{ test_id, response_format? }One test, including its validation summary.
create_test (write){ project_id, name, type?: 'single'|'vario', engine_kind? }New test shell — attach the entrypoint script next with upload_test_file.
get_test_overview{ test_id }Run-history overview (the console’s Overview tab).
ToolArgsReturns
upload_test_file (write){ test_id, filename, content? | local_path?, role: 'entrypoint'|'test_asset', content_type? } — exactly one of content (inline text) or local_path{ fileId, uploadState, sizeBytes }. One entrypoint per test; everything else is a test_asset.
list_test_files{ test_id }{ files: [{ fileId, filename, fileRole, uploadState, sizeBytes }] }
download_test_file{ test_id, file_id }{ downloadUrl, expiresInSeconds, filename } — a short-lived presigned URL, not raw bytes.
ToolArgsReturns
start_run (write){ test_id, engine_kind?, recording_layout?: 'tiled'|'solo' }{ runId, status }. Idempotent — an identical retry reuses the run.
get_run_status{ run_id, response_format? }Lifecycle status: queued | allocating | starting | running | stopping | passed | failed | cancelled.
list_runs{ workspace_id?, test_id?, status?, engine?, q?, from?, to?, page?, response_format? }Paginated run list.
cancel_run (write, destructive){ run_id, mode?: 'graceful'|'kill', reason? }Cancels a run — cannot be undone. Not present in the tool catalog at all under a read-only session.
rerun_run (write){ run_id, source: 'run_snapshot'|'current_test' }New run derived from an existing one.
add_runners (write){ run_id, additions: [{ location_plan_row_id, count }] }Scales up a live run at existing location-plan rows.
ToolArgsReturns
get_run_results{ run_id, ...optional time-range/location/label/runner/scenario filters }KPI summary (throughput, latency, error rate, duration).
query_run_metrics{ run_id, queries: [{ category, aggregation, alignment?, filters?, group_by? }] } (≤8 queries, ≤5 filters/query, ≤3 group-bys/query)Time series for the requested metrics.
get_run_errors{ run_id, response_format? }Grouped error rows (message/count/code).
get_run_summary{ run_id, transactions?, response_format? }Executive summary: headline outcome + tripped failure criteria.
get_run_error_bodies{ run_id, row_id?, from?, to?, runner?, label?, scenario?, error_key?, limit?, response_format? }Sampled error request/response bodies + status codes.
get_run_logs{ run_id, severity?: 'error'|'warn', stream?: 'all'|'system'|'engine', from?, to?, limit?, cursor?, response_format? }Error-level engine/system log lines.
get_runner_health{ run_id, from?, to?, runners?, response_format? }Runner heartbeat/CPU/mem trend + VU shortfall.
detect_run_anomalies{ run_id, metric_ids?, sensitivity?: 'low'|'normal'|'high', allow_partial? }Robust outlier detection on the run’s charts (terminal runs only).
ToolArgsReturns
get_metrics_catalog(none)The set of chartable metrics.
list_dashboards(none)Dashboards visible in the account.
get_dashboard{ dashboard_id }One dashboard’s panels/config.
create_dashboard (write){ title, ... }New dashboard.
update_dashboard (write){ dashboard_id, title?, ... }Updated dashboard.

Managed Selenium-Grid / Playwright-connect() capacity — N browsers behind one endpoint, driven directly by your own client (not a MaxoPerf-orchestrated test run). See Browser fleets.

ToolArgsReturns
create_browser_fleet (write, idempotent){ browsers: [{ browser: 'chrome'|'firefox'|'edge', count, location }], browsers_per_runner?, ttl_minutes?, idle_timeout_minutes?, name? }location is <aws|gcp|azure>:<region> or byoc:<pdcId>{ fleetId, runId, status, endpoints, token, expiresAt, supportedPlaywrightVersions }. The token is shown only here — re-fetch it with get_browser_fleet.
get_browser_fleet{ fleet_id, include_token? } (default true)Status, per-location readiness, endpoints, session count, and (unless omitted) the reconnect token.
list_browser_fleets{ page?, page_size? }{ fleets, total, page, pageSize } — never includes tokens.
scale_browser_fleet (write){ fleet_id, browsers: [...] }Updated fleet detail. Scale-down isn’t supported — delete and recreate smaller.
delete_browser_fleet (write, destructive){ fleet_id }{ fleetId, terminated: true }. Idempotent on an already-terminal fleet.

Expose a locally-running or not-yet-deployed target at a public https://tunnel-<name>.maxoperf.com URL. See Tunnels.

ToolArgsReturns
create_tunnel (write){ name, auth_mode?: 'none'|'basic'|'bearer', allow_ips?, rate_limit_rpm?, idle_timeout_seconds?, capture_mode?: 'none'|'headers'|'body' }name is a globally-unique DNS label{ id, name, url, status, online, clientToken, runCommand, ... }. The clientToken is shown only here.
list_tunnels{ page?, page_size? }Tunnel list — no client tokens.
get_tunnel{ tunnel_id }One tunnel’s detail.
stop_tunnel (write){ tunnel_id }Disconnects the live client; the URL is preserved but 503s until restarted.
get_tunnel_stats{ tunnel_id, window_minutes?, step_seconds? }Requests, 4xx/5xx, blocked, bytes, p50/p95/p99 latency over a recent window.

A mock/simulated backend deployed as its own pod on a chosen outpost. See Virtual services.

ToolArgsReturns
list_virtual_services{ workspace_id }{ virtualServices: [{ id, state, placement, hostname, endpointUrl }] }
get_virtual_service{ virtual_service_id }Full detail (state, placement, noMatch policy, transaction selection, idle-shutdown config).
create_virtual_service (write){ workspace_id, service_id, name, placement?: { private_datacenter_id? }, no_match?, think_scale_percent?, transaction_selection?, idle_shutdown_minutes? }New virtual service in draft/stopped state.
deploy_virtual_service (write){ virtual_service_id }State moving toward running. A PDC must be chosen first.
stop_virtual_service (write){ virtual_service_id }State moving toward stopped.
delete_virtual_service (write, destructive){ virtual_service_id }Deletes the virtual service.
ToolArgsReturns
list_execution_locations{ workspace_id? }{ managed: { providers }, byoc: { privateDatacenters } }byoc.privateDatacenters merges the shared, MaxoPerf-operated Shared Sandbox outpost with any self-hosted outpost your workspace registered. Use the id as location: "byoc:<id>" (fleets) or placement.privateDatacenterId (virtual services).
inspect_url (write){ url }Spins up (or reuses) a real browser, navigates to url, and returns the JS-rendered DOM/text/outline — use it instead of fetch_url/read_page_dom when the target is a single-page app.

For the long tail of Platform API endpoints not covered by a named tool above — billing, secrets, notifications, schedules, and more.

ToolArgsReturns
call_platform_api{ method: 'GET'|'POST'|'PATCH'|'DELETE', path, body? }Calls any public endpoint. Admin/internal/key-management paths are always rejected before any upstream call. Read-only sessions may only GET.
get_openapi(none)The public OpenAPI document. Large — prefer search_endpoints first.
search_endpoints{ query }Keyword search over the OpenAPI document.
ToolArgsReturns
search_docs{ query }Keyword search over this documentation site’s build-time index.
get_agent_skill(varies)The MaxoPerf agent skill’s instructions — see MaxoPerf agents.
list_agent_skill_sections(none)The skill bundle’s section index.

All reads, all funneled through one SSRF-guarded fetch. web_search self-disables (drops out of the tool catalog) when no search provider is configured for the deployment.

ToolArgsReturns
web_search(query args)Web search results, when a provider is configured.
fetch_url{ url, ... }Static page fetch — HTML only, no JavaScript execution.
read_openapi{ url, ... }Fetches and parses a third-party OpenAPI document.
read_page_dom{ url, ... }Static DOM extraction — same JS limitation as fetch_url.

Prompts are pre-built, multi-step recipes a client can surface as one-click flows (prompts/list) instead of an agent rediscovering the right tool-call sequence itself.

PromptArgsWhat it guides
run-baseline-load-test{ test_id }Start a run and report pass/fail, duration, throughput, p95 latency, and error rate once it’s terminal.
diagnose-latency-regression{ baseline_run_id, candidate_run_id }Compare p95 latency between two runs of the same test and correlate with errors.
summarize-run{ run_id }A concise, plain-language summary of one run.
plan-and-build-test{ goal, target? }Turn a plain-language goal into the project → test → upload → run sequence.
choose-executor{ test_kind }Recommend a test engine/executor with rationale.
scan-endpoints-for-hotspots{ openapi_or_paste }Rank likely load-testing hotspots from an OpenAPI spec or pasted endpoint list.
setup-secrets-and-envs{ test_id }Guide configuring secrets and multi-environment values before the first run.
diagnose-run-failure{ run_id }Root-cause a failed/underperforming run: tripped criteria, error bodies, logs, runner health, anomalies.
explain-run-anomalies{ run_id }Run the anomaly scan on a finished run and explain flagged outliers.

Two read-only MCP resources for clients that prefer resources over tool calls:

Resource URIContents
maxoperf://openapiThe public Platform API OpenAPI document (same source as get_openapi).
maxoperf://run/{id}A run’s current status + dashboard overview.

Every tool error follows the same shape: { isError: true, content: [{ type: "text", text: "<status> <code>: <detail>" }], structuredContent: { status, code, detail } }. Common codes: READ_ONLY_MODE, FORBIDDEN_PATH (call_platform_api deny-listed path), TOO_MANY_QUERIES / TOO_MANY_FILTERS / TOO_MANY_SERIES (query_run_metrics limits), UPLOAD_FAILED, PATH_NOT_ALLOWED (upload_test_file local-path traversal), INVALID_ARGUMENTS.