Skip to content

MCP platform-option contract

This matrix is the review boundary for platform_options on the MCP run and durable-job surfaces. The value specs and the matrix in benchbox/mcp/schemas.py must have identical platform and option keys. A request is rejected when either record is missing, before an adapter is built or a durable job is persisted.

The matrix is intentionally narrower than the CLI option registry. consumer identifies the code path that must consume the normalized value; it is not permission to expose the underlying adapter’s full configuration surface.

Security classification

security_class states the review signal. connection means the option can change which endpoint the server talks to. Any option able to steer the server from an in-process engine to a network client, to choose among network destinations, or to alter the transport policy (TLS, authentication) is connection and must name a server-owned destination rather than describe one (for example, a profile name resolved via BENCHBOX_MCP_CLICKHOUSE_PROFILES, not a caller-supplied host, port, or secure flag). No additional option may be introduced that lets an MCP caller describe a destination or downgrade a transport; new connection options require a server-owned registry and execution-time resolution. resource, execution, device, and layout encode aggregate budget, mode, device, and storage-layout intents and must never be able to change the endpoint.

PlatformOption(s)ConsumerSecurity classCompatibility alias / rejected alternatives
ClickHousedeployment_modeClickHouseAdapter.from_config, resolved through the core deployment selectorconnectionDeprecated alias of the clickhouse:local|server platform name, answered with a deprecations entry. mode is not accepted over MCP. Flips an in-process engine to a network client; destinations and transport policy remain server-owned, caller names a profile rather than describes a destination.
ClickHouseconnection_profileClickHouseAdapter.from_config(port, secure) resolved from BENCHBOX_MCP_CLICKHOUSE_PROFILESconnectionReject caller-supplied port/secure, arbitrary destinations, and TLS downgrade. Only the profile name is accepted and persisted.
cuDFdevice_id, spill_to_hostcuDF runtime and memory policydevice/resourceReject device paths, scheduler endpoints, and package controls.
Daskmemory_limit, n_workers, threads_per_workerLocalCluster resource envelope, bounded in aggregate by load_dask_resource_envelope() before adapter constructionresourcePer-field maxima are insufficient: worker count, n_workers x threads_per_worker, and n_workers x memory_limit are each capped by a server-owned budget. Reject scheduler endpoints and spill paths.
Daskuse_distributedDask execution-mode selectorexecutionReject external scheduler selection.
DataFusionbatch_size, memory_limit, target_partitionsDataFusion execution configurationresourceReject filesystem paths and unbounded worker controls.
DataFusionparquet_pushdown, repartition_joinsDataFusion execution optionsexecutionReject arbitrary SQL or datasource configuration.
DuckDBmemory_limit, threadsDuckDB adapter settingsresourcePublic threads maps to adapter thread_limit; reject raw SQL settings.
Fireboltdisable_result_cache, strict_validationFirebolt execution/validation optionsexecutionReject credentials, account, database, and endpoint fields.
Databricksdatabricks_clustering_strategy, liquid_clustering_columnsPlatformOptimizationConfiguration via build_databricks_clustering_intent(), reaching the resolver as unified_tuning_configurationlayoutRaw option names are dropped by from_config, so only the translated tuning object counts. Contradictory combinations are rejected at admission. Reject raw connection settings.
pandasdtype_backendpandas dataframe dtype backendexecutionReject package installation and arbitrary dtype expressions.
Polarsn_rows, rechunkPolars input and memory layoutresourceReject filesystem paths and unbounded row counts.
PolarsstreamingPolars dataframe execution modeexecutionReject arbitrary engine/plugin configuration.
Sparkadaptive_enabledSpark adaptive execution settingexecutionReject cluster, master, and filesystem controls.
SQLitecheck_same_threadSQLite connection safety settingexecutionReject database paths and URI query controls.
SQLitetimeoutSQLite connection timeoutresourceReject arbitrary connection strings.
Veloxadaptive_enabledVelox execution optionsexecutionReject unreviewed execution flags.
Veloxdriver_memory, offheap_size, shuffle_partitionsVelox resource enveloperesourceReject paths, scheduler endpoints, and unbounded values.

Core parameters

Top-level tool parameters outside platform_options carry their own contract entries in MCP_CORE_PARAMETER_CONTRACT:

ParameterConsumerSecurity classCompatibility alias / rejected alternatives
execution_engineCore resolve_requested against the platform manifest, then the adapter’s execution-engine receiptexecutionPlatform-specific engine option names are rejected; the Polars engine platform option was removed without an alias.

Change protocol

Adding an option requires all of the following in one change:

  1. Add a bounded value spec and a matching matrix entry.
  2. Name the effective consumer and classify the security boundary.
  3. Record aliases and rejected alternatives, if any.
  4. Add a negative validation test and an effective-consumer test. Durable requests must prove that normalized options survive persistence and replay.
  5. Update the public reference only after the focused tests and lint pass.

Removing an option is fail-closed: delete it from both records, add a regression test for rejection, and document the compatibility impact. The matrix must never be widened merely to mirror the CLI registry.