schwab-mcp
schwab-mcp
Ein MCP-Server, der eine Verbindung zur Charles Schwab Brokerage-API herstellt, sowie ein Claude Code-Plugin mit Fähigkeiten, die LLM-Roundtrips beim Aufruf der MCP-Werkzeuge einsparen.
Was dies bewirkt
MCP-Server — Kapselt die Schwab API über schwabdev und stellt 18 Werkzeuge über Streamable HTTP bereit:
Kategorie | Werkzeuge |
Sitzung |
|
Marktdaten |
|
Konten |
|
Aufträge |
|
Instrumente |
|
Claude Code-Plugin — Bietet sechs Fähigkeiten (schwab:account, schwab:orders, schwab:quotes, schwab:market, schwab:instruments, schwab:chart-orders), die Claude vorab die Regeln zur Werkzeugauswahl, Parameterformate und Sicherheitsmuster vermitteln. Dies eliminiert das Hin- und Her, das das LLM sonst benötigen würde, um herauszufinden, welches Werkzeug aufgerufen werden soll und wie dies zu geschehen hat.
Related MCP server: KiteMCP
Voraussetzungen
Python 3.11+
Ein Schwab Developer-Konto mit einer genehmigten App (Sie benötigen den App-Key und das Secret)
Einrichtung
# Clone and install
git clone <repo-url> && cd schwab-mcp
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# Add credentials
cp .env.example ~/.schwab-mcp/.env
# Edit ~/.schwab-mcp/.env with your Schwab app key and secret
# Authenticate (opens browser for OAuth)
schwab-mcp auth
# Start the server
schwab-mcp serveDer Server lauscht standardmäßig auf http://127.0.0.1:8099/mcp. Überschreiben Sie dies mit den Umgebungsvariablen SCHWAB_MCP_HOST und SCHWAB_MCP_PORT.
Verwendung mit Claude Code
Installieren Sie das Plugin-Verzeichnis, damit Claude Code die MCP-Verbindung und die Fähigkeiten erkennt:
claude plugin add ./pluginDies registriert:
Die MCP-Serververbindung (über
plugin/.mcp.json)Sechs Fähigkeiten, die Claude bei der Verwendung der jeweiligen Werkzeugkategorie anleiten
Einen Hook zum Sitzungsende, der temporäre Dateien bereinigt
Fragen Sie Claude nach der Installation Dinge wie:
"Was sind meine Kontopositionen?"
"Gib mir einen Kurs für AAPL"
"Platziere eine Limit-Order zum Kauf von 10 Aktien von MSFT zu 400 $"
"Zeige mir die heutigen Top-Gewinner im S&P 500"
"Erstelle ein Diagramm meiner ausgeführten Aufträge für SPX heute"
Beispiel: Platzieren einer Limit-Order
You: Buy 100 shares of SPY with limit order at current median bid-ask spread.
This order should be canceled if it weren't filled before 3/30 12PM ET.
Claude: I need to get SPY's current bid-ask spread first, then build the order.
Let me fetch the quote.
[calls get_quotes for SPY]
Got the quote. Here's the current SPY pricing:
- Bid: $632.70
- Ask: $633.00
- Midpoint: $632.85
Regarding cancellation by 3/30 12PM ET — Schwab doesn't support
"cancel at a specific time." I'll use DAY duration (valid through
market close on 3/30). You'd need to manually cancel at noon if
unfilled.
[calls place_order with confirmed=False — dry run]
| Field | Value |
|------------|----------------------------|
| Action | BUY |
| Symbol | SPY |
| Quantity | 100 shares |
| Order Type | LIMIT |
| Price | $632.85 (bid-ask midpoint) |
| Duration | DAY |
| Session | NORMAL |
Shall I submit this order?
You: yes
Claude: [calls place_order with confirmed=True]
Order submitted successfully.Die Fähigkeit leitete Claude dazu an:
Den Kurs abzurufen, um den Mittelpreis zu berechnen
Den Auftrag zuerst als Trockenübung auszuführen (
confirmed=False) und die Zusammenfassung anzuzeigenErst nach ausdrücklicher Benutzerbestätigung zu übermitteln (
confirmed=True)
Beispiel: Diagramm ausgeführter Aufträge
You: Plot my last week's credit spread trades
Claude: [fetches filled orders for Mar 22-28]
39 credit spread orders on SPXW last week — 30 vertical spreads
and 9 iron condors across 5 trading days.
[fetches 15-minute SPX candles for the same range]
[runs chart_orders.py with candles + orders data]
Candles: 130, Orders: 62 (12 buy, 11 sell, 39 spread)
Interactive chart saved to plugin/skills/chart-orders/chart.html
Die Fähigkeit leitete Claude dazu an:
Ausgeführte Aufträge für den Datumsbereich abzurufen und das Basiswert-Instrument (SPXW/SPX) zu identifizieren
15-Minuten-Kerzen abzurufen (geeignet für einen mehrtägigen Bereich)
Das Diagramm-Skript auszuführen, um ein interaktives Plotly-Diagramm mit Auftragsmarkierungen, Tagestrennlinien und Hover-Tooltips zu generieren
Sicherheit
Mutierende Operationen (place_order, cancel_order, replace_order) verwenden ein zweistufiges Bestätigungsmuster. Der erste Aufruf ist ein Testlauf, der zeigt, was passieren würde; Sie müssen die Ausführung explizit bestätigen.
Projektstruktur
src/schwab_mcp/
server.py # CLI entry point (serve / auth commands)
client.py # Schwab client init, OAuth tokens, state persistence
_mcp.py # FastMCP server instance
logging_config.py # Rotating log handler with credential redaction
tools/ # MCP tool implementations
session.py # Account listing and selection
market_data.py # Quotes, options, price history, movers
accounts.py # Account details, transactions, preferences
orders.py # Order CRUD with dry-run safety
instruments.py # Symbol/CUSIP lookup
plugin/
.mcp.json # MCP server connection config
.claude-plugin/plugin.json # Plugin metadata
hooks/hooks.json # Session cleanup hook
skills/ # Claude Code skill definitionsStatus und Protokolle
Der gesamte Laufzeitstatus befindet sich in ~/.schwab-mcp/:
Datei | Zweck |
| API-Anmeldedaten |
| OAuth-Token (automatisch aktualisiert durch schwabdev) |
| Auswahl des aktiven Kontos |
| Rotierendes Protokoll (5 MB, 3 Backups, Anmeldedaten geschwärzt) |
Große Werkzeugantworten (Optionsketten, lange Transaktionslisten) werden nach /tmp/schwab-mcp/ geschrieben und automatisch bereinigt, wenn die Claude Code-Sitzung endet.
Entwicklung
# Run tests
pytest
# Run with debug logging
LOG_LEVEL=DEBUG schwab-mcp serveThis server cannot be deployed
Maintenance
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Multi-tenant FastMCP server for Charles Schwab brokerage data, monetized via DPYC Tollbooth
Hosted MCP for stocks, options, Greeks, brokers, order previews, alerts, and workflows.
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceA Model Context Protocol server that enables AI assistants like Claude to securely interact with Charles Schwab accounts and market data through the official Schwab API.75-
- FlicenseNot gradedqualityDmaintenanceA command-based MCP server that enables programmatic stock trading on Zerodha through natural language interfaces like Claude, allowing users to buy and sell stocks via API calls.-
- FlicenseNot gradedqualityDmaintenanceMCP server exposing Tradier brokerage tools to Claude, enabling account balance checks, position management, order operations, and market data queries.-
- AlicenseAqualityFmaintenanceMCP server for Interactive Brokers API integration, enabling account management, trading, market data, and short selling analysis through Claude.835MIT