Schwab MCP
El servidor Schwab Model Context Protocol (MCP) conecta tu cuenta de Schwab con aplicaciones basadas en LLM (como Claude Desktop u otros clientes MCP), lo que les permite obtener datos de mercado, consultar el estado de la cuenta y (opcionalmente) realizar órdenes bajo tu supervisión.
Documentación
Servidor de Protocolo de Contexto de Modelo de Schwab
El Servidor de Protocolo de Contexto de Modelo (MCP) de Schwab conecta tu cuenta de Schwab a aplicaciones basadas en LLM (como Claude Desktop u otros clientes MCP), permitiéndoles recuperar datos de mercado, verificar el estado de la cuenta y (opcionalmente) realizar órdenes bajo tu supervisión.
Características
- Datos de Mercado: Cotizaciones en tiempo real, historial de precios, cadenas de opciones y movimientos del mercado.
- Gestión de Cuenta: Ver saldos, posiciones y transacciones.
- Trading: soporte integral para acciones y opciones, incluyendo estrategias complejas (OCO, Bracket).
- Seguridad Primero: Las acciones críticas (como el trading) están protegidas por un flujo de aprobación de Discord por defecto.
- Integración con LLM: Diseñado específicamente para flujos de trabajo de IA agéntica.
Inicio Rápido
Requisitos Previos
- Python 3.10 o superior
- uv (recomendado) o
pip - Una Clave y Secreto de App de Desarrollador de Schwab (del Portal de Desarrolladores de Schwab)
Instalación
Para la mayoría de los usuarios, instalar vía uv tool o pip es lo más fácil:
# Using uv (recommended for isolation)
uv tool install git+https://github.com/jkoelker/schwab-mcp.git
# Using pip
pip install git+https://github.com/jkoelker/schwab-mcp.git
Autenticación
Antes de ejecutar el servidor, debes autenticarte con Schwab para generar un archivo de token.
# If installed via uv tool
schwab-mcp auth --client-id YOUR_KEY --client-secret YOUR_SECRET --callback-url https://127.0.0.1:8182
# If running from source
uv run schwab-mcp auth --client-id YOUR_KEY --client-secret YOUR_SECRET --callback-url https://127.0.0.1:8182
Esto abrirá una ventana del navegador para que inicies sesión en Schwab. Una vez completado, se guardará un token en ~/.local/share/schwab-mcp/token.yaml.
Ejecutar el Servidor
Inicia el servidor MCP para exponer las herramientas a tu cliente MCP.
# Basic Read-Only Mode (Safest)
schwab-mcp server --client-id YOUR_KEY --client-secret YOUR_SECRET
# Streamable HTTP (for reverse proxies / remote MCP connectors)
schwab-mcp server --client-id YOUR_KEY --client-secret YOUR_SECRET \
--http --host 127.0.0.1 --port 8000
# With Trading Enabled (Requires Discord Approval)
schwab-mcp server \
--client-id YOUR_KEY \
--client-secret YOUR_SECRET \
--discord-token BOT_TOKEN \
--discord-channel-id CHANNEL_ID \
--discord-approver YOUR_USER_ID
El transporte predeterminado es stdio (Claude Desktop y la mayoría de los clientes MCP locales).
Usa --http para FastMCP streamable-http cuando se exponga el servidor detrás de una
pasarela o conector remoto (el endpoint MCP es /mcp en el host:puerto vinculado).
Nota: Para capacidades de trading, debes configurar un bot de Discord para aprobaciones. Consulta la Guía de Configuración de Discord.
Configuración
Puedes configurar el servidor usando banderas de CLI o Variables de Entorno.
| Bandeja | Variable de Entorno | Descripción |
|---|---|---|
--client-id | SCHWAB_CLIENT_ID | Requerido. Clave de App de Schwab. |
--client-secret | SCHWAB_CLIENT_SECRET | Requerido. Secreto de App de Schwab. |
--callback-url | SCHWAB_CALLBACK_URL | URL de redirección (predeterminado: https://127.0.0.1:8182). |
--token-path | N/A | Ruta para guardar/cargar token (predeterminado: ~/.local/share/...). |
--http | N/A | Usar transporte streamable-http en lugar de stdio. |
--host | MCP_HOST | Dirección de enlace al usar --http (predeterminado: 127.0.0.1). |
--port | MCP_PORT | Puerto de enlace al usar --http (predeterminado: 8000). |
--jesus-take-the-wheel | N/A | PELIGRO. Omite la aprobación de Discord para operaciones. |
--no-technical-tools | N/A | Desactiva las herramientas de análisis técnico (SMA, RSI, etc.). |
--json | N/A | Devuelve JSON en lugar de texto formateado (útil para algunos agentes). Los campos nulos/vacíos se eliminan para reducir el uso de tokens. |
Uso con Contenedores
Hay una imagen de Docker/Podman disponible en ghcr.io/jkoelker/schwab-mcp.
podman run --rm -it \
--env SCHWAB_CLIENT_ID=... \
--env SCHWAB_CLIENT_SECRET=... \
-v ~/.local/share/schwab-mcp:/schwab-mcp \
ghcr.io/jkoelker/schwab-mcp:latest server --token-path /schwab-mcp/token.yaml
Herramientas Disponibles
El servidor proporciona un rico conjunto de herramientas para LLMs.
📊 Datos de Mercado
| Herramienta | Descripción |
|---|---|
get_quotes | Cotizaciones en tiempo real para símbolos. |
get_market_hours | Horarios de apertura/cierre del mercado. |
get_movers | Mayores ganadores/perdedores para un índice. |
get_option_chain | Datos estándar de cadena de opciones. |
get_price_history_* | Velas históricas (minuto, día, semana). |
💼 Información de Cuenta
| Herramienta | Descripción |
|---|---|
get_accounts | Listar cuentas vinculadas (pasa include_positions=True para tenencias). |
get_account | Saldos de una cuenta por hash (pasa include_positions=True para tenencias). |
get_transactions | Historial de operaciones y transferencias. |
get_orders | Estado de órdenes abiertas y ejecutadas. |
💸 Trading (Requiere Aprobación)
Realizar una orden consta de dos pasos: previsualizarla y luego ejecutarla por ID. Cada
herramienta preview_* construye la orden y llama a la API de previsualización de Schwab para devolver
los detalles proyectados de la orden más un preview_id; place_previewed_order
luego envía esa orden previsualizada exacta — sin re-derivación de parámetros,
para que el LLM no pueda alucinar una orden diferente a la revisada.
| Herramienta | Descripción |
|---|---|
preview_equity_order | Previsualizar una compra o venta de acción/ETF. |
preview_option_order | Previsualizar una compra o venta de contrato de opción. |
preview_bracket_order | Previsualizar una orden de entrada + take-profit + stop-loss. El tipo de salida de stop-loss predeterminado es STOP; pasa loss_type (STOP, STOP_LIMIT o LIMIT) para una salida diferente, además de loss_limit_price cuando loss_type es STOP_LIMIT; el resolved_leg_types de la respuesta muestra lo que realmente se construyó. |
place_previewed_order | Ejecutar la orden exacta devuelta por una llamada a preview_*, por preview_id. Requiere aprobación. |
cancel_order | Cancelar una orden abierta. |
(Consulta la lista completa de herramientas en src/schwab_mcp/tools/)
Desarrollo
Para contribuir a este proyecto:
# Clone and install dependencies
git clone https://github.com/jkoelker/schwab-mcp.git
cd schwab-mcp
uv sync
# Run tests
uv run pytest
# Format and Lint
uv run ruff format . && uv run ruff check .
Licencia
Licencia MIT.