backtest360-mcp

MCP serverAI & models

backtest360 connects your AI to the Backtest360 engine, so it can run backtests on trading strategies for you. Once added, you can ask your AI to test how a strategy would have performed and get the results back in plain language.

Use backtest360-mcp in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add backtest360-mcp and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use backtest360-mcp to get me

Details

Available today. Use it from your connected AI after setup.

Add backtest360 to your AI, then describe a trading strategy you want to test and ask it to run a backtest.

backtest360-mcpStart free

What your AI can do with it

  • Run backtests on trading strategies
  • Get performance results from the Backtest360 engine
  • Test strategy ideas before risking real money

Install backtest360-mcp

The server’s own address, for the clients that take one directly. Or connect Ahel once and every client you use reads it from one address, with the account kept on Ahel rather than in each client’s config.

  • Claude Code

    claude mcp add --transport http --scope user backtest360-mcp 'https://mcp.backtest360.com/mcp'

    Run it once in your project, then open /mcp to approve any sign-in the server asks for.

  • Claude Desktop

    https://mcp.backtest360.com/mcp

    Add a custom connector in Settings, paste this address, and approve the sign-in.

  • Cursor

    cursor://anysphere.cursor-deeplink/mcp/install?name=backtest360-mcp&config=eyJ1cmwiOiJodHRwczovL21jcC5iYWNrdGVzdDM2MC5jb20vbWNwIn0=

    Open the link and Cursor adds the server at that address.

  • ChatGPT

    https://mcp.backtest360.com/mcp

    In Settings, enable Developer mode, create an MCP app, and paste this address. Your plan and workspace must allow custom apps.

  • Codex

    codex mcp add backtest360-mcp --url 'https://mcp.backtest360.com/mcp'

    Run it once, then sign in with codex mcp login backtest360-mcp if the server asks for an account.

From the project's README

As published by backtest360/backtest360-mcp in README.md.

MCP server exposing the Backtest360 engine API as tools for AI agents.

Connect any MCP-capable AI client and drive real backtests conversationally: discover indicators, build and validate strategies, run backtests, and read the results — all against the deterministic Backtest360 engine. The server contains no AI and computes no numbers of its own; it is a thin, faithful adapter over the engine HTTP API. Your engine API key and its plan govern everything (permissions, rate limits, data access).

Two transports: a hosted HTTP endpoint at https://mcp.backtest360.com/mcp (send your key as an X-API-Key header) and local stdio (self-host — see below).

Install

pip install backtest360-mcp        # or, from a clone: pip install -e .

Requires Python 3.10+ and a Backtest360 API key. Get one free, instantly at backtest360.com/api-access — submit your email and a key (format b360_…) is issued on the spot and emailed to you; no approval needed. Authentication is API-key only. The free tier runs backtests on data you upload; fetching historical price data from the engine server-side is a paid capability.

Configuration

Everything is environment-driven:

VariableRequiredDefaultPurpose
BACKTEST360_API_KEYyes—Engine API key, sent as X-API-Key
BACKTEST360_ENGINE_URLnohttps://api.backtest360.comEngine base URL
BACKTEST360_MCP_TIMEOUTno300Per-request timeout (seconds)
BACKTEST360_MCP_MAX_OUTPUT_BYTESno100000Hard cap on a single tool result

Connect an MCP client

Hosted (recommended)

Point your MCP client at the hosted endpoint over HTTP and send your key as an X-API-Key header:

{
  "mcpServers": {
    "backtest360": {
      "type": "streamable-http",
      "url": "https://mcp.backtest360.com/mcp",
      "headers": {
        "X-API-Key": "b360_..."
      }
    }
  }
}

Local (stdio)

Run the server yourself and let your client launch it over stdio (the common mcpServers shape):

{
  "mcpServers": {
    "backtest360": {
      "command": "backtest360-mcp",
      "env": {
        "BACKTEST360_API_KEY": "b360_..."
      }
    }
  }
}

Prefer not to put the key in a config file? Point command at a small wrapper script that exports the key from your secrets manager and then runs backtest360-mcp. A minimal example config is in examples/mcp.json.

Tools

ToolWhat it does
engine_infoEngine version, API contract, health
get_meWhat the configured key can do: permission scopes, limits, current usage, capability flags
get_catalogReference catalogs: operators, execution modes, stop types, sizing methods, bar frequencies, metric sections
list_indicatorsIndicator discovery; per-indicator parameter schemas
list_templatesPredesigned strategy templates — discover compactly, fetch one in full, ready to validate and run
get_strategy_schemaJSON Schema for strategy documents
validate_strategyValidate a strategy without running it — returns structured, locatable errors
run_backtestRun a historical backtest
get_latest_signalEvaluate the most recent bar only (no P&L)
compare_backtestsRun several strategies on the same data, side by side
compute_statsCompute the metric set from an externally produced returns series
search_tickers / list_tickersAsset discovery for server-side data fetch
get_data_rangeAvailable history and bar-count estimate for a symbol
get_ticker_infoSymbol identity and data coverage in a single call
get_quoteLatest available price for a symbol (paid plan)
get_price_historyOHLCV price history over a date range (paid plan; long histories downsampled to fit)
list_macro_series / get_macro_seriesMacroeconomic data: list the series catalog, then fetch one series' observations

The cheap static catalogs are also published as MCP resources (backtest360://catalog/{name}, backtest360://schema/strategy) for clients that support resource attachment.

Prompts

Two workflow prompts scaffold the common multi-tool flows for a connected AI: each names which tools to call, in what order, and what to look at in the results. They carry no interpretation and compute nothing — the connected AI does the reasoning.

PromptArgumentsWhat it scaffolds
robustness_reviewsymbol, strategy (optional)Review a backtested strategy for robustness: validate → run → compare against buy-and-hold → weigh the evidence base (sample size, significance/robustness statistics, warnings) → caveated summary
build_and_validateideaTurn a plain-language idea into a validated strategy: survey the catalogs → fetch the schema → construct → validate-and-fix loop → dry-run

Response shaping

A full backtest result is megabytes; an agent's context is not. run_backtest and compare_backtests take response_detail:

  • summary (default) — headline metrics, warnings, counts, equity endpoints
  • stats — every metric the plan allows
  • full — plus series (downsampled, endpoints preserved) and trades (paginated)

run_backtest also takes max_series_points (default 500, must be >= 2) to override the series downsampling cap — set it higher for full-resolution series on a long run, or leave it unset for today's default.

include=["trades", "equity_curve", "monthly_returns", "yearly_returns", "signal_diagnostics"] adds specific blocks at any detail level. signal_diagnostics reports which per-bar entry/exit conditions fired, as a capped list of fire dates per condition (not the raw per-bar boolean arrays, which downsampling would corrupt) — or {"available": false, ...} when the run has no condition tree to evaluate (e.g. precomputed signals). Results exceeding the output cap are reduced further and explicitly marked truncated_by_mcp — never silently cut. Shaping only ever selects and thins what the engine returned; no value is computed or altered.

Error semantics

Designed for agents:

  • Fixable by changing the request → returned as a normal result: failed validations arrive as {"valid": false, "errors": [...]} with machine codes and document locations; engine rejections arrive as {"accepted": false, "error": ...} with a hint.
  • Not fixable that way → a tool error with explicit guidance: rate limits carry the Retry-After value; engine-busy says retry with backoff; a compute timeout says do not retry and reduce scope instead; permission problems name the missing capability. Engine request ids are included for support.

Running the tests (self-host)

pip install -e ".[dev]"
pytest   # unit suite vs a mock engine — no network

Questions / feedback

Questions or feedback? hello@backtest360.com — we read everything. backtest360-mcp is in active development, so help shape it.

Bug reports and feature requests: open an issue on GitHub.

License

MIT — see LICENSE.

Tools it offers (20)

What this server listed when Ahel dialed its public endpoint in Oct 2026, with no key and no account of yours. The names are the server’s own.

  • get_me
  • engine_info
  • get_catalog
  • list_indicators
  • list_templates
  • get_strategy_schema
  • validate_strategy
  • run_backtest
  • get_latest_signal
  • compare_backtests
  • export_backtest
  • compute_stats
  • search_tickers
  • list_tickers
  • get_data_range
  • get_ticker_info
  • get_quote
  • get_price_history
  • list_macro_series
  • get_macro_series

Signals

Last commit
Jul 2026
Advanced
Delivery
backtest360 MCP server → your Ahel connector (mcp.ahel.ai) → your AI.
Item type
mcp-server
Key
com-backtest360-backtest360
Source
github.com/backtest360/backtest360-mcp
Hosted endpoint
https://mcp.backtest360.com/mcp