An MCP server implementation for Kalshi prediction market endpoints, enabling trading, market research, and portfolio management on the Kalshi regulated prediction market exchange.
This is a well-structured MCP server for the Kalshi prediction market API with 24 tools covering market discovery, account management, and order placement. Strengths: all tools have explicit descriptions (10-300+ chars), consistent naming (verb_noun pattern with get_, list_, create_, cancel_, amend_, decrease_), complete input schemas with types and constraints, and thoughtful parameter design including enums for known options. The server correctly implements READ_ONLY and WRITE risk annotations via ToolAnnotations. Weaknesses: descriptions are somewhat API-focused rather than LLM-optimized (many are 150-200 chars but could be tighter; some lack actionable context); output schemas are not formally documented in the source (tool handlers return unstructured JSON via httpx); error handling is minimal (no recovery guidance in descriptions); some parameter descriptions are minimal (e.g., 'Pagination cursor for the next page' lacks explanation of what a cursor is or how to obtain one). Overall, this server meets the baseline for good (B-tier) definition quality with room for improvement in LLM-friendliness and error guidance.
Update an existing order's price and/or size (does not change ticker or side). Requires confirm=true to commit. Requires authentication.
Cancel a resting order by ID. Requires confirm=true to actually cancel. Requires authentication.
Place a limit order using the intuitive buy/sell + yes/no model. Prices are whole cents (1-99) for the outcome you name in `side`; the server translates to Kalshi's YES-leg book side and fixed-point dollar price. Requires `confirm=true` to actually place — otherwise a preview is returned and nothing is sent. Requires authentication.
Reduce the size of a resting order by a delta (reduce_by) or to an absolute level (reduce_to). Requires confirm=true to commit. Requires authentication.
Download and extract the text of a market's rules PDF (contract terms or certification). Specify either a ticker/series_ticker or a direct URL.
Output schemas not formally documented in source code. Tools return JSON via httpx but handlers do not declare expected response structure in annotations or descriptions. LLMs cannot predict what fields to extract or which values chain to next tools.
Error handling descriptions are absent. No guidance on how LLMs should recover from failures. Tools like 'create_order' and 'cancel_order' do not explain what errors are retryable vs user-fixable vs fatal.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 68 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Get your account balance and buying power. Requires authentication.
Confirm the active Kalshi environment (demo or production) and whether the server has valid credentials.
Get an event by ticker, including its settlement_sources and (optionally) nested markets.
Get the Kalshi exchange trading schedule.
Get the current status of the Kalshi exchange (open/closed, etc.).
List your historical trade fills (executions). Filter by ticker, order ID, or timestamp. Requires authentication.
Get full detail for one market by ticker, including prices, status, and rules_primary/rules_secondary.
Get OHLC price history for a market. Defaults to the last 24h at 60-minute candles; override with period_interval (1/60/1440), lookback_hours, or explicit start_ts/end_ts.
Get the current order book (resting YES and NO bids) for a market. Optional depth (1-100).
Deep settlement rules for a market: consolidates the market's rules_primary/rules_secondary/early_settlement flags with the parent series' settlement_sources and prohibitions.
Get recent public trades (executions) for a market.
Get full details for a specific order by ID. Requires authentication.
List your current positions in markets (holdings, P&L). Filter by ticker or event. Requires authentication.
Get a series by ticker. This is where the legal contract lives: settlement_sources, additional_prohibitions, and the rules PDFs (contract_terms_url, contract_url).
List historical market settlements and P&L from your positions. Filter by ticker or event. Requires authentication.
Browse events (each groups related markets). Filter by series_ticker/status; set with_nested_markets to include markets inline.
Browse or filter markets. Kalshi has no free-text search, so use filters like series_ticker, event_ticker, status, or a comma-separated `tickers` list. Returns markets with prices (in dollars), status, and rules_primary.
List your orders (resting, canceled, or executed). Filter by ticker, event, status, or time. Requires authentication.
List series (recurring market templates) filtered by category/tags.
Pagination cursor parameters lack explanation. 'cursor' is documented as 'Pagination cursor for the next page' but LLMs do not understand what a cursor is or how to obtain its initial value (if it's opaque, say so; if it's derived, explain how).
Account-gated tools ('get_balance', 'get_positions', 'create_order', etc.) claim to require authentication but do not document what happens if credentials are missing or invalid. No recovery guidance.
Some parameter descriptions are vague. E.g., 'count_filter' in get_positions is 'Restrict to positions with non-zero fields (e.g. \'position\')', what are the valid enum values? What does 'non-zero' mean for each field?