Schwab MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SCHWAB_CLIENT_ID | Yes | Schwab App Key (Client ID). Required. | |
| SCHWAB_TOKEN_PATH | No | Path to the token file. | ~/.config/schwab-mcp/token.json |
| SCHWAB_MCP_TIMEOUT | No | Request timeout in seconds. | 20 |
| SCHWAB_CALLBACK_URL | No | OAuth callback URL. Must exactly match the value configured in the Schwab developer app. | https://127.0.0.1:8182 |
| SCHWAB_CLIENT_SECRET | Yes | Schwab App Secret (Client Secret). Required. | |
| SCHWAB_MCP_LOG_LEVEL | No | Log level. Logs are written to stderr only. | INFO |
| SCHWAB_MCP_HTTP_TOKEN | No | Bearer token used for HTTP transport. Required when running in HTTP mode. | |
| SCHWAB_MCP_MASK_ACCOUNTS | No | Whether to mask account numbers in output. Set to false to show full account numbers. | true |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_auth_statusA | Check whether the Schwab login is valid and when it expires (Schwab requires a new browser login every 7 days). Call this first if other tools report authentication errors. |
| list_accountsA | List the linked Schwab accounts with type, nickname and key balances (total value, cash,
buying power). Use the returned |
| get_positionsA | Holdings per account: quantity, average cost, market value, unrealized and today's P/L, and weight in the account. Sorted by market value. Set include_quotes=true for live last/mark prices. |
| get_portfolio_summaryA | One-shot overview across all accounts: total value, cash, today's P/L, unrealized P/L, allocation by asset type, top holdings (merged across accounts) and per-account totals. |
| get_ordersB | Recent orders (open, filled, cancelled...) with legs, fills and average fill price. Read-only. |
| get_transactionsB | Account history: trades, dividends, interest, deposits/withdrawals and fees, newest first. |
| get_quotesB | Real-time quotes: last, bid/ask, day change and %, volume, day range, 52-week range, plus greeks for options and optional fundamentals. |
| get_price_historyB | OHLCV candles plus a summary (change, % change, high/low, average volume) for a period. |
| get_option_chainA | Option chain with bid/ask/mark, volume, open interest, implied volatility and greeks, nearest expirations first. Use get_option_expirations to pick dates. |
| get_option_expirationsB | All listed option expiration dates for an underlying, with days to expiration. |
| get_market_hoursA | Trading sessions (pre-market, regular, post-market) for a day and whether the market is open.
For today it also reports which session is active right now ( |
| get_moversC | Top movers in an index or exchange, sorted by volume, trades or % change. |
| search_instrumentsB | Look up instruments by symbol or company name, or get fundamentals for a symbol. |
| get_current_timeA | Current date and time in US/Eastern (the exchange clock) and UTC. Useful before date math. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| portfolio_review | Review my Schwab portfolio. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Most tools target distinct resource/action pairs, and descriptions clarify boundaries. There is some conceptual overlap between get_positions and get_portfolio_summary, and between get_orders and get_transactions, but they are distinguished by detail level and scope.
All tool names use snake_case with a consistent verb_noun pattern such as get_*, list_*, and search_*. The naming is predictable throughout the set.
14 tools is well-scoped for a read-only Schwab brokerage and market-data server. Each tool covers a clear area such as accounts, quotes, options, orders, or time, without excessive duplication.
The read-only surface is strong: auth, accounts, positions, portfolio, orders, transactions, quotes, price history, options, market hours, movers, instruments, and time are all covered. Missing write/trading operations like placing or cancelling orders and minor extras like watchlists or news are the main gaps.