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
MCP Cookie Server
Provides positive reinforcement to LLMs by awarding 'cookies' as treats.
AgentTrust
Challenge-response quality verification for AI agents and MCP servers.
Time MCP Server
Provides time-related functions such as current time queries, timezone conversions, and time difference calculations.
OpenHue MCP Server
Control Philips Hue lights using LLM interfaces via the OpenHue CLI.
Fonparam MCP
FonParam API üzerinden fonların güncel verilerini, performans istatistiklerini ve karşılaştırmalarını alabilirsiniz.
MCP Weather Server
Provides real-time weather information and forecasts using the OpenWeatherMap API.
MCP Time Server
A simple server that provides the current UTC time.
CryptoAPIs MCP Simulate
MCP server for dry-run EVM transaction simulation via Crypto APIs
ALMA_MCP
A Model Context Protocol (MCP) server that provides comprehensive access to the ALMA (Atacama Large Millimeter/submillimeter Array) archive through a clean, extensible architecture.
Upstox MCP Server
A Model Context Protocol (MCP) server that integrates with the Upstox Trading API, enabling AI agents like Claude to securely access Indian stock market data, perform technical analysis, and view account information in read-only mode.