pypi backtest360-mcpstreamable-httpMITupdated 1mo ago
MCP server exposing the Backtest360 engine API as tools for AI agents.
What can you do with Backtest360?
backtest360-mcp
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:
| Variable | Required | Default | Purpose |
|---|---|---|---|
BACKTEST360_API_KEY |
yes | — | Engine API key, sent as X-API-Key |
BACKTEST360_ENGINE_URL |
no | https://api.backtest360.com |
Engine base URL |
BACKTEST360_MCP_TIMEOUT |
no | 300 |
Per-request timeout (seconds) |
BACKTEST360_MCP_MAX_OUTPUT_BYTES |
no | 100000 |
Hard 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
| Tool | What it does |
|---|---|
engine_info |
Engine version, API contract, health |
get_me |
What the configured key can do: permission scopes, limits, current usage, capability flags |
get_catalog |
Reference catalogs: operators, execution modes, stop types, sizing methods, bar frequencies, metric sections |
list_indicators |
Indicator discovery; per-indicator parameter schemas |
list_templates |
Predesigned strategy templates — discover compactly, fetch one in full, ready to validate and run |
get_strategy_schema |
JSON Schema for strategy documents |
validate_strategy |
Validate a strategy without running it — returns structured, locatable errors |
run_backtest |
Run a historical backtest |
get_latest_signal |
Evaluate the most recent bar only (no P&L) |
compare_backtests |
Run several strategies on the same data, side by side |
compute_stats |
Compute the metric set from an externally produced returns series |
search_tickers / list_tickers |
Asset discovery for server-side data fetch |
get_data_range |
Available history and bar-count estimate for a symbol |
get_ticker_info |
Symbol identity and data coverage in a single call |
get_quote |
Latest available price for a symbol (paid plan) |
get_price_history |
OHLCV price history over a date range (paid plan; long histories downsampled to fit) |
list_macro_series / get_macro_series |
Macroeconomic 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.
| Prompt | Arguments | What it scaffolds |
|---|---|---|
robustness_review |
symbol, 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_validate |
idea |
Turn 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 endpointsstats— every metric the plan allowsfull— 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-Aftervalue; 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.
Install
Add Backtest360 to your client. Pick the one you use.
{
"servers": {
"backtest360-mcp": {
"type": "http",
"url": "https://mcp.backtest360.com/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
claude mcp add backtest360-mcp -- uvx backtest360-mcpcodex mcp add backtest360-mcp -- uvx backtest360-mcpamp mcp add backtest360-mcp -- uvx backtest360-mcp{
"mcpServers": {
"backtest360-mcp": {
"command": "uvx",
"args": [
"backtest360-mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"backtest360-mcp": {
"command": "uvx",
"args": [
"backtest360-mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"mcpServers": {
"backtest360-mcp": {
"command": "uvx",
"args": [
"backtest360-mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"backtest360-mcp": {
"command": "uvx",
"args": [
"backtest360-mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"backtest360-mcp": {
"command": "uvx",
"args": [
"backtest360-mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"backtest360-mcp": {
"type": "local",
"command": "uvx",
"args": [
"backtest360-mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"backtest360-mcp": {
"command": {
"path": "uvx",
"args": [
"backtest360-mcp"
]
}
}
}
}Add to your Zed `settings.json`.
uvx backtest360-mcpRun `goose configure`, choose **Add Extension → Command-line Extension**, and paste this command.
15 tools
Backtest360 exposes 15 tools to a connected agent.
- engine_info
- Engine version, API contract, health
- get_me
- What the configured key can do: permission scopes, limits, current usage, capability flags
- get_catalog
- Reference catalogs: operators, execution modes, stop types, sizing methods, bar frequencies, metric sections
- list_indicators
- Indicator discovery; per-indicator parameter schemas
- list_templates
- Predesigned strategy templates — discover compactly, fetch one in full, ready to validate and run
- get_strategy_schema
- JSON Schema for strategy documents
- validate_strategy
- Validate a strategy without running it — returns structured, locatable errors
- run_backtest
- Run a historical backtest
- get_latest_signal
- Evaluate the most recent bar only (no P&L)
- compare_backtests
- Run several strategies on the same data, side by side
- compute_stats
- Compute the metric set from an externally produced returns series
- get_data_range
- Available history and bar-count estimate for a symbol
- get_ticker_info
- Symbol identity and data coverage in a single call
- get_quote
- Latest available price for a symbol (paid plan)
- get_price_history
- OHLCV price history over a date range (paid plan; long histories downsampled to fit)
Score
90 / 100
Excellent
- Documentation25/25
- Maintenance22/25
- Trust16/20
- Capability12/15
- Install experience15/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 33 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 15 tool(s) documented
- Provides prompt templates
- Provides resources
- 18 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 0.5.0Latest | Jul 29, 2026 |
| 0.4.1 | Jul 13, 2026 |
| 0.4.0 | Jul 13, 2026 |
| 0.2.0 | Jul 4, 2026 |
| 0.1.5 | Jul 1, 2026 |
| 0.1.4 | Jun 30, 2026 |
| 0.1.3 | Jun 30, 2026 |