Kalshi MCP Server
Un servidor MCP simple para interactuar con el mercado de predicciones Kalshi
GitHubPrueba este MCPPatrocinado
Documentación
kalshi-mcp-server
Un servidor MCP que permite a la IA operar en el mercado de predicción, Kalshi
Herramientas implementadas
get_tags_for_series_categories- Llama al endpoint público de Kalshi:
GET /search/tags_by_categories - No se requiere clave API
- Llama al endpoint público de Kalshi:
get_balance- Llama al endpoint privado de Kalshi:
GET /portfolio/balance - Requiere autenticación con clave API (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Llama al endpoint privado de Kalshi:
get_subaccount_balances- Llama al endpoint privado de Kalshi:
GET /portfolio/subaccounts/balances - Requiere autenticación con clave API (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Llama al endpoint privado de Kalshi:
create_subaccount- Llama al endpoint privado de Kalshi:
POST /portfolio/subaccounts - Sin argumentos
- Crea una nueva subcuenta (máximo 32 por usuario)
- Devuelve:
subaccount_number(int, 1-32) - Requiere autenticación con clave API (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Llama al endpoint privado de Kalshi:
get_orders- Llama al endpoint privado de Kalshi:
GET /portfolio/orders - Argumentos opcionales:
ticker(cadena; ticker de mercado)event_ticker(cadena; tickers de eventos separados por comas, máximo 10)status(cadena: resting|canceled|executed)min_ts/max_ts(int; segundos Unix)limit(int, 1-200)cursor(cadena)subaccount(int, 0-32)
- Devuelve órdenes de cartera (y cursor de paginación opcional)
- Requiere autenticación con clave API (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Llama al endpoint privado de Kalshi:
get_order- Llama al endpoint privado de Kalshi:
GET /portfolio/orders/{order_id} - Argumentos requeridos:
order_id(cadena; el identificador de la orden)
- Devuelve un objeto de orden único con todos los campos de la orden
- Requiere autenticación con clave API (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Llama al endpoint privado de Kalshi:
create_order- Llama al endpoint privado de Kalshi:
POST /portfolio/orders - Argumentos requeridos:
ticker(cadena; ticker de mercado)side(cadena: yes|no)action(cadena: buy|sell)
- Argumentos opcionales:
client_order_id(cadena; ID de orden especificado por el llamador)count(int, >=1; cantidad de contratos)count_fp(cadena; recuento de contratos en punto fijo)yes_price(int, 1-99; precio en centavos)no_price(int, 1-99; precio en centavos)yes_price_dollars(cadena; precio de "yes" en dólares)no_price_dollars(cadena; precio de "no" en dólares)expiration_ts(int; marca de tiempo Unix para la expiración de la orden)time_in_force(cadena: fill_or_kill|good_till_canceled|immediate_or_cancel)buy_max_cost(int; costo máximo en centavos)sell_position_floor(int; obsoleto, solo se permite0si se establece)post_only(booleano)reduce_only(booleano)self_trade_prevention_type(cadena: taker_at_cross|maker)order_group_id(cadena)cancel_order_on_pause(booleano)subaccount(int, 0-32)
- Devuelve los detalles de la orden creada
- Requiere autenticación con clave API (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Llama al endpoint privado de Kalshi:
cancel_order- Llama al endpoint privado de Kalshi:
DELETE /portfolio/orders/{order_id} - Argumentos requeridos:
order_id(cadena; el identificador de la orden)
- Argumentos opcionales:
subaccount(int, 0-32)
- Devuelve el objeto de la orden cancelada y el número de contratos reducidos (
reduced_by,reduced_by_fp) - Requiere autenticación con clave API (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Llama al endpoint privado de Kalshi:
get_positions- Llama al endpoint privado de Kalshi:
GET /portfolio/positions - Argumentos opcionales:
cursor(cadena)limit(int, 1-1000; por defecto 100)count_filter(cadena; separados por comas depositiony/ototal_traded)ticker(cadena; ticker de mercado)event_ticker(cadena; tickers de eventos separados por comas, máximo 10)subaccount(int, 0-32)
- Devuelve posiciones de cartera con los arreglos
market_positionsyevent_positions, más el cursor de paginación - Requiere autenticación con clave API (
KALSHI_API_KEY_ID+KALSHI_API_KEY_PATH)
- Llama al endpoint privado de Kalshi:
get_categories- Llama al endpoint público de Kalshi:
GET /search/tags_by_categories - Devuelve solo los nombres de las categorías
- No se requiere clave API
- Llama al endpoint público de Kalshi:
get_tags_for_series_category- Llama al endpoint público de Kalshi:
GET /search/tags_by_categories - Requiere un argumento:
category(nombre exacto de la categoría) - Devuelve etiquetas para la categoría seleccionada
- No se requiere clave API
- Llama al endpoint público de Kalshi:
get_series_list- Llama al endpoint público de Kalshi:
GET /series - Argumentos opcionales:
category(cadena)tags(cadena)cursor(cadena)limit(int, 1-1000)include_product_metadata(booleano)include_volume(booleano)
- Devuelve objetos de series tipados de la respuesta de Kalshi
- Registra detalles de advertencia/error cuando los campos de la respuesta tienen tipos/formas inesperados
- No se requiere clave API
- Llama al endpoint público de Kalshi:
get_series_tickers_for_category- Pagina el endpoint público de Kalshi:
GET /series - Argumentos requeridos:
category(cadena)
- Argumentos opcionales:
tags(cadena)limit(int, 1-1000; por defecto 1000)max_pages(int, 1-10000; por defecto 1000)
- Devuelve solo los valores de
tickeren todas las páginas - No se requiere clave API
- Pagina el endpoint público de Kalshi:
get_markets- Llama al endpoint público de Kalshi:
GET /markets - Argumentos opcionales:
cursor(cadena)limit(int, 1-1000)status(cadena; los documentos de Kalshi enumeran valores como unopened|open|paused|closed|settled)tickers(cadena; tickers de mercado separados por comas)event_ticker(cadena; tickers de eventos separados por comas)series_ticker(cadena)mve_filter(cadena: only|exclude)min_created_ts/max_created_ts(int; segundos Unix)min_updated_ts(int; segundos Unix)min_close_ts/max_close_ts(int; segundos Unix)min_settled_ts/max_settled_ts(int; segundos Unix)
- Devuelve mercados tipados de la respuesta de Kalshi
- No se requiere clave API
- Llama al endpoint público de Kalshi:
get_open_markets_for_series- Pagina el endpoint público de Kalshi:
GET /markets - Argumentos requeridos:
series_ticker(cadena)
- Argumentos opcionales:
limit(int, 1-1000; por defecto 1000)max_pages(int, 1-10000; por defecto 1000)
- Fuerza
status=openy devuelve todos los mercados en todas las páginas - No se requiere clave API
- Pagina el endpoint público de Kalshi:
get_open_market_titles_for_series- Pagina el endpoint público de Kalshi:
GET /markets - Argumentos requeridos:
series_ticker(cadena)
- Argumentos opcionales:
limit(int, 1-1000; por defecto 1000)max_pages(int, 1-10000; por defecto 1000)
- Fuerza
status=openy devuelve soloticker,title,subtitle,yes_sub_title,no_sub_titlepara cada mercado en todas las páginas - No se requiere clave API
- Pagina el endpoint público de Kalshi:
Configuración
KALSHI_API_BASE_URL- Por defecto:
https://api.elections.kalshi.com/trade-api/v2
- Por defecto:
KALSHI_TIMEOUT_SECONDS- Por defecto:
10
- Por defecto:
KALSHI_API_KEY_ID- Requerido para endpoints autenticados/privados (por ejemplo,
get_balance)
- Requerido para endpoints autenticados/privados (por ejemplo,
KALSHI_API_KEY_PATH- Requerido para endpoints autenticados/privados
- Ruta al archivo PEM de clave privada de tu API de Kalshi
.envload_settings()lee un archivo local.envdesde la raíz del repositorio y carga variables cuando no están ya establecidas en el entorno
Ejecutar como servidor MCP stdio
- Comando (instalado/editable):
python3 -m pip install -e .python3 -m kalshi_mcp.server
- Comando (sin instalación):
PYTHONPATH=src python3 -m kalshi_mcp.server
- Transporte:
- JSON-RPC 2.0 sobre JSON delimitado por nuevas líneas en stdin/stdout
Desarrollo
- Ejecutar pruebas unitarias (unittest):
python3 -m unittest discover -s tests -p 'test_*.py'
- Ejecutar pruebas unitarias (pytest):
- Instalar dependencias de desarrollo:
python3 -m pip install -r requirements-dev.txt - Luego:
python3 -m pytest -q
- Instalar dependencias de desarrollo: