Information
# Schwab Model Context Protocol Server
This is a server that implements the Model Context Protocol (MCP) for
the Schwab API using [schwab-py](https://github.com/alexgolec/schwab-py) and
the MCP [python-sdk](https://github.com/modelcontextprotocol/python-sdk).
## Features
- Expose Schwab API functionality through Model Context Protocol
- Get account information and positions
- Retrieve stock quotes and price history
- Get market information and movers
- Fetch option chains and expiration data
- Access order and transaction history
- Modify account state with special tools (requires \`--jesus-take-the-wheel\` flag)
- Designed to integrate with Large Language Models (LLMs)
## Installation
\`\`\`bash
# Install with all dependencies
uv add -e .
# Install development dependencies
uv add -e .[dev]
\`\`\`
## Usage
### Authentication
The first step is to authenticate with the Schwab API and generate a token:
\`\`\`bash
# Authenticate and generate a token
uv run schwab-mcp auth --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET --callback-url YOUR_CALLBACK_URL
\`\`\`
You can set these credentials through environment variables to avoid typing them each time:
- \`SCHWAB_CLIENT_ID\`
- \`SCHWAB_CLIENT_SECRET\`
- \`SCHWAB_CALLBACK_URL\` (defaults to https://127.0.0.1:8182)
By default, the token is saved to \`~/.local/share/schwab-mcp/token.yaml\` (platform-specific). You can specify a different path:
\`\`\`bash
uv run schwab-mcp auth --token-path /path/to/token.yaml
\`\`\`
Both yaml and json token formats are supported and will be inferred from the file extension.
### Running the Server
After authentication, you can run the server:
\`\`\`bash
# Run the server with default token path
uv run schwab-mcp server --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET --callback-url YOUR_CALLBACK_URL
# Run with a custom token path
uv run schwab-mcp server --token-path /path/to/token.json --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET --callback-url YOUR_CALLBACK_URL
# Run with account modification tools enabled
uv run schwab-mcp server --jesus-take-the-wheel --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET --callback-url YOUR_CALLBACK_URL
\`\`\`
Token age is validated - if older than 5 days, you will be prompted to re-authenticate.
> **WARNING**: Using the \`--jesus-take-the-wheel\` flag enables tools that can modify your account state. Use with caution as this allows LLMs to cancel orders and potentially perform other actions that change account state.
## Available Tools
The server exposes the following MCP tools:
### Date and Market Information
1. \`get_datetime\` - Get the current datetime in ISO format
2. \`get_market_hours\` - Get market hours for a specific market
3. \`get_movers\` - Get movers for a specific index
4. \`get_instruments\` - Search for instruments with a specific symbol
### Account Information
5. \`get_account_numbers\` - Get mapping of account IDs to account hashes
6. \`get_accounts\` - Get information for all linked Schwab accounts
7. \`get_accounts_with_positions\` - Get accounts with position information
8. \`get_account\` - Get information for a specific account
9. \`get_account_with_positions\` - Get specific account with position information
10. \`get_user_preferences\` - Get user preferences for all accounts including nicknames
### Orders
11. \`get_order\` - Get details for a specific order
12. \`get_orders\` - Get orders for a specific account
### Quotes
13. \`get_quotes\` - Get quotes for specified symbols
### Price History
14. \`get_advanced_price_history\` - Get advanced price history for a specific symbol
15. \`get_price_history_every_minute\` - Get price history with minute frequency
16. \`get_price_history_every_five_minutes\` - Get price history with five minute frequency
17. \`get_price_history_every_ten_minutes\` - Get price history with ten minute frequency
18. \`get_price_history_every_fifteen_minutes\` - Get price history with fifteen minute frequency
19. \`get_price_history_every_thirty_minutes\` - Get price history with thirty minute frequency
20. \`get_price_history_every_day\` - Get price history with daily frequency
21. \`get_price_history_every_week\` - Get price history with weekly frequency
### Options
22. \`get_option_chain\` - Get option chain for a specific symbol
23. \`get_advanced_option_chain\` - Get advanced option chain for a specific symbol
24. \`get_option_expiration_chain\` - Get option expiration information for a symbol
### Transactions
25. \`get_transactions\` - Get transactions for a specific account
26. \`get_transaction\` - Get details for a specific transaction
### Account Modification Tools (Requires \`--jesus-take-the-wheel\` flag)
27. \`cancel_order\` - Cancel a specific order
## Security Warning
The \`--jesus-take-the-wheel\` flag enables LLMs to perform actions that can modify your account state, including:
- Canceling orders
- Other actions that may have financial implications (more tools to be added in future releases)
Only use this flag in controlled environments and understand the risks involved.
## Development
\`\`\`bash
# Type check
uv run pyright
# Format code
uv run ruff format .
# Lint
uv run ruff check .
# Run tests
uv run pytest
\`\`\`
## License
This project is available under the MIT License.