Discovery
Every server shares the helpers below. The connected server’stools/list is authoritative.
Clients that support MCP resources can use
resources/list and read the advertised quantx-skill://.../manifest URI. Clients that do not can reach the same content through the list_resources and read_resource tools. These two are the only tools without a request envelope: call list_resources with {} and read_resource with {"uri": "..."}.
Stored Results
A successful call puts its data in
result, inline. Large outputs are the exception: the payload is replaced by a stored reference.
result_get only when result.data_stored is true, on the same server and with the same authorized user:
result.payload, alongside metadata such as result_id, tool_name, and summary. Note that a call can report a result_id while still returning its data inline; that id alone does not mean the payload was stored. The reference object and the preview are summaries — the data itself is in result.payload.
Some tools accept a result_id or variable of their own; their schema says where. The aliases $last, $prev, and $prev2 point at a moving target as further calls run, so explicit ids are safer in automated or parallel work. A reference is not a drop-in for a value either: where a schema asks for a table object, a string id will not do.
Result ids are local to the server that issued them. To move data between servers — Dataloader to Jump Models, say — fetch the payload and pass the rows or arrays across; a bundle connection does not merge the stores behind it.
Artifact Export
Call
save_tool_result with exactly one source: result_id, variable, or payload. Use JSON for arbitrary nested results; use CSV for a table extracted from the result.
artifact_id with artifact_read_chunk:
data (the base64 string), encoding ("base64"), offset, next_offset, eof, and byte_size. Decode data, append the bytes in order, and continue from next_offset until eof is true. If the deployed schema allows a smaller chunk size, honor that limit.
Prefer JSON, CSV, or Parquet for exchange; do not deserialize an untrusted pickle.
Tables and Workspace Files
Workspace paths are relative logical paths in the user’s server-side storage, not paths on your computer or the server host. For example, call
fs_write_file:
root, which names the workspace rather than forming part of a path — table helpers take the path alone in their workspace_path. They read CSV, TSV and JSON, and matrix conversion expects numeric columns.
table_to_ndarray preserves missing cells as JSON null, and whether that is acceptable depends on where the matrix goes next. Stock-Watson and Banbura-Modugno handle the gaps themselves. Complete-panel PCA and Jump Models require every cell to be numeric, so drop or impute the affected columns before fitting. Both operations change the sample, so profile the table first and record what you removed.
Object Handles
Object tools follow*-create, *-info, *-list, and *-delete. A create response supplies a handle; pass it as the receiving tool’s handle. When a nested parameter expects an object, pass {"__handle__": "<handle>"} where its schema allows it.
As long as the object stays loaded, later calls reuse its working state: a fitted model stays fitted, and an estimator keeps the updates you fed it. This is convenience, not storage — save the factors, predictions, and diagnostics you get back. If a call reports the object is missing or not fitted, create or fit it again.
Some tools require handle; swfactor-extractor-fit and the Wavelet strategy tools are examples. Where handle is optional and you omit it, the call falls back to a default instance shared with other callers rather than an object of your own. For anything stateful, create your own handle and pass it on every call.
Error Handling
A failed call shows up in two places: as a transport error, or as a tool-level error inside an otherwise normal response. Both carry a code:
Repeating a read or a deterministic calculation is usually fine after you correct the inputs. Create, export, write, update, reset, and delete calls change state: a retry can leave behind a second handle or artifact, overwrite a workspace file, or apply an update twice.