oddsrail
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KALSHI_DEMO | No | Set to 1 to hit the Kalshi demo environment. | |
| KALSHI_KEY_ID | No | Kalshi API key ID. | |
| ODDSRAIL_DRY_RUN | No | 1 = orders are simulated and returned, never posted. Set 0 to trade. | 1 |
| KALSHI_PRIVATE_KEY | No | The Kalshi private key itself (alternative to KALSHI_PRIVATE_KEY_PATH). | |
| ODDSRAIL_BUILDER_CODE | No | Your bytes32 builder code. Overrides the bundled project default so attribution (and any reward-pool share) accrues to you instead. | |
| POLYMARKET_PRIVATE_KEY | No | Operator wallet key; required only for real trading. Never leaves this machine. | |
| KALSHI_PRIVATE_KEY_PATH | No | Path to PKCS#8 PEM private key for Kalshi. | |
| POLYMARKET_WALLET_ADDRESS | No | Proxy/deposit wallet address, if the account uses one. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_marketsA | Search Polymarket markets by text (Gamma public-search under the hood); empty query lists open markets. Returns token ids, prices, metrics, resolution info. |
| get_marketB | Get one market's details by slug (or id). |
| get_orderbookA | Get the live orderbook (bids/asks) for a CLOB token id. |
| price_historyB | Recent price history for a CLOB token id: hours back, at fidelity_minutes resolution. |
| get_positionsC | Current positions for a wallet address. |
| overshoot_signalC | 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. |
| dispute_riskC | PREMIUM SIGNAL — dispute-risk triage. Scores 0-100 how likely a market's resolution gets contested (UMA dispute risk) with transparent reasons. |
| place_orderA | Place a limit order. DRY-RUN by default: returns the order it would post. Real trading needs ODDSRAIL_DRY_RUN=0 and POLYMARKET_PRIVATE_KEY. The operator's builder code is signed into the order. Price = implied probability. |
| cancel_orderA | Cancel an open order by id (respects dry-run). |
| open_ordersB | List the operator wallet's open orders. |
| builder_statsC | Builder attribution stats: the public builder leaderboard, and (if ODDSRAIL_BUILDER_CODE is set) matched trades attributed to this operator's code. |
| kalshi_search_marketsB | Search Kalshi markets. Kalshi has no text-search endpoint, so this pages open markets and filters on title/ticker; auto-generated MVE combo shards are excluded. Prices are dollar strings, not cents. |
| kalshi_get_marketB | Get one Kalshi market by ticker. |
| kalshi_get_orderbookA | Kalshi orderbook for a ticker, normalised to a YES-book bid/ask view (Kalshi publishes bid ladders only; asks are derived as 1 - NO bid). Raw ladders included. |
| kalshi_get_tradesC | Recent public trades for a Kalshi ticker. |
| kalshi_balanceA | Kalshi account balance (needs the operator's API key). |
| kalshi_positionsD | Kalshi positions (needs the operator's API key). |
| kalshi_open_ordersC | Kalshi resting orders (needs the operator's API key). |
| kalshi_place_orderA | Place a Kalshi limit order. State it naturally: outcome yes|no, action buy|sell, price = probability of THAT outcome in (0,1). Translated to Kalshi's YES-book bid/ask internally. DRY-RUN by default. |
| kalshi_cancel_orderB | Cancel a Kalshi order by id (respects dry-run). |
| server_infoA | Server status: dry-run state, attribution config, and which capabilities are enabled. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Tools are cleanly partitioned by exchange (Polymarket vs. Kalshi with the kalshi_ prefix), and within each exchange each tool targets a distinct resource or action. No two tools appear to serve the same purpose; even the premium signals (overshoot_signal, dispute_risk) are clearly unique.
Kalshi tools follow a consistent 'kalshi_verb_noun' pattern, but Polymarket tools mix conventions: get_* verbs (get_market, get_orderbook, get_positions) coexist with noun phrases (price_history, overshoot_signal, dispute_risk, builder_stats, server_info) and imperative verbs (place_order, cancel_order, open_orders). The lack of a uniform verb-first pattern or exchange prefix for Polymarket creates mild inconsistency.
21 tools is slightly above the typical 3-15 range, but the server covers two distinct prediction-market platforms, each with its own market data, order management, and account tools. The extra tools are justifiable additions for Kalshi, making the count reasonable rather than bloated.
Both exchanges have solid coverage: market retrieval, search, orderbooks, order placement/cancellation, and positions. Minor gaps exist—Kalshi lacks a dedicated price-history tool (only recent trades), and Polymarket has no explicit balance endpoint—but these are not critical and can be worked around with existing tools.