Kalshi MCP Server
A simple MCP server to interact with prediction market Kalshi
kalshi-mcp-server
An mcp server that allows AI to operate on the prediction market, Kalshi
Implemented Tools
get_tags_for_series_categories- Calls Kalshi public endpoint:
GET /search/tags_by_categories - No API key required
- Calls Kalshi public endpoint:
get_balance- Calls Kalshi private endpoint:
GET /portfolio/balance - Requires API key authentication (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Calls Kalshi private endpoint:
get_subaccount_balances- Calls Kalshi private endpoint:
GET /portfolio/subaccounts/balances - Requires API key authentication (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Calls Kalshi private endpoint:
create_subaccount- Calls Kalshi private endpoint:
POST /portfolio/subaccounts - No arguments
- Creates a new subaccount (maximum 32 per user)
- Returns:
subaccount_number(int, 1-32) - Requires API key authentication (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Calls Kalshi private endpoint:
get_orders- Calls Kalshi private endpoint:
GET /portfolio/orders - Optional arguments:
ticker(string; market ticker)event_ticker(string; comma-separated event tickers, maximum 10)status(string: resting|canceled|executed)min_ts/max_ts(int; unix seconds)limit(int, 1-200)cursor(string)subaccount(int, 0-32)
- Returns portfolio orders (and optional pagination cursor)
- Requires API key authentication (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Calls Kalshi private endpoint:
get_order- Calls Kalshi private endpoint:
GET /portfolio/orders/{order_id} - Required arguments:
order_id(string; the order identifier)
- Returns a single order object with all order fields
- Requires API key authentication (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Calls Kalshi private endpoint:
create_order- Calls Kalshi private endpoint:
POST /portfolio/orders - Required arguments:
ticker(string; market ticker)side(string: yes|no)action(string: buy|sell)
- Optional arguments:
client_order_id(string; caller-specified order ID)count(int, >=1; contract quantity)count_fp(string; fixed-point contract count)yes_price(int, 1-99; price in cents)no_price(int, 1-99; price in cents)yes_price_dollars(string; yes price in dollars)no_price_dollars(string; no price in dollars)expiration_ts(int; unix timestamp for order expiry)time_in_force(string: fill_or_kill|good_till_canceled|immediate_or_cancel)buy_max_cost(int; maximum cost in cents)sell_position_floor(int; deprecated, only0allowed if set)post_only(boolean)reduce_only(boolean)self_trade_prevention_type(string: taker_at_cross|maker)order_group_id(string)cancel_order_on_pause(boolean)subaccount(int, 0-32)
- Returns created order details
- Requires API key authentication (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Calls Kalshi private endpoint:
cancel_order- Calls Kalshi private endpoint:
DELETE /portfolio/orders/{order_id} - Required arguments:
order_id(string; the order identifier)
- Optional arguments:
subaccount(int, 0-32)
- Returns the cancelled order object and the number of contracts reduced (
reduced_by,reduced_by_fp) - Requires API key authentication (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Calls Kalshi private endpoint:
get_positions- Calls Kalshi private endpoint:
GET /portfolio/positions - Optional arguments:
cursor(string)limit(int, 1-1000; defaults to 100)count_filter(string; comma-separated frompositionand/ortotal_traded)ticker(string; market ticker)event_ticker(string; comma-separated event tickers, maximum 10)subaccount(int, 0-32)
- Returns portfolio positions with
market_positionsandevent_positionsarrays, plus pagination cursor - Requires API key authentication (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Calls Kalshi private endpoint:
get_categories- Calls Kalshi public endpoint:
GET /search/tags_by_categories - Returns only the category names
- No API key required
- Calls Kalshi public endpoint:
get_tags_for_series_category- Calls Kalshi public endpoint:
GET /search/tags_by_categories - Requires one argument:
category(exact category name) - Returns tags for the selected category
- No API key required
- Calls Kalshi public endpoint:
get_series_list- Calls Kalshi public endpoint:
GET /series - Optional arguments:
category(string)tags(string)cursor(string)limit(int, 1-1000)include_product_metadata(boolean)include_volume(boolean)
- Returns typed series objects from Kalshi response
- Logs warning/error details when response fields have unexpected types/shapes
- No API key required
- Calls Kalshi public endpoint:
get_series_tickers_for_category- Pages Kalshi public endpoint:
GET /series - Required arguments:
category(string)
- Optional arguments:
tags(string)limit(int, 1-1000; defaults to 1000)max_pages(int, 1-10000; defaults to 1000)
- Returns only
tickervalues across all pages - No API key required
- Pages Kalshi public endpoint:
get_markets- Calls Kalshi public endpoint:
GET /markets - Optional arguments:
cursor(string)limit(int, 1-1000)status(string; Kalshi docs list values like unopened|open|paused|closed|settled)tickers(string; comma-separated market tickers)event_ticker(string; comma-separated event tickers)series_ticker(string)mve_filter(string: only|exclude)min_created_ts/max_created_ts(int; unix seconds)min_updated_ts(int; unix seconds)min_close_ts/max_close_ts(int; unix seconds)min_settled_ts/max_settled_ts(int; unix seconds)
- Returns typed markets from Kalshi response
- No API key required
- Calls Kalshi public endpoint:
get_open_markets_for_series- Pages Kalshi public endpoint:
GET /markets - Required arguments:
series_ticker(string)
- Optional arguments:
limit(int, 1-1000; defaults to 1000)max_pages(int, 1-10000; defaults to 1000)
- Forces
status=openand returns all markets across all pages - No API key required
- Pages Kalshi public endpoint:
get_open_market_titles_for_series- Pages Kalshi public endpoint:
GET /markets - Required arguments:
series_ticker(string)
- Optional arguments:
limit(int, 1-1000; defaults to 1000)max_pages(int, 1-10000; defaults to 1000)
- Forces
status=openand returns onlyticker,title,subtitle,yes_sub_title,no_sub_titlefor each market across all pages - No API key required
- Pages Kalshi public endpoint:
Configuration
KALSHI_API_BASE_URL- Default:
https://api.elections.kalshi.com/trade-api/v2
- Default:
KALSHI_TIMEOUT_SECONDS- Default:
10
- Default:
KALSHI_API_KEY_ID- Required for authenticated/private endpoints (for example
get_balance)
- Required for authenticated/private endpoints (for example
KALSHI_API_KEY_PATH- Required for authenticated/private endpoints
- Path to your Kalshi API private key PEM file
.envload_settings()reads a local.envfile from the repo root and loads variables when they are not already set in the environment
Run as MCP stdio server
- Command (installed/editable):
python3 -m pip install -e .python3 -m kalshi_mcp.server
- Command (no install):
PYTHONPATH=src python3 -m kalshi_mcp.server
- Transport:
- JSON-RPC 2.0 over newline-delimited JSON on stdin/stdout
Development
- Run unit tests (unittest):
python3 -m unittest discover -s tests -p 'test_*.py'
- Run unit tests (pytest):
- Install dev deps:
python3 -m pip install -r requirements-dev.txt - Then:
python3 -m pytest -q
- Install dev deps:
İlgili Sunucular
LeadEnrich MCP
Waterfall lead enrichment for AI agents — cascades Apollo, Clearbit, and Hunter for maximum data coverage.
SOC 2 Compliance AI MCP
SOC 2 Type II compliance automation — trust service criteria mapping, evidence collection, audit readiness by MEOK AI Labs
Tripletex MCP Server
MCP server for Tripletex — Norwegian ERP and accounting platform. Invoices, customers, employees, projects, and ledger entries.
MoneyChoice
Quantum-Powered Economic Forecasting
Relay-gateway
Relay is a desktop application for managing Model Context Protocol (MCP) servers. It provides a user-friendly interface to configure, enable/disable, and export MCP servers for use with Claude Desktop and other AI applications.
Tapo MCP
MCP server for discovering and controlling TP-Link Tapo smart home devices via AI Agents
ImmoStage Virtual Staging
AI virtual staging for real estate — stage rooms, beautify floor plans, classify images, generate property descriptions
Vibe Math MCP
A high-performance Model Context Protocol (MCP) server for math-ing whilst vibing with LLMs. Built with Polars, Pandas, NumPy, SciPy, and SymPy for optimal calculation speed and comprehensive mathematical capabilities from basic arithmetic to advanced calculus and linear algebra.
Word Orb
The language layer for AI agents. One call returns IPA, definitions, etymology, translations in 47 languages, and ethics guidance — in 3ms.
Fundamental Labs/Minecraft Client
Control Minecraft bots with AI integration. Requires a Java Edition Minecraft server.