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

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.

BandejaVariable de EntornoDescripción
--client-idSCHWAB_CLIENT_IDRequerido. Clave de App de Schwab.
--client-secretSCHWAB_CLIENT_SECRETRequerido. Secreto de App de Schwab.
--callback-urlSCHWAB_CALLBACK_URLURL de redirección (predeterminado: https://127.0.0.1:8182).
--token-pathN/ARuta para guardar/cargar token (predeterminado: ~/.local/share/...).
--httpN/AUsar transporte streamable-http en lugar de stdio.
--hostMCP_HOSTDirección de enlace al usar --http (predeterminado: 127.0.0.1).
--portMCP_PORTPuerto de enlace al usar --http (predeterminado: 8000).
--jesus-take-the-wheelN/APELIGRO. Omite la aprobación de Discord para operaciones.
--no-technical-toolsN/ADesactiva las herramientas de análisis técnico (SMA, RSI, etc.).
--jsonN/ADevuelve 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

HerramientaDescripción
get_quotesCotizaciones en tiempo real para símbolos.
get_market_hoursHorarios de apertura/cierre del mercado.
get_moversMayores ganadores/perdedores para un índice.
get_option_chainDatos estándar de cadena de opciones.
get_price_history_*Velas históricas (minuto, día, semana).

💼 Información de Cuenta

HerramientaDescripción
get_accountsListar cuentas vinculadas (pasa include_positions=True para tenencias).
get_accountSaldos de una cuenta por hash (pasa include_positions=True para tenencias).
get_transactionsHistorial de operaciones y transferencias.
get_ordersEstado 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.

HerramientaDescripción
preview_equity_orderPrevisualizar una compra o venta de acción/ETF.
preview_option_orderPrevisualizar una compra o venta de contrato de opción.
preview_bracket_orderPrevisualizar 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_orderEjecutar la orden exacta devuelta por una llamada a preview_*, por preview_id. Requiere aprobación.
cancel_orderCancelar 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.