Cross-venue prediction markets for AI agents: Polymarket + Kalshi, costed and attributed
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
The rail AI agents use to trade prediction markets.
An MCP server that gives any agent (Claude Code, Claude Desktop, or anything MCP-compatible) prediction-market access across Polymarket and Kalshi: market search, orderbooks, price history, positions, and order routing, with on-chain builder-code attribution on Polymarket, plus two premium signal tools (in-play overshoot/fade detection, resolution dispute-risk).
Free to use, and free of fees. oddsrail ships with a project builder code
registered at 0 bps, so orders routed through it are attributed without
adding a single basis point to anyone's trade. The project's income is a share
of Polymarket's weekly builder reward pool, paid by Polymarket's own program,
not by you. Running your own builder profile instead is one environment
variable (ODDSRAIL_BUILDER_CODE), and server_info always tells you which
code is in use. No fee tiers, no paywalled tools, no account required.
Verified against each alternative directly (their repos, live endpoints, and registry entries, September 2026), not from their marketing:
| oddsrail | raw venue APIs | pmxt | Simmer | Polymarket agent-skills | |
|---|---|---|---|---|---|
| What it is | self-hosted MCP server | the venues themselves | unified API + SDK + MCP, "CCXT for prediction markets" | agent trading platform + SDK + MCP | markdown skill docs for agents |
| Venues you can trade | Polymarket, Kalshi | one each | Polymarket, Opinion, Limitless (hosted writes); a dozen more for data | Polymarket, Kalshi, plus its own $SIM sandbox markets | Polymarket only |
| Custody | non-custodial; keys never leave your machine | yours | hosted mode: "PMXT handles custody, signing infrastructure"; self-hosted mode: your keys | self-custody, local signing | yours (documentation only) |
| Attribution you control | yes: ODDSRAIL_BUILDER_CODE overrides the 0 bps default | n/a | not documented | not documented | documents builder headers for your own code |
| Cost to the trader | 0 bps, free tools | free | hosted pricing not in the README | not documented | free |
| Open source | MIT, full source | n/a | MIT, ~2.1k stars | not stated | docs; license not stated |
| Operator guardrails | notional caps, open-order cap, allowed markets; enforced pre-request, in dry-run too | none | not documented | per-trade limits, daily caps, stop-loss/take-profit, kill switch | none |
| Paper trading | dry-run fills against the live book, P&L | none | not documented | virtual $SIM sandbox, then graduate to real money | none |
| Book-walked cost, settlement audit, jurisdiction-classified failures, dated venue-quirk notes | yes, all four | no | not documented | not documented | quirks partly documented |
| Realtime | watch_book, bounded | websocket, yours to wire | not documented in the README | not documented | websocket documented |
Verified 2026-09-02 from each project's own README or docs (pmxt: github.com/pmxt-dev/pmxt; Simmer: docs.simmer.markets; agent-skills: github.com/Polymarket/agent-skills). "Not documented" means exactly that, not "absent". Re-check before quoting; these projects move.
The wedge, in one line: pmxt is the reference for trading everywhere; Simmer is the reference for an agent economy with a sandbox and a reputation layer; oddsrail is the reference for trading correctly, non-custodially, with attribution you own.
Where the others are honestly ahead: pmxt trades three venues to our two and covers a dozen more for data, with hosted convenience and a community many times ours. Simmer has a virtual-balance sandbox, stop-loss and take-profit rails we do not have, a public reasoning/reputation layer, and a strategy-skills marketplace. Polymarket's agent-skills is the venue's own documentation and covers bridging and deposits, which oddsrail does not.
ΒΉ The raw Polymarket API has the endpoints. It also models rejections as
ok:false return values, orders its books worst-first, ships a trades
endpoint that returns the market's public tape, and enforces an
undocumented $1 minimum notional. oddsrail exists because we hit every one of
those and encoded the fix.
Β² Kalshi prices are dollar strings (integer cents were removed 2026-03), its orderbook is bids-only on both sides, and its current SDK requires Python β₯3.13. All normalised here.
Python 3.11+ required.
Or from a clone, without installing:
Then ask the agent: "search markets about the World Cup final and run the overshoot signal on the favorite".
| Client | How |
|---|---|
| Claude web or desktop, nothing to install (hosted, paper trading) | Settings, Connectors, Add custom connector, URL https://mcp.oddsrail.app/mcp, then sign in with your email. See Hosted. |
| Claude Code (hosted, paper trading) | claude mcp add --transport http oddsrail https://mcp.oddsrail.app/mcp |
| Claude Code (plugin, with the four workflow skills) | claude plugin marketplace add hmesutozsoy/oddsrail then claude plugin install oddsrail@oddsrail |
| Claude Code (server only) | claude mcp add --transport stdio oddsrail -- uvx oddsrail |
| Any agent that reads skills | npx skills add hmesutozsoy/oddsrail |
| Cursor | Install oddsrail in Cursor |
| VS Code | Install oddsrail in VS Code |
| Anything else that speaks MCP over stdio | {"command": "uvx", "args": ["oddsrail"]} (or pip install oddsrail and run oddsrail) |
The plugin and the one-click links launch the server with uvx, so they
need uv on the machine. Without uv, pip install oddsrail gives you an oddsrail command to point any client at.
Everything starts in dry-run.
The four skills (skills/*/SKILL.md) are generated from the server's own
MCP prompts by scripts/gen_skills.py, and a test fails if they drift, so a
skill and the prompt it mirrors can never disagree.
mcp.oddsrail.app runs the same server as a remote MCP endpoint with
accounts, so an agent inside Claude can use it without a machine of its own.
Add the URL as a custom connector (Pro, Max, Team and Enterprise plans), sign
in with your email when Claude asks, and every call from then on carries
your account.
What the hosted server is, in one breath: Polymarket market data, the signal
tools, check_order, and paper trading with a $1,000 virtual bankroll per
account, filled against the live book. What it is not: a place where money
moves. It holds no wallet keys, executes no real order, and serves no Kalshi
tools (Kalshi's API Developer Agreement limits API use to a member's own
trading, so a shared service cannot route it). Account-scoped tools such as
open_orders and the gasless relayer tools are absent, because on a shared
server they would describe nobody's account. Twenty-four tools remain: the
public-data and paper tools plus arena_register, arena_unregister and
arena_status, which put the account's paper ledger on the public board.
Live trading stays self-hosted: pip install oddsrail with your own key, and
the same place_order posts real orders when you set ODDSRAIL_DRY_RUN=0.
The paper ledger you build up in Claude is yours to reset with
paper_reset; nothing else about the account exists. Privacy policy:
oddsrail.app/privacy. Source:
oddsrail/cloud/ and oddsrail/hosted.py; deployment notes in
deploy/cloud/.
oddsrail.app/build is a set of switches:
strategies (fade overshoots, buy near-certain resolutions, trade your own
probability, follow the move, two-sided quotes), risk rules (stop loss as a
review rule, take profit, daily loss limit, never add to losers, exposure
caps) and market hygiene (dispute risk, fill quality, watching the book).
Press Run and the switches execute on the hosted server as a
deterministic paper pass (oddsrail/cloud/runner.py): the universe is
scanned, each strategy's signal is computed with the same code the MCP
tools use, every order goes through check_order, fills come from the live
book into a paper ledger that belongs to your browser, and the pass comes
back as a list of decisions with verdicts and reasons. No account, no
install, no key, no model. One pass is one tick at the current book, not a
backtest: the ledger carries positions and resting quotes between passes,
and nothing is watched in between, so a record needs many passes. The same switches also compose into a prompt for
running the pieces inside your own Claude with the connector; the
two-sided-quotes piece carries the maintainer's own warning about markout
either way.
oddsrail.app/arena is the public board. Paper
division: hosted accounts that entered themselves with arena_register,
ranked by return on the virtual bankroll, served as JSON from
mcp.oddsrail.app/arena/paper.json. Live division: wallets whose Polymarket
fills carry the oddsrail builder code, ranked by attributed volume from the
public feed, with realized and open P&L from Polymarket's data API; register
by pull request or the form on the page (site/arena/agents.json). No
prizes yet; the rules are on the page.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/polymarket-kalshi-trading)<a href="https://allmcps.com/mcp/polymarket-kalshi-trading"><img src="https://allmcps.com/api/badge/polymarket-kalshi-trading?style=directory" alt="Polymarket Kalshi Trading on AllMCPs" /></a>