Docs for writing manifoldbt backtests: DSL rules, signatures, examples and error fixes.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Explain an error returned by the manifoldbt engine: what it means, what caused it, and how to fix it. Paste the message verbatim. Use this before changing code in response to an engine error -- these messages name a rule rather than the mistake, and guessing wastes a round trip.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http docs https://mcp.manifoldbt.com/mcp
Explain an error returned by the manifoldbt engine: what it means, what caused it, and how to fix it. Paste the message verbatim. Use this before changing code in response to an engine error -- these messages name a rule rather than the mistake, and guessing wastes a round trip.
| Argument | Type | Description |
|---|---|---|
| message* | string |
{
"type": "object",
"title": "explain_errorArguments",
"required": [
"message"
],
"properties": {
"message": {
"type": "string",
"title": "Message"
}
}
}Which manifoldbt version this documentation covers, and which of the THREE licence tiers each feature needs. Check before writing code around sweeps, walk-forward, cross-exchange, the GPU or the tick layer: the first three refuse on Community, the last two on anything below Researcher -- and the two Researcher gates raise different exception types.
No arguments.
{
"type": "object",
"title": "get_capabilitiesArguments",
"properties": {}
}START HERE. Returns a complete, runnable backtest script (open a store, strategy, config, fees, run, read the metrics) plus the stateful-band, bracket-exit, higher-timeframe and cross-asset variants -- then the list of rules the engine enforces and of what a fill actually does (which fee a stop pays, where a gapped bracket fills, what a reversal counts as). One call replaces the eight searches every first script otherwise needs.
No arguments.
{
"type": "object",
"title": "list_topicsArguments",
"properties": {}
}Search the manifoldbt documentation: DSL rules and pitfalls, indicator and API signatures, config fields, execution semantics (which price a stop or target fills at, which fee each fill pays, what a reversal counts as, which ddof an indicator uses), how to read result metrics honestly, and worked examples. Ask in natural language ('how do I reference another symbol', 'what happens when a bar gaps through my stop', 'is this Sharpe meaningful') or by name ('symbol_ref', 'warmup_bars').
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string |
{
"type": "object",
"title": "search_docsArguments",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 5
},
"query": {
"type": "string",
"title": "Query"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 7, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.