ibkr-mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ibkr-mcp-servershow my current positions"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ibkr-mcp-server
MCP server that exposes Interactive Brokers via the TWS API as 14 tools: account reads, market data, contract resolution, and order placement.
Paper-by-default. Live trading requires explicit opt-in via IBKR_TRADING_MODE=live.
Prerequisites
TWS or IB Gateway running locally. Download from IBKR.
API enabled in TWS/Gateway: Configure → API → Settings
Check "Enable ActiveX and Socket Clients"
Uncheck "Read-Only API"
Socket port:
7497(paper) or7496(live) — defaults match this serverAdd
127.0.0.1to "Trusted IPs"
uv installed:
curl -LsSf https://astral.sh/uv/install.sh | sh
Related MCP server: IBKR TWS MCP Server
Install
git clone <this repo>
cd ibkr-mcp-server
uv syncConfigure
Copy .env.example and adjust as needed (or export the vars in your shell / MCP client config).
Register with Claude Code
Add to ~/.claude.json (or a per-project .mcp.json):
{
"mcpServers": {
"ibkr": {
"command": "uv",
"args": [
"--directory", "/absolute/path/to/ibkr-mcp-server",
"run", "ibkr-mcp-server"
],
"env": {
"IBKR_TRADING_MODE": "paper",
"IBKR_CLIENT_ID": "17"
}
}
}
}Tools
Tool | Purpose |
| Connection + mode + gateway info |
| Cash, net liq, buying power, margin |
| Open positions with market price enrichment |
| Account-level or per-position P&L |
| Today's fills (or since ISO timestamp) |
| IBKR symbol search |
| Resolve symbol → canonical contract with conid |
| Snapshot bid/ask/last/volume |
| OHLCV bars |
| Place MKT/LMT/STP/STP_LMT order |
| Entry + take-profit + stop-loss |
| Modify an existing open order |
| Cancel an open order |
| List currently open orders |
Safety
Mode gate: server reads
managedAccountson connect and verifies prefixes (DU*= paper,U*= live). On mismatch, all order tools are blocked.Audit log: every order placement / modification / cancellation is appended as a JSON line to
$IBKR_AUDIT_LOG(default~/.ibkr-mcp-server/audit.log).Read-only mode: set
IBKR_READONLY=1to disable all order tools.
Risk rails (v2)
Three additional rails apply to place_order, place_bracket_order, and modify_order. cancel_order and list_open_orders are intentionally not gated.
Notional caps. Per-order and daily-cumulative ceilings in USD. Mode-aware: paper and live have independent envs. Set to
unlimitedto disable an individual cap.Rate limit. Each gated tool has its own token bucket (capacity 10, refill 10/min). Hardcoded in v2.
Kill switch. If
IBKR_HALT_FILEexists, every gated tool returns{status:"rejected", error_code:"HALT", ...}immediately. Remove the file to re-enable.
Blocks are returned as data (same shape as IB-side rejections) and appended to the audit log. They do not raise.
get_quote now returns a data_type field: "live" | "delayed" | "delayed_frozen" | "frozen". The server calls ib.reqMarketDataType(3) on connect so weekend/out-of-hours quotes fall back to delayed data instead of returning nulls.
Env var | Default | Purpose |
|
| Per-order notional cap in paper (USD); |
|
| Per-order notional cap in live (USD); |
|
| Daily cumulative cap in paper; |
|
| Daily cumulative cap in live; |
|
| Path probed on every order; presence halts all order-mutating tools |
Testing
uv run pytest # unit tests (default)
IBKR_INTEGRATION_TESTS=1 uv run pytest -m integration # against a running paper gateway
uv run python scripts/smoke.py # manual end-to-end smokeAvailable Tools
14 toolscancel_orderC
Cancel an existing open order.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral aspects like whether cancellation is reversible, side effects, or response structure. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short but front-loaded. However, it is under-specified; a few more sentences could add value without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and minimal description, the tool definition lacks completeness for effective use. Critical details like error handling or behavior on non-existent orders are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter order_id lacks any description in the schema (0% coverage). The description adds no meaning beyond the parameter name, failing to explain how to obtain or format it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool cancels an existing open order, using a specific verb and resource. This distinguishes it from siblings like place_order and modify_order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as modify_order. No prerequisites or conditions (e.g., order must be open) are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_summaryD
Cash, net liquidation, buying power, margin.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden but only lists fields. Fails to disclose read-only nature, authentication needs, or any behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely short (4 words) but at the expense of clarity. It is under-specified rather than concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a simple input, the description should clarify return values and parameter. It fails to provide a complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one optional parameter 'account' with 0% coverage and no description. Description does not explain the parameter's purpose or usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description only lists fields ('Cash, net liquidation, buying power, margin') without an action verb. Implies retrieval but lacks specificity. Distinguishable from siblings like get_positions or get_pnl but vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_positions or get_pnl. No mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_executionsC
Today's fills (or since ISO timestamp).
| Name | Required | Description | Default |
|---|---|---|---|
| since | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral transparency. It only says 'Today's fills (or since ISO timestamp)', offering no information about whether the tool is read-only, what the output structure looks like, or any limits on the data returned. This is insufficient for an agent to understand side effects or data behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At three words, the description is extremely concise. However, it sacrifices important details (e.g., output format, behavior) that could be included without significant bloat. It is front-loaded but not fully informative, balancing brevity against completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, no annotations, and one parameter, the description should at least hint at the return type (e.g., list of execution objects) and clarify the scope (e.g., 'today' meaning calendar day or last 24 hours). The current text is too vague to fully prepare an agent for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter 'since' has no description in the schema (0% coverage). The tool description adds that it is an ISO timestamp, which clarifies the parameter's format and purpose. However, it does not specify the exact ISO format (e.g., 'YYYY-MM-DDTHH:mm:ss') or whether the timestamp is inclusive, limiting full clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses 'fills' to indicate executed trades, which is a specific term for completed orders. It clearly states that it retrieves today's executions with an optional timestamp filter. While not explicitly distinguishing from siblings like 'get_positions' or 'get_historical_bars', the context of 'executions' aligns with trade fills, making it reasonably clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining today's fills or fills since a given timestamp, but provides no guidance on when not to use this tool or how it differs from alternatives such as 'get_positions' (current positions) or 'list_open_orders' (open orders). No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historical_barsD
Historical OHLCV bars.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| use_rth | No | ||
| bar_size | No | 1 min | |
| currency | No | USD | |
| duration | No | 1 D | |
| exchange | No | SMART | |
| sec_type | No | STK | |
| end_datetime | No | ||
| what_to_show | No | TRADES | |
| primary_exchange | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description is minimal. It does not disclose any behavioral traits such as data range, rate limits, or side effects. The description fails to compensate for the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at three words, but it is under-specified. Effective conciseness should preserve essential information; here, critical context is omitted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, no output schema, no annotations), the description is grossly incomplete. It does not explain return values, error handling, or how to use the parameters appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 10 parameters with 0% schema description coverage. The description adds no meaning beyond the parameter names. For example, 'bar_size', 'duration', and 'what_to_show' are not explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Historical OHLCV bars,' which indicates the resource but lacks a verb like 'get' or 'fetch'. It distinguishes the tool from siblings (e.g., get_quote, get_pnl) by mentioning OHLCV bars, but the purpose is only partially clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. There is no indication of when to use this tool versus alternatives like get_quote or get_account_summary. No context for prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pnlC
Account-level or per-position P&L.
| Name | Required | Description | Default |
|---|---|---|---|
| conid | No | ||
| account | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description does not disclose any behavioral traits like performance, destructive effects, or authentication needs. It only states what is returned, not how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, but this brevity sacrifices crucial details. It is front-loaded but insufficient for effective tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and 13 sibling tools, the description is incomplete. It does not cover return values, behavior, or usage context, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description does not explain the parameters beyond their names. 'conid' likely means contract ID but is not elaborated, and 'account' is generic. The description fails to add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies that the tool returns P&L at account or per-position level, which is clear but lacks detail on what P&L includes (e.g., realized/unrealized). It distinguishes from sibling tools like get_account_summary and get_positions by focusing on P&L, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives, such as when to use account-level vs per-position, or prerequisites. The description provides no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_positionsC
Open positions with market price enrichment.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It mentions 'market price enrichment' as a behavioral trait, but lacks details on whether the tool is idempotent, read-only, requires authentication, or handles errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (one sentence), which is concise but underspecified. It does not use structure (e.g., bullet points) to convey key information beyond the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and low schema coverage, the description should provide more context about what fields are returned, what 'market price enrichment' means, and how the optional account parameter filters results. The current description is incomplete for effective tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and the only parameter 'account' is not explained in the description. The agent gets no insight into what the parameter does or how to use it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the resource (positions) and that it returns open positions with market price enrichment. It distinguishes from siblings focused on orders or PnL. However, it uses a noun phrase rather than an explicit verb like 'retrieve'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. Sibling tools like get_account_summary or get_pnl may relate to positions, but no differentiation is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quoteC
Snapshot bid/ask/last/volume.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| currency | No | USD | |
| exchange | No | SMART | |
| sec_type | No | STK | |
| primary_exchange | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates a read-only snapshot but does not specify whether data is real-time or delayed, if market data subscriptions are required, or any other behavioral traits (e.g., error conditions).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (4 words) but at the cost of completeness. It earn its place by stating the output, but could include more critical information without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, no output schema, and no annotations, the description is massively incomplete. It lacks return value details, parameter explanations, data source info, and any usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description adds no information about the five parameters (symbol, currency, exchange, sec_type, primary_exchange). The description fails to explain defaults or how parameters affect the quote returned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Snapshot bid/ask/last/volume' clearly states the tool returns a real-time snapshot of key market data fields. It distinguishes itself from sibling tools like get_historical_bars (historical data) and get_account_summary (account-level info).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_historical_bars for historical data, search_symbol for contract details). The description implies use for a quick quote but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_open_ordersC
List currently open orders.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'List' implies a read operation, but there is no explicit statement about safety, side effects, or what constitutes 'open orders'. The description lacks details on the scope and behavior of the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence that efficiently conveys the core purpose. No unnecessary words. However, it may be overly terse given the lack of other guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (1 parameter, no output schema), the description provides minimal but barely adequate information. It does not describe return values or filtering behavior, which would be needed for an agent to interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the single parameter 'account', and schema description coverage is 0%. The parameter's purpose, effect on results, and default behavior are entirely undocumented, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List currently open orders' is a clear verb+resource. It specifies the action (list) and the resource (open orders). However, it does not differentiate from siblings like 'get_executions' or 'get_positions', which may also return order-related data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'cancel_order', 'get_executions', or 'get_positions'. The agent is left to infer the appropriate context without explicit exclusions or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_orderC
Modify an existing open order.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | ||
| quantity | No | ||
| stop_price | No | ||
| limit_price | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only states the tool modifies an open order but does not explain side effects, permission requirements, or what happens on failure. Critical behavioral traits are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, but it is under-specified rather than concise. It lacks necessary detail to be useful, earning its place poorly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no output schema, no annotations) and presence of many sibling tools, the description fails to provide a complete picture. It does not mention what the tool returns, if modifications are atomic, or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters. The description does not describe any parameter beyond their names (order_id, quantity, stop_price, limit_price). No details on allowed values, constraints, or behavior when omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'modify' and the resource 'existing open order'. It is specific enough to convey the core action, though it lacks distinction from sibling tools like cancel_order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as cancel_order or place_order. The description gives no context for choosing this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_bracket_orderC
Place a bracket: entry + take-profit + stop-loss.
| Name | Required | Description | Default |
|---|---|---|---|
| tif | No | DAY | |
| action | Yes | ||
| symbol | Yes | ||
| account | No | ||
| currency | No | USD | |
| exchange | No | SMART | |
| quantity | Yes | ||
| sec_type | No | STK | |
| entry_type | Yes | ||
| stop_loss_price | Yes | ||
| primary_exchange | No | ||
| entry_limit_price | No | ||
| take_profit_price | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states the basic purpose, omitting important behavioral details like order lifecycle, risk, cancellation behavior, or that it places three separate orders.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise but overly minimal. Lacks structure such as sections or examples that would aid comprehension for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters, no output schema, and no annotations, the description is grossly insufficient. Does not explain the three orders, required relationships between parameters, or any usage constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description adds no parameter explanations. Schema description coverage is 0%, and the description does not clarify any of the 13 parameters, leaving the agent to infer meaning from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Place a bracket: entry + take-profit + stop-loss,' which is a specific verb+resource. It distinguishes from sibling tools like place_order and modify_order because it explicitly mentions three legs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings like place_order or modify_order. No mention of prerequisites, alternatives, or use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_orderC
Place a single-leg market/limit/stop/stop-limit order.
| Name | Required | Description | Default |
|---|---|---|---|
| tif | No | DAY | |
| action | Yes | ||
| symbol | Yes | ||
| account | No | ||
| currency | No | USD | |
| exchange | No | SMART | |
| quantity | Yes | ||
| sec_type | No | STK | |
| order_type | Yes | ||
| stop_price | No | ||
| limit_price | No | ||
| outside_rth | No | ||
| primary_exchange | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose behavioral traits such as whether the order is submitted immediately, if it returns an order ID, side effects, authentication needs, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At one sentence, it is short but underspecified. It lacks critical details, making it insufficient rather than concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters, no output schema, no annotations, and no parameter descriptions, the tool is complex but the description is bare minimum. Incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description adds no meaning beyond parameter names and types. For 13 parameters, it fails to explain fields like tif, stop_price, limit_price, or their relationships.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (place), resource (order), and scope (single-leg, market/limit/stop/stop-limit). This distinguishes it from sibling tools like place_bracket_order (multi-leg) and modify_order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like cancel_order or modify_order. Usage is implied as placing orders, but no when-not or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qualify_contractC
Resolve a symbol to a canonical contract with conid.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| currency | No | USD | |
| exchange | No | SMART | |
| sec_type | No | STK | |
| primary_exchange | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits such as idempotency, mutation, or authentication needs. It only states 'Resolve' without indicating whether the tool has side effects or if it's read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, but it is too brief given the complexity of the tool with five parameters. Conciseness alone does not justify lack of critical information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is insufficient for the tool's complexity (5 parameters, no output schema). It does not explain the return format, default parameter values, or the meaning of 'conid', leaving the agent with significant ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the input schema lacks property descriptions. The tool description does not compensate by explaining any parameters, leaving the agent without guidance on how to use fields like 'currency', 'exchange', 'sec_type', or 'primary_exchange'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves a symbol to a canonical contract with a conid, providing a specific verb and resource. However, it lacks differentiation from the sibling tool 'search_symbol', which may have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'search_symbol'. The description does not mention any preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_symbolC
Search IBKR for symbols matching a query.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| sec_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It only says 'search... matching a query' without details on pagination, case sensitivity, partial matches, or max results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence), which is efficient but at the expense of necessary detail. It could be restructured to front-load critical info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and two parameters, the description is incomplete. It omits return format, error handling, and behavioral traits needed for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does not clarify `sec_type` or any constraints beyond the names, missing the opportunity to aid correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (search) and resource (IBKR symbols). It implicitly distinguishes from sibling tools like qualify_contract or get_quote, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives (e.g., vs qualify_contract or get_quote). The description lacks context for optimal usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusA
Return connection state, trading mode, and gateway info.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool returns specific information but does not mention side effects, authentication needs, or operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence without any wasted words. It conveys the essential purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description is minimally adequate. However, it lacks details about return format or operational context, which could be helpful given the complexity of trading systems.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema coverage is 100% (trivially). The description adds value by explaining what information is returned, which is not apparent from the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Return connection state, trading mode, and gateway info,' using a specific verb and specifying the resource. This distinguishes it from sibling tools that deal with orders, quotes, or execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. While its purpose is clear, there is no mention of context, prerequisites, or explicit when-not-to-use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
v0.1.0- First observed
cancel_order - First observed
get_account_summary - First observed
get_executions - First observed
get_historical_bars - First observed
get_pnl - First observed
get_positions - First observed
get_quote - First observed
list_open_orders - First observed
modify_order - First observed
place_bracket_order - First observed
place_order - First observed
qualify_contract - First observed
search_symbol - First observed
status
TDQS
Scored across 14 tools
Each tool targets a distinct operation: order management (place, modify, cancel, list, bracket), data retrieval (account, positions, P&L, quotes, executions, historical bars), contract resolution (qualify, search), and connection status. No significant overlap.
All tools follow a consistent verb_noun pattern with snake_case (e.g., get_quote, place_order, list_open_orders). Naming is predictable and readable.
With 14 tools, the server is well-scoped for a trading API, covering orders, account info, market data, and contract resolution without being overloaded or sparse.
Core trading workflows are well-covered: full order lifecycle, account and position monitoring, market data, and contract lookup. Minor gaps like advanced order types or market depth are absent, but the essential surface is complete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Trade across 22+ exchanges and brokers from any MCP-capable AI agent, no install required.
Live prices, perps, prediction markets and a paper trading desk over one MCP.
Paper trading for AI: live quotes, indicators, and virtual trades on stocks, crypto, and forex.
Connect your AI to a funded trading account. Read & trade a simulated funded challenge.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables AI assistants to interact with Interactive Brokers trading accounts to retrieve market data, check positions, and place trades. Includes pre-configured IB Gateway and handles OAuth authentication automatically.14518215MIT
- FlicenseNot gradedqualityDmaintenanceEnables LLM clients to interact with Interactive Brokers Trader Workstation for automated trading workflows. Supports market data retrieval, portfolio management, and order execution through the TWS API.5-
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Interactive Brokers via the TWS API or IB Gateway to manage accounts, retrieve market data, and execute trades. It supports features like real-time market data, historical data queries, and order management for stocks and options.4-
- AlicenseAqualityAmaintenanceEnables AI agents to trade on Interactive Brokers: check quotes, balance, positions, and execute buy/sell orders (including fractional shares by dollar amount) via the Client Portal API.2013MIT