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
- Python 3.10 ou superior
- uv (recomendado) ou
pip - Uma Chave e Segredo do Aplicativo de Desenvolvedor Schwab (do Portal do Desenvolvedor Schwab)
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.
| Flag | Variável de Ambiente | Descrição |
|---|---|---|
--client-id | SCHWAB_CLIENT_ID | Obrigatório. Chave do Aplicativo Schwab. |
--client-secret | SCHWAB_CLIENT_SECRET | Obrigatório. Segredo do Aplicativo Schwab. |
--callback-url | SCHWAB_CALLBACK_URL | URL de redirecionamento (padrão: https://127.0.0.1:8182). |
--token-path | N/A | Caminho para salvar/carregar token (padrão: ~/.local/share/...). |
--http | N/A | Use transporte streamable-http em vez de stdio. |
--host | MCP_HOST | Endereço de vinculação ao usar --http (padrão: 127.0.0.1). |
--port | MCP_PORT | Porta de vinculação ao usar --http (padrão: 8000). |
--jesus-take-the-wheel | N/A | PERIGO. Ignora a aprovação do Discord para negociações. |
--no-technical-tools | N/A | Desativa ferramentas de análise técnica (SMA, RSI, etc.). |
--json | N/A | Retorna 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
| Ferramenta | Descrição |
|---|---|
get_quotes | Cotações em tempo real para símbolos. |
get_market_hours | Horários de abertura/fechamento do mercado. |
get_movers | Maiores altas/baixas para um índice. |
get_option_chain | Dados padrão de cadeia de opções. |
get_price_history_* | Candles históricos (minuto, dia, semana). |
💼 Informações da Conta
| Ferramenta | Descrição |
|---|---|
get_accounts | Listar contas vinculadas (passe include_positions=True para posições). |
get_account | Saldos de uma conta por hash (passe include_positions=True para posições). |
get_transactions | Histórico de negociações e transferências. |
get_orders | Status 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.
| Ferramenta | Descrição |
|---|---|
preview_equity_order | Pré-visualize uma compra ou venda de ação/ETF. |
preview_option_order | Pré-visualize uma compra ou venda de contrato de opção. |
preview_bracket_order | Pré-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_order | Envie exatamente o pedido retornado por uma chamada preview_*, por preview_id. Requer aprovação. |
cancel_order | Cancele 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.