Schwab MCP

O Servidor Model Context Protocol (MCP) da Schwab conecta sua conta Schwab a aplicativos baseados em LLM (como Claude Desktop ou outros clientes MCP), permitindo que eles recuperem dados de mercado, verifiquem o status da conta e (opcionalmente) façam pedidos sob sua supervisão.

Documentação

Servidor do Model Context Protocol Schwab

O Servidor do Model Context Protocol (MCP) da Schwab conecta sua conta Schwab a aplicativos baseados em LLM (como Claude Desktop ou outros clientes MCP), permitindo que eles recuperem dados de mercado, verifiquem o status da conta e (opcionalmente) façam pedidos sob sua supervisão.

Recursos

  • Dados de Mercado: Cotações em tempo real, histórico de preços, cadeias de opções e movimentadores de mercado.
  • Gerenciamento de Conta: Visualize saldos, posições e transações.
  • Negociação: suporte abrangente para ações e opções, incluindo estratégias complexas (OCO, Bracket).
  • Segurança em Primeiro Lugar: Ações críticas (como negociação) são controladas por um fluxo de aprovação do Discord por padrão.
  • Integração com LLM: Projetado especificamente para fluxos de trabalho de IA Agêntica.

Início Rápido

Pré-requisitos

Instalação

Para a maioria dos usuários, instalar via uv tool ou pip é mais 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

Autenticação

Antes de executar o servidor, você deve autenticar com a Schwab para gerar um arquivo 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

Isso abrirá uma janela do navegador para você fazer login na Schwab. Após a conclusão, um token será salvo em ~/.local/share/schwab-mcp/token.yaml.

Executando o Servidor

Inicie o servidor MCP para expor as ferramentas ao seu 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

O transporte padrão é stdio (Claude Desktop e a maioria dos clientes MCP locais). Use --http para FastMCP streamable-http ao colocar o servidor atrás de um gateway ou conector remoto (o endpoint MCP é /mcp no host:porta vinculado).

Nota: Para recursos de negociação, você deve configurar um bot do Discord para aprovações. Veja o Guia de Configuração do Discord.

Configuração

Você pode configurar o servidor usando flags de CLI ou Variáveis de Ambiente.

FlagVariável de AmbienteDescrição
--client-idSCHWAB_CLIENT_IDObrigatório. Chave do Aplicativo Schwab.
--client-secretSCHWAB_CLIENT_SECRETObrigatório. Segredo do Aplicativo Schwab.
--callback-urlSCHWAB_CALLBACK_URLURL de redirecionamento (padrão: https://127.0.0.1:8182).
--token-pathN/ACaminho para salvar/carregar token (padrão: ~/.local/share/...).
--httpN/AUse transporte streamable-http em vez de stdio.
--hostMCP_HOSTEndereço de vinculação ao usar --http (padrão: 127.0.0.1).
--portMCP_PORTPorta de vinculação ao usar --http (padrão: 8000).
--jesus-take-the-wheelN/APERIGO. Ignora a aprovação do Discord para negociações.
--no-technical-toolsN/ADesativa ferramentas de análise técnica (SMA, RSI, etc.).
--jsonN/ARetorna JSON em vez de texto formatado (útil para alguns agentes). Campos nulos/vazios são removidos para reduzir o uso de tokens.

Uso em Contêiner

Uma imagem Docker/Podman está disponível em 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

Ferramentas Disponíveis

O servidor fornece um conjunto rico de ferramentas para LLMs.

📊 Dados de Mercado

FerramentaDescrição
get_quotesCotações em tempo real para símbolos.
get_market_hoursHorários de abertura/fechamento do mercado.
get_moversMaiores altas/baixas para um índice.
get_option_chainDados padrão de cadeia de opções.
get_price_history_*Candles históricos (minuto, dia, semana).

💼 Informações da Conta

FerramentaDescrição
get_accountsListar contas vinculadas (passe include_positions=True para posições).
get_accountSaldos de uma conta por hash (passe include_positions=True para posições).
get_transactionsHistórico de negociações e transferências.
get_ordersStatus de ordens abertas e executadas.

💸 Negociação (Requer Aprovação)

Fazer um pedido é um processo de duas etapas: pré-visualize-o e depois envie-o por ID. Cada ferramenta preview_* constrói o pedido e chama a API de pré-visualização da Schwab para retornar os detalhes projetados do pedido, além de um preview_id; place_previewed_order então envia exatamente esse pedido pré-visualizado — sem re-derivação a partir de parâmetros, para que o LLM não possa alucinar um pedido diferente do que foi revisado.

FerramentaDescrição
preview_equity_orderPré-visualize uma compra ou venda de ação/ETF.
preview_option_orderPré-visualize uma compra ou venda de contrato de opção.
preview_bracket_orderPré-visualize uma ordem de entrada + take-profit + stop-loss. O tipo de saída do stop-loss padrão é STOP; passe loss_type (STOP, STOP_LIMIT ou LIMIT) para uma saída diferente, além de loss_limit_price quando loss_type for STOP_LIMIT; o resolved_leg_types da resposta mostra o que foi realmente construído.
place_previewed_orderEnvie exatamente o pedido retornado por uma chamada preview_*, por preview_id. Requer aprovação.
cancel_orderCancele uma ordem aberta.

(Veja a lista completa de ferramentas em src/schwab_mcp/tools/)

Desenvolvimento

Para contribuir com este projeto:

# 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 .

Licença

Licença MIT.