Official MCP reference endpoint

Backtest from your AI agent

You already point an agent at Manifold-BT, and it hands back code that looks right and will not compile. Give it the guide, every signature and the rules the compiler enforces, and the first version runs.

$pip install manifoldbt
MCPhttps://mcp.manifoldbt.com/docs/mcp

The engine on your machine, the reference for your agent.

~40x
less context than pasting the guide
64 ms
typical lookup
220
reference entries indexed

What a copy-paste cannot give it

Cost is only the visible half. The rest is that a pasted page goes stale, arrives without the parts that matter, or never arrives at all.

A crawler sees navigation, not documentation

retrieval

This site renders client-side. An agent that fetches a documentation URL gets the page shell, not the guide, so it falls back to guessing. The MCP hands it the actual text, already split into sections.

The rules no signature reveals

correctness

How to combine two conditions, when a NaN is the correct position, what a cross-asset reference requires, why a window comes back empty. None of it is inferable from a function list, and all of it is what the compiler refuses.

Answers are stamped to a version

freshness

Signatures, config fields and indicator lists are generated by introspecting a real engine build, not written from memory. Every answer reports the version it describes, so a stale reply is visible rather than plausible.

Connect in one line

A hosted HTTP endpoint: nothing to install, nothing to keep updated, and no engine on your side of the wire. Point any MCP client at the URL.

Cursor / VS Code / Windsurf
mcp.json
{
  "mcpServers": {
    "manifoldbt-docs": {
      "url": "https://mcp.manifoldbt.com/docs/mcp"
    }
  }
}
Claude Code
claude mcp add --transport http manifoldbt-docs https://mcp.manifoldbt.com/docs/mcp

Then ask for a strategy as you normally would. The agent consults the reference on its own.

Four tools, deliberately

A long tool list makes a model pick worse. This one covers the whole authoring loop and stops there.

search_docs

Search the authoring guide, DSL rules, indicator and config signatures, and worked examples. Ask in natural language or by symbol name.

explain_error

Paste an engine error verbatim and get the cause and the fix. Engine messages name a rule, not the mistake that triggered it.

get_capabilities

Which engine version the reference covers, and which research APIs are gated behind a Pro licence.

list_topics

Everything the reference holds, by kind, for when a search comes back empty.

Errors become fixes

The engine's messages are precise but written for someone who already knows the execution model. They state a rule, not the mistake that broke it, so an agent reading one tends to change something adjacent and try again.

explain_error closes that loop: paste the message, get the cause and the correction. Each entry is an error that came up in real use.

SymbolRef requires orchestrator-level multi-symbol handling

A cross-asset reference was evaluated per symbol. Use the dict universe form, qualify the name, and keep symbol_ref() inside a signal.

'close' is not callable

Price columns are bare names. Write close, not close(...); use symbol_ref('BTCUSDT', 'close') for another market.

chained comparisons (a < b < c) are not supported

& binds tighter than >. Parenthesise each side: (close > ema(close,50)) & (close > ema(close,200)).

empty bar dataset

Almost always a missing end date: timestamps are nanoseconds, so a start with no end asks for an empty window.

What it changes in practice

You ask for the strategy you want. The agent checks the reference before writing, so the first version compiles and the parameters mean what you intended, rather than arriving three corrections later.

The rules it needs are the ones no signature reveals: how to combine conditions, when a NaN is correct, why a window comes back empty, what a cross-asset reference requires.

You: add a regime filter to my ETH strategy using BTC's trend

Agent: search_docs("reference another symbol")
       -> Cross-Asset References + a worked example

     : writes symbol_ref("BTCUSDT", "close") inside a signal,
       parenthesises the conditions, sets warmup_bars

Your backtests stay yours

The engine runs on your machine, against your own data store. Nothing about a strategy you are working on, and none of the data you run it against, is sent anywhere: the endpoint only ever receives a question about the documentation.

That is also why it is fast and always available. It holds no engine and no market data, so there is nothing to queue behind and nothing to saturate, and it answers a lookup in milliseconds no matter what you are running locally.

Give your agent the reference

One URL in your MCP client, and the next strategy it writes for you compiles.