MCP Server Reference¶
Complete reference for the BenchBox MCP (Model Context Protocol) server, including all available tools, resources, and prompts.
Running the Server¶
Prerequisites¶
Install BenchBox with MCP dependencies:
uv sync --extra mcp
The MCP extra includes DuckDB because duckdb is the advertised local
execution platform in the MCP surface. Other platforms keep their separate
optional extras.
Starting the Server¶
# Via Python module
uv run python -m benchbox.mcp
# Via entry point (if installed globally)
benchbox-mcp
# With explicit MCP path overrides
benchbox-mcp --results-dir /tmp/benchbox-results --charts-dir /tmp/benchbox-charts
# Opt in to localhost Streamable HTTP
benchbox-mcp --transport streamable-http
The default server communicates via stdio using JSON-RPC, compatible with
Claude Code and other local MCP clients. Streamable HTTP is an explicit
localhost-only option at http://127.0.0.1:8000/mcp.
{
"mcpServers": {
"benchbox": {
"type": "streamable-http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}
Do not expose the unauthenticated localhost endpoint through a public bind,
port forward, or reverse proxy. Non-loopback binding requires a complete
--security-config policy. See Remote MCP security and tenancy
for its threat model, token-digest provisioning, scopes, tenant workspaces,
shared admission store, and fail-closed proxy requirements. This capability is
not a production-readiness claim. Shared, non-loopback endpoint publication and
its operational acceptance matrix are explicitly
deferred until post-release. That
deferral does not block the local stdio/loopback MCP MVP: its release checks are
limited to current DuckDB package/execution evidence and pinned protocol
conformance.
SDK Compatibility¶
BenchBox uses the Python MCP SDK 2.x MCPServer API and reports its own
benchbox server name and BenchBox package version during initialization.
The v2 migration preserves the public stdio contract: 12 tools, 4 static
resources, 2 resource templates, and 7 prompts. Tool names, input schemas,
annotations, resource URIs, prompt schemas, and handler behavior are unchanged;
only Python-side SDK model attributes use the v2 snake-case names.
An authenticated remote server adds four durable job tools. They use shared storage and return immediately, so sessionless requests may reach different workers without losing ownership or lifecycle state.
Streamable HTTP supports modern MCP 2026-07-28 as a sessionless protocol.
The only production-supported legacy handshake is 2025-11-25; earlier
revisions are not covered by the acceptance matrix:
each request can reach any server process and no Mcp-Session-Id is issued.
The same endpoint retains the SDK’s stateless compatibility path for supported
handshake-era clients. Protocol discovery, version negotiation, headers, and
DNS-rebinding checks are provided by the MCP SDK rather than reimplemented by
BenchBox. Responses remain streaming-capable; JSON-only mode is intentionally
disabled so progress and future request-scoped notifications remain possible.
MVP release checks¶
The MCP MVP has two release checks, both currently recorded PASS in the
MCP evidence boundary:
install the built BenchBox wheel with
[mcp]in a clean environment and run a real small DuckDB benchmark through localrun_benchmark; andrun
uv run -- python scripts/verify_mcp_conformance.py --protocol-version 2026-07-28with no unexpected failures or warnings.
The external registry, TLS/identity edge, multi-host storage, OTLP, incident exercise, transcript, and named approval belong to deferred post-release shared-service publication.
Testing Locally¶
To verify the server works, you can test it interactively:
# Start server and send a test request
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | uv run python -m benchbox.mcp
This should return a JSON response listing all available tools.
Using the MCP Inspector¶
For interactive testing, use the pinned official MCP Inspector:
# Connect to an already-running localhost Streamable HTTP endpoint
npx --yes @modelcontextprotocol/inspector@2.0.0 --cli \
http://127.0.0.1:8000/mcp --transport http --method tools/list --format json
The inspector provides a web UI to browse tools, test calls, and view responses.
Server Options¶
benchbox-mcp supports explicit flags and environment-variable fallback.
CLI flags
Flag |
Description |
|---|---|
|
Results root used by MCP result reads/writes |
|
Charts root used by MCP visualization paths |
|
Logging level (DEBUG, INFO, WARNING, ERROR) |
|
|
|
Streamable HTTP bind host; non-loopback requires |
|
Streamable HTTP bind port (default |
|
Streamable HTTP endpoint path (default |
|
Remote-only JSON policy for SDK auth, tenancy, authorization, admission, and audit |
|
Revision-bound evidence required for every non-loopback bind |
Environment variables
Variable |
Default |
Description |
|---|---|---|
|
|
Results root when |
|
|
Charts root when |
|
|
Base root used to derive results/charts when specific vars are unset |
|
|
Logging level when |
|
none |
Exact deployed revision matched by remote readiness evidence |
|
none |
Out-of-band digest of the readiness evidence file |
|
none |
Shared OTLP/HTTP trace endpoint required for remote publication |
Discovery and list responses carry a public five-minute cache hint. Resource bodies, including recent results and system profiles, are always private and immediately stale. BenchBox exports only bounded allow-listed MCP span fields; tool arguments, result payloads, identities, authorization data, credentials, and raw database URLs are excluded.
Precedence
Explicit MCP flag (
--results-dir,--charts-dir,--log-level)Specific env var (
BENCHBOX_RESULTS_DIR,BENCHBOX_CHARTS_DIR,BENCHBOX_LOG_LEVEL)Derived from
BENCHBOX_OUTPUT_DIRfor pathsBuilt-in defaults (
benchmark_runs/results,benchmark_runs/charts,INFO)
Example:
BENCHBOX_RESULTS_DIR=/tmp/results BENCHBOX_LOG_LEVEL=DEBUG benchbox-mcp
Additional localhost examples:
# IPv4 loopback with a custom port and path
benchbox-mcp --transport streamable-http --port 8765 --streamable-http-path /benchbox-mcp
# IPv6 loopback
benchbox-mcp --transport streamable-http --host ::1
Tools¶
Tools are executable actions that can be invoked by AI assistants. BenchBox MCP
is a beta-public scoped surface over the shared BenchBox engine: all
benchmark business logic lives in benchbox.core below both CLI and MCP, and
each surface exposes a deliberately scoped subset of it. Surface asymmetry is
deliberate and ledgered, never a parity backlog. MCP must not import
benchbox.cli command internals. See
ADR: One Engine, Scoped Surfaces.
MCP run results are exported through ResultExporter as normal result JSON
bundles and include execution_context.entry_point = "mcp" when the result
object supports execution context metadata. Because both surfaces compute
results with the same core implementation, MCP numbers are comparable to CLI
numbers by construction; the bundles are schema-level comparable to CLI result
bundles.
Actual Tool Inventory¶
Tool |
Category |
Writes |
Purpose |
|---|---|---|---|
|
discovery |
No |
List platforms, benchmarks, chart templates, or all discovery data. |
|
discovery |
No |
Return benchmark metadata, queries, schema, and scale-factor information. |
|
discovery |
No |
Return CPU, memory, disk, Python, package, and BenchBox environment facts. |
|
discovery |
No |
Report platform dependency availability and install guidance. |
|
execution |
Yes |
Run, dry-run, or validate a benchmark through the MCP-scoped subset of the shared engine. |
|
execution aid |
No |
Return SQL or DataFrame query details for a benchmark/query/platform. |
|
results |
Optional |
List result files, read one result, or export a result in another format. |
|
analytics |
No |
Compare result files, detect regressions, calculate trends, or aggregate runs. |
|
analytics |
No |
Read captured query plans from a result bundle. |
|
analytics |
No |
Validate result JSON integrity, completeness, and believability. |
|
visualization |
No |
Suggest useful chart types for one or more result files. |
|
visualization |
No |
Generate ASCII chart output from result files. |
Authenticated remote mode additionally registers:
Tool |
Category |
Writes |
Purpose |
|---|---|---|---|
|
durable execution |
Yes |
Queue a tenant-owned benchmark and return an |
|
durable execution |
No |
Read owned job state, attempts, cancellation, and timestamps. |
|
durable execution |
No |
Read the owned result after atomic publication. |
|
durable execution |
Yes |
Cancel queued work or request cancellation at the next safe worker boundary. |
Run Surface Contract¶
run_benchmark remains the synchronous local-compatible execution tool.
Dry-run preview and configuration validation are modes on it (dry_run=true
and validate_only=true), not separate MCP tools. Authenticated remote clients
should use start_benchmark for a normal long-running execution; the durable
tool accepts the same normal-run fields plus an optional idempotency_key, but
does not expose dry_run or validate_only. In remote mode, a normal
run_benchmark call is rejected immediately; its dry_run and validate_only
modes remain available because they do not hold the request for execution.
MCP run parameter schema
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string |
Yes |
- |
Target platform, for example |
|
string |
Yes |
- |
Benchmark identifier, for example |
|
number |
No |
|
Data scale factor; benchmark-specific defaults and constraints may still apply. |
|
string or null |
No |
|
Comma-separated query IDs, for example |
|
string or null |
No |
|
Comma-separated phases; execution defaults to |
|
string or null |
No |
|
Execution mode: |
|
boolean |
No |
|
Capture query plans where the selected platform supports them. |
|
boolean |
No |
|
Preview the run plan without executing queries. |
|
boolean |
No |
|
Validate platform, benchmark, scale, and mode without executing. |
|
object or null |
No |
|
Typed, bounded, non-secret settings approved for the selected platform; credentials, endpoints, paths, and package-install controls are rejected. |
Behavior
validate_only=truereturns configuration validity, resolved execution mode, errors, and warnings.dry_run=trueuses the core dry-run executor and returns the plan/resources preview the MCP subset can model; it currently reports the default load/power plan rather than applying thephasesparameter.mode=data_onlygenerates benchmark data without running queries. This is a deliberate, ratified asymmetry rather than a ledgered omission, and it runs the other way from the rest of the ledger: MCP accepts a value here thatbenchbox run --modedoes not.sqlanddataframeare platform capabilities, validated againstbenchbox.core.constants.RUN_MODES;data_onlyis an execution type (benchbox.core.constants.EXECUTION_TYPES), meaning “run no queries at all”. The CLI derives that execution type from--phases generate, so it has no reason to name it on--mode. MCP’s phase surface is a single string with no interactive selection behind it, so it names the execution type directly.datagenandgenerateremain accepted spellings ofdata_only. Both synchronous requests and durable workers route this execution through the shared core run service; MCP owns only the structured response envelope and tenant-scoped artifact path.phasesis validated againstbenchbox.core.constants.VALID_PHASESat admission, on bothrun_benchmarkandstart_benchmark. An unknown phase is rejected with the valid list; previously it was accepted and then silently dropped, so a typo likeload,lodadran only the load phase without reporting anything.phasesapplies to normal execution and maps to the benchmark execution type used byBaseBenchmark.run_with_platform().platform_optionsis normalized and validated before any adapter is built. The allow-list is intentionally narrower than the CLI’s--platform-optionsurface: only bounded execution settings such as DuckDBmemory_limit/threads, DataFusion partition settings, and selected DataFrame toggles are accepted. Unknown keys, credentials, DSNs, hosts, filesystem paths, unbounded values, and driver auto-install/version controls fail closed. Authenticated durable jobs persist only this normalized object, so retries and worker restarts cannot reintroduce raw request mappings.Velox
deploymentis not exposed over MCP. Local execution is the only deployment MCP can fully describe;remotewould require an operator-approved endpoint (sc://) and additional packaging/runtime controls that are not part of the MCP allow-list. Bothremoteanddockerare rejected at admission, so a request can never redirect execution to an endpoint it did not name via a server-owned profile.dockeris rejected: thedocker/velox/tree is packaging infrastructure for local development, not a deployment mode with its own lifecycle, endpoint, isolation, and cleanup contract. See the omission ledger below.Modin
engineaccepts onlyrayanddaskover MCP. The adapter itself also supportsunidist, which stays documented for CLI and Python-API callers but is deliberately outside the MCP surface while it is experimental.pandasis rejected everywhere: it resembles a valid Modin engine name but is not a supported BenchBox backend, and accepting it would create a public contract that fails late. A pre-setMODIN_ENGINEstill takes precedence, but it is validated against the same reviewed set rather than trusted.DuckDB
threadsis the public option name and maps to the adapter’sthread_limit, which becomes aSET threadsstatement on the connection. The public name is unchanged; only the internal mapping is documented here.Databricks clustering options are translated into effective tuning before the adapter is built.
databricks_clustering_strategyandliquid_clustering_columnsbecome aPlatformOptimizationConfigurationthat the clustering resolver consumes; forwarding the raw names would leave them to be dropped byfrom_configand silently fall back to ZORDER. Contradictory combinations (for examplez_orderwith liquid clustering columns) are rejected as validation errors at admission, before a durable job is persisted and before any remote connection.Dask cluster sizing is bounded in aggregate, not only per field. A request’s
n_workers,n_workersxthreads_per_worker, andn_workersxmemory_limitmust all fit inside a server-owned budget, enforced before the adapter builds itsLocalCluster(see MCP remote security).ClickHouse connection destinations are server-owned. A request cannot set
portorsecure; both are rejected for every ClickHouse spelling. A non-default port or TLS setting is reachable only throughconnection_profile, which names a profile the operator defined inBENCHBOX_MCP_CLICKHOUSE_PROFILES(see MCP remote security). Requests carry and persist only the profile name; the port and TLS policy are resolved from server configuration at execution time.The authoritative option-to-consumer, security-class, alias, and rejection matrix is maintained in
docs/development/mcp-platform-option-contract.md. Every allow-listed key must have a matching matrix entry; a missing entry fails closed before adapter construction or durable-job persistence.Normal execution uses
BaseBenchmark.run_with_platform()through public benchmark and adapter APIs.MCP execution intentionally suppresses console output and returns structured JSON for agent clients.
Exported result bundles are anonymized when, and only when, the server runs under a remote security policy. Local stdio serves a same-trust-boundary agent that needs real paths and hostnames to act on results; a remote tenant is a different trust boundary, so
run_benchmark, durable job publication, andanalyze_resultscomparisons all export with anonymization enabled there.
Scoped-surface omission ledger
These benchbox run controls are not MCP parameters. Each entry carries exactly
one ratified tier reason, defined in
ADR: One Engine, Scoped Surfaces:
security-scoped — permanent. Admitting the control would let a request name credentials, endpoints, filesystem or cloud destinations, or unbounded resources, or would trigger destructive or publishing side effects. Parity never applies to these. A bounded, typed, server-validated allow-list entry is a new narrow control, not a promotion of the CLI flag.
interaction-scoped — permanent. The control governs terminal interaction or presentation and has no meaning in a structured request/response protocol.
not-yet-demanded — provisional. Nothing about security or interaction blocks it; no MCP client has demanded it. Promotion is demand-driven and is recorded as a deferral on the
one-engine-parity-ledgertracker item.
An omission that is absent from this ledger is a defect, not a decision.
Per-Tool CLI↔MCP Mapping Ledger¶
Every local MCP tool names its CLI counterpart(s) or none. Every CLI command
family absent from MCP carries exactly one ratified tier tag. Together the two
tables below cover all 12 local tools and every CLI command family with no MCP
tool.
MCP tool → CLI mapping (12 local tools)
MCP Tool |
Category |
CLI counterpart(s) |
Notes |
|---|---|---|---|
|
discovery |
|
Discovery inventory. CLI lists are the authoritative registry read path; MCP exposes the same metadata via registry. |
|
discovery |
|
Single-benchmark metadata, query counts, and scale constraints. CLI |
|
discovery |
|
Host, CPU, memory, and package facts. |
|
discovery |
|
Dependency availability and install guidance. |
|
execution |
|
Scoped subset of |
|
execution aid |
|
MCP-only convenience: CLI users read query SQL from the benchmark source tree; MCP returns it structured per platform/mode. |
|
results |
|
Lists, reads, and exports result bundles; MCP inline-reads while CLI renders to stdout/files and supports cloud export. |
|
analytics |
|
Comparison, regression, trend, and aggregation over result bundles. |
|
analytics |
|
Reads captured plans from a result bundle; CLI also renders live plans. |
|
analytics |
|
Result JSON integrity and believability checks ( |
|
visualization |
|
Suggests semantic chart types for result files. |
|
visualization |
|
Generates ASCII charts; MCP is inline-only by contract, CLI may write files. |
CLI command families with no MCP tool
CLI command family |
Tier |
Reason |
|---|---|---|
|
security-scoped |
Hosted credential provisioning and token lifecycle; MCP carries no credential-issuance surface. |
|
security-scoped |
Publication writes to an external destination and assigns trust labels; MCP requests do not carry publish authority. |
|
security-scoped |
Posts a result bundle to the hosted results platform; remote tenants must not submit on behalf of the server identity. |
|
security-scoped |
Interactive credential and connection bootstrap that writes local config and touches filesystem/cloud state. |
|
interaction-scoped |
Interactive SQL REPL; interaction has no meaning in a request/response protocol. |
|
not-yet-demanded |
Standalone data generation without a power run; MCP expresses this as |
|
not-yet-demanded |
Table-format conversion (e.g. parquet → delta); bounded enum, no MCP client has demanded it. |
|
not-yet-demanded |
Tuning template discovery and validation; promotion would be the enum subset ( |
|
not-yet-demanded |
Plan evolution history over multiple runs; bounded read, no client demand yet. |
|
security-scoped |
Fetches external TPC answer keys from a remote source; network fetch with no tenant budget. |
|
not-yet-demanded |
QphH composite metric calculation; bounded, no MCP client has demanded it. |
|
not-yet-demanded |
Config-file syntax and completeness check; file-path input outside the MCP result-registry surface. |
Scoped-Surface Omission Ledger — benchbox run Flags¶
The section below ledgers every benchbox run flag not exposed as an
run_benchmark parameter. The tier taxonomy is shared with the per-tool ledger
above.
CLI surface |
MCP status |
Tier |
Reason |
|---|---|---|---|
|
Omitted |
security-scoped |
Result roots are server configuration ( |
|
Narrow MCP subset |
security-scoped |
MCP accepts only its typed, non-secret allow-list; the full CLI key/value surface can carry credentials, DSNs, hosts, and paths. |
|
Omitted |
security-scoped |
Unbounded key/value plumbing into benchmark internals has no typed, fail-closed admission model. |
|
Omitted |
security-scoped |
Forced regeneration and upload overwrite server-owned data outside the requesting tenant’s lifecycle. |
|
Omitted |
security-scoped |
Redirects writes to a shared |
|
Omitted |
security-scoped |
Publication writes to an external destination; MCP requests do not carry publish authority. |
|
Omitted |
security-scoped |
Names an external local or cloud destination ( |
|
Omitted |
security-scoped |
Trust labelling is a maintainer attestation, not a request-supplied field. |
|
Omitted |
interaction-scoped |
MCP requests are non-interactive by protocol; interactive prompts are never issued, so the flag has no effect to expose. |
|
Omitted |
interaction-scoped |
Progress bars are terminal presentation; MCP returns structured JSON. |
|
Omitted |
interaction-scoped |
Console verbosity control; MCP already suppresses console output. |
|
Omitted |
interaction-scoped |
Console verbosity control; MCP response detail is governed by tool schemas. |
|
Omitted |
not-yet-demanded |
Repeated power-test measurement is expressible over MCP; no client has demanded it. |
|
Omitted |
not-yet-demanded |
RNG seed for query parameter generation; bounded integer, no client demand yet. |
|
Omitted |
not-yet-demanded |
TPC-compliant mode is a bounded boolean; it additionally requires |
|
Omitted |
not-yet-demanded |
Bounded codec enum; no client demand yet. |
|
Omitted |
not-yet-demanded |
Bounded table-format spec; no client demand yet. |
|
Omitted |
not-yet-demanded |
Bounded pre-sort enum; no client demand yet. |
|
Omitted |
not-yet-demanded |
Promotion must be enum-only ( |
|
Omitted |
not-yet-demanded |
Bounded |
|
Omitted |
not-yet-demanded |
Bounded ingestion-ordering controls; no client demand yet. |
|
Omitted |
not-yet-demanded |
MCP exposes only the |
Velox |
Omitted |
security-scoped |
Remote Velox would require an operator-approved endpoint and runtime controls; only local Velox is exposed over MCP to avoid caller-controlled destination selection. |
|
Omitted |
not-yet-demanded |
MCP exposes only the |
|
Omitted |
not-yet-demanded |
Metrics-collection toggle; bounded boolean, no client demand yet. |
|
Omitted |
interaction-scoped |
Live plan display is terminal presentation; MCP returns structured results and captured plans through result tools. |
|
Omitted |
not-yet-demanded |
Plan normalization toggle is a bounded control with no client demand yet. |
|
Omitted |
not-yet-demanded |
Per-table timing detail is a bounded reporting control with no client demand yet. |
|
Omitted |
not-yet-demanded |
Strict SQL-translation behavior is a bounded execution control with no client demand yet. |
|
Omitted |
not-yet-demanded |
Plan-capture detail toggle is a bounded control with no client demand yet; MCP already exposes only |
|
Omitted |
not-yet-demanded |
Statistics rebuild/reset is a bounded measurement control with no client demand yet. |
|
Omitted |
security-scoped |
Concurrent streams are a resource-budget control; MCP must not admit caller-chosen unbounded fan-out. |
|
Omitted |
security-scoped |
Skips memory-admission checks. Resource-budget bypasses stay permanently omitted from MCP. |
|
Omitted |
not-yet-demanded |
Funding metadata is a bounded provenance field with no client demand yet. |
|
Omitted |
not-yet-demanded |
Result-source selection is a bounded provenance control with no client demand yet. |
The textcharts MCP server remains a separate-client integration, not a bundled or proxied part of benchbox-mcp. See docs/design/textcharts-mcp-boundary.md for the accepted separate textcharts configuration and the rejected bundle/proxy alternatives.
Discovery Tools¶
list_available¶
List platforms, benchmarks, chart templates, or all discovery data.
Benchmark rows include support_status from
benchbox.core.benchmark_registry; MCP does not maintain a separate support
classification.
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string |
No |
|
|
get_benchmark_info¶
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string |
Yes |
- |
Benchmark identifier. |
Returns benchmark metadata including support_status, category, query/schema
information, scale-factor constraints, and DataFrame capability.
system_profile¶
No parameters. Returns host and package information useful for capacity planning.
check_dependencies¶
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string or null |
No |
|
Specific platform to check; omitted checks all platforms. |
|
boolean |
No |
|
Include detailed package information. |
Benchmark Query Tools¶
get_query_details¶
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string |
Yes |
- |
Benchmark identifier. |
|
string |
Yes |
- |
Query identifier, for example |
|
string or null |
No |
|
Optional platform for dialect-specific query lookup. |
|
string or null |
No |
|
|
Public benchmark query details include registry support_status in
benchmark_info. Internal/repo-only benchmark details remain addressable by
explicit ID where previously supported, but do not expose support-status claims.
See the Benchmark Visibility Policy
for the full surface-by-surface matrix.
Results Tools¶
get_results¶
get_results combines recent-run listing, result reading, and result export.
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string or null |
No |
|
Result filename; omitted lists recent runs. |
|
string |
No |
|
|
|
string or null |
No |
|
Export path relative to the configured results dir. |
|
integer |
No |
|
Max recent runs when listing. |
|
string or null |
No |
|
Platform filter when listing. |
|
string or null |
No |
|
Benchmark filter when listing. |
|
boolean |
No |
|
Include query details when reading one result. |
Analytics Tools¶
analyze_results¶
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string |
No |
|
|
|
string or null |
No |
|
Baseline result file for |
|
string or null |
No |
|
Comparison result file for |
|
string or null |
No |
|
Platform filter for non-compare analyses. |
|
string or null |
No |
|
Benchmark filter for non-compare analyses. |
|
number |
No |
|
Regression/change threshold. |
|
string |
No |
|
Trend metric: |
|
string |
No |
|
Aggregate grouping: |
|
integer |
No |
|
Max runs to analyze where applicable. |
get_query_plan¶
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string |
Yes |
- |
Result filename containing captured query plans. |
|
string |
Yes |
- |
Query identifier. |
|
string |
No |
|
|
validate_results¶
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string |
No* |
|
Path to one result JSON file. |
|
string |
No* |
|
Directory of result JSON files for batch validation. |
|
boolean |
No |
|
Include PASS checks in output. |
*Provide either result_file or directory.
Visualization Tools¶
BenchBox MCP visualization is result-aware semantic charting. suggest_charts
and generate_chart read BenchBox result files and accept semantic chart IDs
from benchbox.core.visualization.chart_types, such as performance_bar,
power_bar, and query_heatmap. These IDs are distinct from raw
textcharts_* primitive MCP tools. BenchBox does not register or proxy the
external textcharts-mcp server; if a client configures that server separately,
its tools remain a separate raw rendering namespace.
The textcharts Python package is an implementation dependency of BenchBox’s
ASCII compatibility layer, not an MCP server registration. Running only
benchbox-mcp therefore publishes the result-aware tools listed below; a
client that intentionally configures a separate textcharts-mcp process sees
that server under its own namespace and must apply its own support and security
review.
suggest_charts¶
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string |
Yes |
- |
Comma-separated result filenames. |
generate_chart¶
Name |
Type |
Required |
Default |
Description |
|---|---|---|---|---|
|
string |
Yes |
- |
Comma-separated result filenames. |
|
string |
No |
|
Chart type for single-chart output. |
|
string or null |
No |
|
Template name for multi-chart output. |
|
string or null |
No |
|
Must remain |
|
string |
No |
|
Must be |
Chart generation is intentionally inline-only. generate_chart returns the
ASCII content in the MCP response and does not create a caller-selected file.
This keeps chart output inside the response boundary while a future artifact
contract is designed for tenant ownership, path containment, overwrite and
retention semantics. Requests that set output_dir or choose another format
fail closed with a structured validation error.
Available chart_type values and template names are derived from the
visualization registries and are discoverable with list_available(category="charts").
Prompts¶
Prompts are reusable templates for AI analysis. Invoke via slash commands in Claude Code.
The same prompt catalog is available through both supported transports: use
prompts/list to discover the seven names and argument schemas, then
prompts/get with a prompt name and string-valued arguments to render one
prompt. Stdio and sessionless Streamable HTTP return the same prompt metadata
and rendered text; HTTP requests do not require or receive an Mcp-Session-Id.
The landing quickstart catalog references three of these prompts for guided
benchmark flows; the four remaining prompts are still first-class MCP prompts
and are discoverable at runtime.
analyze_results¶
Analyze benchmark results and identify performance patterns.
Arguments (positional):
benchmark(default: “tpch”)platform(default: “duckdb”)focus(optional): Focus area like ‘slowest_queries’, ‘memory’, ‘io’
Usage:
/mcp__benchbox__analyze_results tpch duckdb slowest_queries
compare_platforms¶
Compare benchmark performance across multiple platforms.
Arguments (positional):
benchmark(default: “tpch”)platforms(default: “duckdb,polars-df”): Comma-separated platform namesscale_factor(default: 0.01)
Usage:
/mcp__benchbox__compare_platforms tpch "duckdb,polars-df,sqlite" 0.1
identify_regressions¶
Identify performance regressions between benchmark runs.
Arguments (positional):
baseline_run(optional): Baseline result filecomparison_run(optional): Comparison result filethreshold_percent(default: 10.0)
Usage:
/mcp__benchbox__identify_regressions run1.json run2.json 5
benchmark_planning¶
Help plan a benchmark strategy for a specific use case.
Arguments (positional):
use_case(default: “testing”): One of ‘testing’, ‘production’, ‘comparison’, ‘regression’platforms(optional): Comma-separated platform listtime_budget_minutes(default: 30)
Usage:
/mcp__benchbox__benchmark_planning comparison "duckdb,snowflake" 60
troubleshoot_failure¶
Diagnose and resolve benchmark failures.
Arguments (positional):
error_message(optional): Error message from failed runplatform(optional): Platform where failure occurredbenchmark(optional): Benchmark that failed
Usage:
/mcp__benchbox__troubleshoot_failure "Connection refused" snowflake tpch
benchmark_run¶
Execute a planned benchmark with validation and dependency checks.
Arguments (positional):
platform(default: “duckdb”): Target platformbenchmark(default: “tpch”): Benchmark to runscale_factor(default: 0.01): Data scale factorqueries(optional): Query subset (e.g., “1,5,10”)
Usage:
/mcp__benchbox__benchmark_run duckdb tpch 0.1
/mcp__benchbox__benchmark_run snowflake tpcds 1 "1,5,10"
This prompt:
Validates the configuration
Checks dependencies
Runs the benchmark
Provides execution summary and recommendations
platform_tuning¶
Get tuning recommendations for a specific platform.
Arguments (positional):
platform(default: “duckdb”): Platform to tuneworkload(optional): Workload characteristics description
Usage:
/mcp__benchbox__platform_tuning duckdb
/mcp__benchbox__platform_tuning snowflake "heavy aggregation workload"
This prompt provides:
Memory configuration recommendations
Parallelism settings
I/O optimization
Platform-specific tuning parameters
Resources¶
Resources provide read-only access to BenchBox data. Currently, resources are accessed indirectly through tools.
Error Handling¶
All tools return structured error information:
{
"error": "Description of the error",
"error_type": "ExceptionClassName",
"suggestion": "How to resolve the issue"
}
Common error types:
ConfigurationError: Invalid platform or benchmark configuration
DependencyError: Missing required dependencies
FileNotFoundError: Result file not found