honest-risk-mcp
v1.0.0
Published
MCP server for the Honest Risk API — position sizing and pre-trade gates that refuse, and say why
Maintainers
Readme
honest-risk-mcp
MCP server for the Honest Risk API — position sizing and pre-trade gates that refuse, and say why.
Hand any position-size calculator a trade with no stop and it will still hand you a size. That number is the most dangerous output in the category, because it looks like an answer — a position without a defined stop has unbounded loss, so no size puts it inside a risk limit. This refuses, and names the reason.
A blocked result renders no numbers at all. Printing a size next to a refusal invites exactly the misread this exists to prevent, and there is a test that fails if it ever does.
Install
{
"mcpServers": {
"honest-risk": {
"command": "npx",
"args": ["-y", "honest-risk-mcp"],
"env": {
"RAPIDAPI_KEY": "your-key"
}
}
}
}Works with any MCP client — Claude Desktop, Claude Code, Cursor, Cline, Windsurf.
Tools
| Tool | Question it answers |
|---|---|
| risk_limits | What are the rules, and what does each govern |
| position_size | How large may this position be, and which limit is binding |
| pre_trade_check | May it be opened, given what is already open |
| circuit_breaker | Should trading halt on the last 24h |
| go_live_check | Has this strategy earned the right to real money |
A note for agents using this
A BLOCKED result is a valid answer, not an error to route around. Retrying with looser
limits until the check passes defeats the entire purpose — and if you do loosen them at a
user's request, say so when reporting the result. The server's own instructions say this
too, so a well-behaved client should already be doing it.
The gate that catches the most strategies
go_live_check returns every failure at once. Sample size is the one most often skipped — a
Sharpe of 2.8 over 6 closed trades clears every other bar and means nothing:
❌ NOT CLEARED for real money.
- Only 6 closed trades in the sample. Below 30, risk-adjusted metrics are
noise rather than evidence.Limits are yours, but not silently
Every limit is overridable per request. Loosen one past the point where it stops
constraining anything and the response carries a LIMIT_RELAXED note. Bounds are enforced
in the tool schema, so an impossible rule set fails before a network call — and a typo'd
limit name is rejected rather than silently falling back to a default.
Configuration
| Variable | Default | Purpose |
|---|---|---|
| RAPIDAPI_KEY | — | Marketplace subscription key |
| RAPIDAPI_HOST | API host | Override when calling through a different gateway |
| HONEST_RISK_API_URL | production Worker | Point at a different deployment |
| HONEST_RISK_TIMEOUT_MS | 30000 | Request timeout |
Not investment advice
These are arithmetic checks against limits you supply. Passing them means a trade is inside your own rules, not that it is a good trade.
License
MIT
