MCP server giving AI trading agents access to prediction markets (Polymarket, Kalshi) with on-chain builder-code attribution and trading signals.
Oddsrail has 10 tools with clear action verbs and reasonable descriptions (avg 150 chars). All tools have input schemas with types and descriptions. However, output schemas are not documented, LLMs cannot predict response structure for chaining. Parameter descriptions lack constraints (ranges, enums, formats). Error handling is absent from descriptions. Tool names are clear but some descriptions are vague about when to use them vs. similar tools (e.g., search_markets vs. get_market). No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Missing idempotency guidance for write operations.
Enter this account's PAPER ledger on the public oddsrail arena board (oddsrail.app/arena) under a display name (3 to 24 characters) with a one-line strategy description. Ranked by return on the paper bankroll. Makes the ledger's equity and P&L public under that name; nothing else about the account is shown. arena_unregister removes it.
Whether this account is on the arena board, and under which name.
Remove this account from the public arena board.
Get one market's details. Accepts the market slug, the Gamma market id, or either of its CLOB token ids (the market_id that find_markets and search_markets return), so a token id from a search can be passed straight in.
Get the live orderbook (bids/asks) for a CLOB token id.
Current positions for a wallet address.
No output schemas documented. LLMs cannot predict response structure, breaking tool chaining. E.g., search_markets returns 'token ids, prices, metrics' but exact field names/types are invisible.
Parameter descriptions lack constraints. 'query' has no length limit; 'limit' has no min/max (default 10 but no bounds stated); 'hours' and 'threshold' lack ranges. LLMs will pass invalid values.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk levels are declared in metadata but not in tool definitions. Agents cannot infer safety without reading descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
PREMIUM SIGNAL — overshoot/fade detector. Analyzes a token's recent price series for fresh panic jumps and reports whether a fade setup is active plus this market's historical reversion tendency.
Reset this account's paper ledger to its starting bankroll ($1,000). Refused while the agent is on the public arena board, because a board entry that can wipe its own record is worthless.
Recent price history for a CLOB token id: hours back, at fidelity_minutes resolution.
Search Polymarket markets by text (Gamma public-search under the hood); empty query lists open markets. Returns token ids, prices, metrics, resolution info.
Error handling absent from descriptions. No guidance on retryability, user-fixable errors, or recovery steps. E.g., 'Invalid token_id' or 'Market not found' responses are not documented.
arena_unregister and arena_status have minimal descriptions (<60 chars). 'Remove this account from the public arena board' and 'Whether this account is on the arena board' lack context on when/why to call them.