MCP server for Interactive Brokers account management, trading, and market data access
Strong foundation with 14 well-named tools using consistent verb_noun patterns (get*, search*, place*, confirm*, cancel*). All tools have descriptions (avg ~120 chars, within baseline 194 chars). Input schemas are present and properly typed with enums for constrained fields (SecurityType, OrderSide, TimeInForce). However, parameter descriptions are sparse, many lack detail on format, range, or dependencies. Output schemas are inferred from code but not explicitly documented. Error handling is minimal; no recovery guidance or actionable error messages visible. Security considerations (credentials, permissions) not addressed in tool definitions.
Cancel an open order by its order ID.
Confirm an order that requires confirmation due to warnings. Pass the reply_id returned by placeOrder.
Get the cash balances of an Interactive Brokers account broken down by currency. The 'BASE' entry is the account-wide total converted into the account's base currency and the remaining entries are the individual currencies held, so summing across entries double counts. Use getAccountSummary instead for buying power and margin figures.
Get the list of positions held in a given Interactive Brokers account.
Get the balance and margin summary of an Interactive Brokers account: net liquidation value, cash, buying power, available funds, excess liquidity, margin requirements and profit and loss. Every amount is in the account's base currency. Use getAccountBalances instead for a per-currency cash breakdown.
Parameter descriptions lack actionable detail. E.g., 'days' in getTrades has no range (1 - 365?), 'limit_price' in placeOrder lacks format guidance, 'start_date' in getTransactionHistory states format but no validation error message.
Output schemas not explicitly documented in tool definitions. LLMs cannot infer return structure (e.g., what fields does Quote contain? Is market_price always present?). Code shows return types but tool descriptions do not.
No error handling guidance. placeOrder can return 'reply_id if order requires confirmation' but no description of what errors might occur (insufficient funds, invalid contract, market closed) or how to recover.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | <=2025-11-25 | v2 |
Get all Interactive Brokers accounts linked to the current login.
Get all open and recent orders for an account.
Get the status of a specific order by its order ID.
Get live market data quotes for one or more securities by their contract IDs.
Get detailed information about an Interactive Brokers security by its contract ID.
Get all trades (executions) for an account within a specified number of days.
Get transaction history for an account within a specified date range.
Place a new order on Interactive Brokers. Returns the order ID if accepted, or a reply ID if the order requires confirmation due to warnings.
Search for Interactive Brokers securities using symbol OR name.
Destructive operations (placeOrder, confirmOrder, cancelOrder) lack confirmation or dry-run capability. No mention of idempotency or retry safety. Agents could accidentally place duplicate orders.
No pagination documented for list-returning tools (getLiveOrders, getTrades, getTransactionHistory). No mention of result limits, cursors, or offset/limit parameters. Large result sets could exhaust context.