QuantWright
com.quantwright/agent-apiquantwright.comstreamable-httpv1.0.0Scanned
Backtests with costs, a held-out test that counts once, a score that counts every version tried.
6 tools: 1 do something that can't be undone, 4 change things and 1 only read.
- Reads private data · 0
- Reads text others write · 0
- Can send data out · 1
- 2 findings
Anlyon alternative
5 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
6 tools
Can't be undone 1Claude Code: ask
create_studyOpens a study, the named set of runs every backtest belongs to: call it once per question, before run_backtest.Can send data outNo findings
Why it is in this group
- The name "create_study" says "create": a word for a change.
- The input addresses people (input.hold_out.to): what it sends cannot be taken back.
What it can reach
- outboundThe input takes a destination (input.hold_out.to): what the tool writes goes there.
Description, as the server wrote it Opens a study, the named set of runs every backtest belongs to: call it once per question, before run_backtest. Can set a hold-out period, once and only here, that no run tests except run_held_out_test.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Changes things 4Claude Code: ask
compare_tradesChecks a trader's own trades against a run's rule, on the price history this server holds: for each trade, in their order, whether the rule would have taken it and, if not, why (al…1 finding
Why it is in this group
- The name "compare_trades" says "compare": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "compare_trades" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "compare_trades" says "compare": a word for reading.
Description, as the server wrote it Checks a trader's own trades against a run's rule, on the price history this server holds: for each trade, in their order, whether the rule would have taken it and, if not, why (already in a trade, no entry signal that day, no bar that day). Use it when the trader lists trades they made and asks which the rule took, instead of working it out by hand. Takes a run (run_id) and the trades, each {side, entry, exit?}; answers in words, never prices. It re-runs the run's code, so it counts as a run on the run's symbol.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
describe_dataStart here to backtest a trading idea.1 finding
Why it is in this group
- The name "describe_data" says "describe": a word for reading.
- The description's first verb is "start": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "describe_data" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "describe_data" says "describe": a word for reading.
Description, as the server wrote it Start here to backtest a trading idea. This server holds the price history (US stocks and ETFs, spot crypto, FX, spot gold and silver; daily and intraday bars) and runs backtests on it, so no price data needs to be downloaded or found on the web. Returns the markets and bar sizes served, the rules every run is held to, and how to write the strategy code; then call create_study.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
run_backtestBacktests a trading rule on this server's price history: one backtesting.py Strategy class, one symbol, one bar size, in a study.No findings
Why it is in this group
- The name "run_backtest" says "run": a word for a change.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
Description, as the server wrote it Backtests a trading rule on this server's price history: one backtesting.py Strategy class, one symbol, one bar size, in a study. Use it to test, backtest or evaluate a trading rule or strategy, instead of downloading prices or searching the web for results. Returns summary figures (return, drawdown, Sharpe, win rate, trades, a grade, whether it beat buy-and-hold) and the run's trades (when each entered and left, which exit ended it, its side, win or loss), never prices or bars; a figure may be withheld, with the reason. Waits up to 90 s, then answers status "running" with a run_id for get_result.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
run_held_out_testThe final out-of-sample check: runs a finished run's exact code once over its study's hold-out period.No findings
Why it is in this group
- The name "run_held_out_test" says "run": a word for a change.
Description, as the server wrote it The final out-of-sample check: runs a finished run's exact code once over its study's hold-out period. Call it at the end, on the run you would keep: the first held-out test per account and market is the one that counts, and a hold-out with too few trades for figures (a result needs 10) spends it all the same: each development run says how many trades the hold-out is expected to hold, in `hold_out_estimate`.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Only reads 1Show 1 read-only tool
get_resultReads a backtest result by its run_id (when run_backtest answered "running", call this until the run ends), or a study's runs by study_id (one of them with version).No findings
Why it is in this group
- The name "get_result" says "get": a word for reading.
Description, as the server wrote it Reads a backtest result by its run_id (when run_backtest answered "running", call this until the run ends), or a study's runs by study_id (one of them with version). A run comes with its trades, a page at a time (trades_page).
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or untrusted-input.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write0
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
- Warndescribe_data
The server marks "describe_data" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "describe_data" says "describe": a word for reading.
- Warncompare_trades
The server marks "compare_trades" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "compare_trades" says "compare": a word for reading.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http agent-api https://quantwright.com/api/mcp --header 'Authorization: <your-authorization>'claude mcp add --transport http agent-api https://quantwright.com/api/mcp --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__agent-api__get_result"
],
"ask": [
"mcp__agent-api__describe_data",
"mcp__agent-api__create_study",
"mcp__agent-api__run_backtest",
"mcp__agent-api__run_held_out_test",
"mcp__agent-api__compare_trades"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as agent-api. Review it before you use it.
Capability tags behind 1 rule
- mcp__agent-api__create_study outbound
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/com.quantwright/agent-api/verify?hash=a39ecef3ffeeb4cc6ffdc199b5f0886dd7d9238f23f5959852ed0438cdc0f65d" | jq -e '.changed == false'Pinned hash a39ecef3ffee, from Oct 29, 2026, 13:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/com.quantwright/agent-api/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/com.quantwright/agent-api)Source: MCP Registry. Synced Oct 29, 2026, 13:17 UTC.