An append-only ledger
Every evaluated configuration is recorded by the server and counted. Database triggers refuse deletes and updates, so a trial cannot be quietly uncounted after it disappoints.
A moving-average strategy scored 0.95 on Bitcoin. The same spec, run across ten coins, scored −1.38. Only the first number tends to get published.
quant-research is an MCP server that keeps your trial count itself. You cannot pass it in, so a deflated Sharpe cannot be quietly computed against a smaller number than the one you actually ran.
39 tools · streamable HTTP · statistics AGPL-3.0
claude mcp add --transport http quant-research \
https://quant-mcp.avasis.ai/mcp \
--header "Authorization: Bearer $QUANT_KEY"Then ask it to call server_status.
{
"mcpServers": {
"quant-research": {
"type": "http",
"url": "https://quant-mcp.avasis.ai/mcp",
"headers": { "Authorization": "Bearer YOUR_KEY" }
}
}
}Add to claude_desktop_config.json and restart.
{
"mcpServers": {
"quant-research": {
"url": "https://quant-mcp.avasis.ai/mcp",
"headers": { "Authorization": "Bearer YOUR_KEY" }
}
}
}Save as .cursor/mcp.json in your project.
curl -sS https://quant-mcp.avasis.ai/mcp \
-H "Authorization: Bearer $QUANT_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Streamable HTTP. Stateless, so a redeploy will not drop you.
This is the server's own research, not a demo. A moving-average family that looked publishable on Bitcoin and did not survive contact with nine more coins.
Every correction for multiple testing depends on N — how many strategies you actually tried. Report it yourself and the correction is decorative.
Every evaluated configuration is recorded by the server and counted. Database triggers refuse deletes and updates, so a trial cannot be quietly uncounted after it disappoints.
Held-out data is unreadable until a strategy is frozen, and readable exactly once. The grant is unique on (owner, strategy) and checked against the ledger, not merely held in memory.
A sibling fork was fitted on the same data over the same hypothesis space, so its trials count toward yours. Starting a new family does not reset the bar.
Every test below is in quant-integrity, AGPL-3.0, on PyPI. Read it,
audit it, run it without us. The hosted server adds the one thing a library
cannot: a trial count you do not control.
Bailey and López de Prado's correction, applied against the ledger's trial count rather than one you supply.
How often the in-sample winner lands below the out-of-sample median. Above 0.5 your selection is anti-predictive.
Combinatorial splits with purging on both edges and an embargo, so a label's horizon cannot leak across the boundary.
How much history N trials actually require, in years. Frequently the tool that ends a line of research early.
22 liquid Coinbase pairs measure 3 independent tests by participation ratio, 7 by entropy. Not 22.
Intervals, White's reality check and Hansen's SPA. On a marginal strategy the interval straddles zero — that is the tool working.
Costs are priced against the venue's live fee tier, not a guess: at the Coinbase entry tier — 60 bps taker per side, non-promotional — twenty trades a day is an 8,760% annual drag. Most ideas die there, before any statistic is needed.
You should not have to trust a vendor's arithmetic about whether your strategy works. Every test is readable, installable and runnable without this server.
A trial is the scarce thing here: every one permanently raises the bar your own results must clear. Metering it puts the price on the same side as the discipline. Compute is not the constraint being sold — overfitting is.
Enough to take one honest idea through the whole gauntlet.
Serious single-researcher use.
Multiple researchers, shared data, audit export.
No. There is no n_trials parameter on any statistics tool. The server reads its own ledger, and the trials table is append-only — database triggers refuse DELETE and UPDATE. That constraint is the product.
No. family_fork inherits the parent's trial history, because a sibling fork was fitted on the same data over the same hypothesis space. Forking is legitimate and sometimes correct — it just requires a written justification and it is recorded.
Because one specification is one hypothesis. The assets are the sample, not the experiment. Testing the same idea on 22 assets separately costs you 22 trials and tells you less — you would then have to correct for having picked the best of 22.
Recompute it. Every figure the server publishes about its own research is derivable from a recorded run's stored metrics, and the statistics library is open source under AGPL-3.0. An earlier version of the server's own instructions quoted a pooled -1.86 over 22 assets that matched no recorded run; the ledger is what caught it.
No. The server emits no buy, sell or hold signals, no target prices and no position sizes, and it makes no claim about future returns. It tells you whether a backtest means anything.
Coinbase spot, via Advanced Trade so that prices and fees describe the same venue. 22 liquid USD pairs with full history are pre-registered as a universe; you can ingest others. Fees read the non-promotional tier.
That is the intended shape. The agent page carries a system prompt that maps an agent to the tools and to these docs, and every page here is available as raw Markdown plus a /llms.txt index.
Connect it to Claude, Cursor or any MCP client and put one strategy through the gauntlet. It takes an afternoon, and you keep the answer either way.
It emits no buy, sell or hold signals, no target prices and no position sizes, and makes no claim about returns. It tells you whether a backtest means anything. That is the whole product.