schwab-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SCHWAB_CLIENT_ID | Yes | Your Schwab Client ID (from developer.schwab.com) | |
| SCHWAB_TOKEN_PATH | No | Path to the token database | ~/.schwab-mcp/tokens.db |
| SCHWAB_REDIRECT_URI | Yes | Redirect URI for OAuth flow | https://127.0.0.1 |
| SCHWAB_CLIENT_SECRET | Yes | Your Schwab Client Secret |
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 |
|---|---|
| list_accountsA | List every Schwab account linked to this API app, with balances. Args: include_positions: If True, each account also includes its current positions (symbol, quantity, market value, cost basis, etc.) in addition to balances. Returns: A list of per-account detail objects, one per linked account. |
| get_accountA | Get one Schwab account's details (balances, and optionally positions). Args: account_number: The plain Schwab account number as shown to the user (not the internal account hash). include_positions: If True, also include the account's current positions. Returns: A single account detail object. |
| get_quoteA | Get a real-time quote for a single symbol. Args: symbol: The ticker symbol to quote (e.g. "AAPL"). Returns: A dict with a single key (the requested symbol) mapping to that symbol's quote data. |
| get_quotesA | Get real-time quotes for multiple symbols in a single call. Args: symbols: List of ticker symbols to quote (e.g. ["AAPL", "MSFT"]). Returns: A dict keyed by each requested symbol, mapping to that symbol's quote data. |
| list_ordersA | List orders entered for one Schwab account within a time window. Read-only; does not place, modify, or cancel anything. Args: account_number: The plain Schwab account number as shown to the user (not the internal account hash). from_entered_time: Start of the entered-time window (ISO-8601 datetime string). to_entered_time: End of the entered-time window (ISO-8601 datetime string). max_results: Optional cap on the number of orders returned. status: Optional order status filter (e.g. "FILLED", "CANCELED", "WORKING"). Returns: A list of order objects, most recent first. |
| get_orderA | Get the full details of one order in one Schwab account. Read-only; does not place, modify, or cancel anything. Args: account_number: The plain Schwab account number as shown to the user (not the internal account hash). order_id: The Schwab order id to look up. Returns: A single order object. |
| place_orderA | Preview or place a live order in one Schwab account. SAFETY CRITICAL / two-step confirmation flow. This tool NEVER submits a live order on the first call:
Args: account_number: The plain Schwab account number as shown to the user (not the internal account hash). order: The order object per Schwab's order schema (orderType, session, duration, orderStrategyType, price, orderLegCollection with instruction/quantity/instrument, etc.). confirm: Must be False (default) for the initial preview call, and True only on a follow-up call after the user has explicitly confirmed. Never default this to True. Returns: If confirm is False: preview details and no order placed. If confirm is True: the submitted order's id and status. |
| cancel_orderA | Cancel a live (working/pending) order in one Schwab account. SAFETY CRITICAL / two-step confirmation flow. This tool NEVER cancels an order on the first call:
Args: account_number: The plain Schwab account number as shown to the user (not the internal account hash). order_id: The Schwab order id to cancel. confirm: Must be False (default) for the initial lookup call, and True only on a follow-up call after the user has explicitly confirmed. Never default this to True. Returns: If confirm is False: the current order's details, not cancelled. If confirm is True: confirmation that the order was cancelled. |
| list_transactionsA | List transactions for one Schwab account within a date range. Args: account_number: The plain Schwab account number as shown to the user (not the internal account hash). start_date: Start of the date range, inclusive (ISO-8601 date or datetime string). end_date: End of the date range, inclusive (ISO-8601 date or datetime string). types: Required Schwab transaction-type filter, e.g. "TRADE", "DIVIDEND_OR_INTEREST". symbol: Optional ticker symbol to further filter transactions. Returns: A list of transaction objects. |
| get_transactionA | Get full details for a single transaction on one Schwab account. Args: account_number: The plain Schwab account number as shown to the user (not the internal account hash). transaction_id: The Schwab transaction id to fetch. Returns: A single transaction object. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 10 tools
Each tool maps to a unique resource-action pair: accounts list/get, quotes single/batch, orders list/get/place/cancel, transactions list/get. The only similar pair is get_quote vs get_quotes, but the singular/batch distinction is explicit and clear.
Tool names follow a consistent verb_noun pattern: list_* for collections, get_* for single items, and place_/cancel_ for state-changing order actions. This makes the API surface predictable and easy to navigate.
Ten tools is well-scoped for a brokerage server, covering accounts, market quotes, orders, and transactions without redundancy or bloat. Each tool earns its place and the count matches the domain breadth.
Core brokerage workflows are covered: account lookup, quoting, order placement/cancellation, and transaction history. Minor gaps exist, such as order modification/replacement, but the primary agent-facing operations are present and workable.