Skip to main content
Glama
Interactive Brokers MCP Server

Interactive Brokers MCP Server

by code-rabi

Interactive Brokers MCP Server

DISCLAIMER: This is an unofficial, community-developed MCP server and is NOT affiliated with or endorsed by Interactive Brokers. This software is in Alpha state and may not work perfectly.

A Model Context Protocol (MCP) server that provides integration with Interactive Brokers' trading platform. This server allows AI assistants to interact with your IB account to retrieve market data, check positions, and place trades.

🔒 Security Notice

Showcase of Interactive Brokers MCP

Related MCP server: Interactive Brokers MCP Server

Features

  • Interactive Brokers API Integration: Full trading capabilities including account management, position tracking, real-time market data, and order management (market, limit, and stop orders)

  • Flex Query Support: Execute Flex Queries to retrieve account statements, trade confirmations, and historical data. Queries are automatically remembered for easy reuse

  • Flexible Authentication: Choose between browser-based OAuth authentication or headless mode with credentials for automated environments, including fully automated TOTP 2FA override. See TOTP 2FA Strategy Document for detailed configuration and important risk warnings.

  • Simple Setup: Run directly with npx - no Docker or additional installations required. Includes pre-configured IB Gateway and Java runtime for all platforms

Security Notice

IMPORTANT WARNINGS:

  • Financial Risk: Trading involves substantial risk of loss. Always test with paper trading first.

  • Security: This software handles sensitive financial data. Only run locally, never on public servers.

  • No Warranty: This unofficial software comes with no warranties. Use at your own risk.

  • Not Financial Advice: This tool is for automation only, not financial advice.

Prerequisites

No additional installations required for mainstream platforms. This package includes:

  • Pre-configured IB Gateway for all platforms (Linux, macOS, Windows)

  • Java Runtime Environment (JRE) for macOS, Windows, and standard Linux builds

  • Automatic first-run musl JRE download for Alpine-based containers (e.g. node:lts-alpine, supergateway)

  • All necessary dependencies

You only need:

  • Interactive Brokers account (paper or live trading)

  • Node.js 18+ (for running the MCP server)

Quick Start

Add this MCP server to your Cursor/Claude configuration:

{
  "mcpServers": {
    "interactive-brokers": {
      "command": "npx",
      "args": ["-y", "interactive-brokers-mcp"]
    }
  }
}

When you first use the server, a web browser window will automatically open for the Interactive Brokers OAuth authentication flow. Log in with your IB credentials to authorize the connection.

Headless Mode Configuration

For automated environments or when you prefer not to use a browser for authentication, you can enable headless mode by configuring it in your MCP server configuration:

{
  "mcpServers": {
    "interactive-brokers": {
      "command": "npx",
      "args": ["-y", "interactive-brokers-mcp"],
      "env": {
        "IB_HEADLESS_MODE": "true",
        "IB_USERNAME": "your_ib_username",
        "IB_PASSWORD_AUTH": "your_ib_password"
      }
    }
  }
}

In headless mode, the server will automatically authenticate using your credentials without opening a browser window. This is useful for:

  • Automated trading systems

  • Server environments without a display

  • CI/CD pipelines

  • Situations where browser interaction is not desired

Important: Even in headless mode, Interactive Brokers may still require two-factor authentication (2FA). When 2FA is triggered, the headless authentication will wait up to 60 seconds for you to complete the 2FA process through your configured method (mobile app, SMS, etc.) before returning an AUTHENTICATION_PENDING response. Wait for approval to complete, then check account info again.

To enable paper trading, add "IB_PAPER_TRADING": "true" to your environment variables:

{
  "mcpServers": {
    "interactive-brokers": {
      "command": "npx",
      "args": ["-y", "interactive-brokers-mcp"],
      "env": {
        "IB_HEADLESS_MODE": "true",
        "IB_USERNAME": "your_ib_username",
        "IB_PASSWORD_AUTH": "your_ib_password",
        "IB_PAPER_TRADING": "true"
      }
    }
  }
}

Security Note: Store credentials securely and never commit them to version control. Consider using environment variable files or secure credential management systems.

Flex Query Configuration (Optional)

To use Flex Queries for retrieving account statements and historical data, you need to configure your Flex Web Service Token:

{
  "mcpServers": {
    "interactive-brokers": {
      "command": "npx",
      "args": ["-y", "interactive-brokers-mcp"],
      "env": {
        "IB_FLEX_TOKEN": "your_flex_token_here"
      }
    }
  }
}

How to Get Your Flex Token:

  1. Log in to Interactive Brokers Account Management

  2. Go to Settings → Account Settings

  3. Navigate to Reporting → Flex Web Service

  4. Generate or retrieve your Flex Web Service Token

For detailed instructions on enabling Flex Web Service, see the IB Flex Web Service Guide.

Creating Flex Queries:

  1. Go to Reports → Flex Queries in Account Management

  2. Create or customize your query template

  3. Click the info icon next to your query to find its Query ID

For a complete guide on creating and customizing Flex Queries, see the IB Flex Queries Guide.

Note: When you execute a Flex Query for the first time, the MCP server automatically saves it with its name from the API. Future executions can reference the query by either its ID or its saved name.

Flex Query Features:

  • Automatic Memory: When you execute a Flex Query, it's automatically saved for future use

  • Easy Reuse: Previously used queries are remembered - no need to copy query IDs repeatedly

  • Friendly Names: Optionally provide a friendly name when first executing a query

  • Forget Queries: Remove queries you no longer need with the forget_flex_query tool

Configuration Variables

Feature

Environment Variable

Command Line Argument

Username

IB_USERNAME

--ib-username

Password

IB_PASSWORD_AUTH

--ib-password-auth

Headless Mode

IB_HEADLESS_MODE

--ib-headless-mode

Paper Trading

IB_PAPER_TRADING

--ib-paper-trading

Auth Timeout

IB_AUTH_TIMEOUT

--ib-auth-timeout

Auth Wait Seconds

IB_AUTH_WAIT_SECONDS

--ib-auth-wait-seconds

Auth Poll Seconds

IB_AUTH_POLL_SECONDS

--ib-auth-poll-seconds

Force standalone bundled gateway

IB_FORCE_STANDALONE_GATEWAY

N/A

Flex Token

IB_FLEX_TOKEN

N/A

Read-only mode

IB_READ_ONLY_MODE

--ib-read-only-mode

2FA Strategy

IB_TWO_FA_STRATEGY

N/A

TOTP Secret Key

IB_TOTP_SECRET

N/A

Login page selector overrides

IB_SELECTOR_USERNAME, IB_SELECTOR_PASSWORD, IB_SELECTOR_LOGIN_SUBMIT

N/A

TOTP form selector overrides

IB_SELECTOR_TOTP_INPUT, IB_SELECTOR_TOTP_SUBMIT

N/A

See the TOTP 2FA Strategy Document for details on the 2FA and selector-override variables.

Gateway Lifecycle

On startup, the MCP first probes reachable local Gateway endpoints on the configured port and common Client Portal Gateway ports. If a healthy existing Gateway is found, the MCP attaches to it and does not start another bundled Gateway.

When no suitable existing Gateway is reachable, the MCP starts the bundled Java Gateway as a durable detached process. Runtime coordination files are stored under ib-gateway/.runtime/:

  • gateway-session.json records the MCP-managed Gateway pid, port, version, and log paths.

  • gateway-session.lock prevents two MCP processes from starting duplicate managed Gateways at the same time.

  • gateway.stdout.log and gateway.stderr.log receive the Gateway process output.

Normal MCP shutdown detaches from the Gateway and leaves it running so later MCP runs can reuse it. If IB_FORCE_STANDALONE_GATEWAY=true is set, the MCP skips unrelated external Gateway discovery, but it still reuses or coordinates through the durable MCP-managed session metadata and lock files.

To reset the managed Gateway session, stop the Gateway process recorded in ib-gateway/.runtime/gateway-session.json, then remove ib-gateway/.runtime/gateway-session.json and any stale ib-gateway/.runtime/gateway-session.lock. The MCP automatically removes stale metadata when the recorded pid no longer exists.

Available MCP Tools

Trading & Account Management

Tool

Description

get_account_info

Retrieve account information and balances

get_positions

Get current positions and P&L

get_market_data

Real-time market data for symbols

place_order

Place market, limit, or stop orders (only if read-only mode is disabled)

get_order_status

Check order execution status

get_live_orders

Get all live/open orders for monitoring

Flex Queries (Requires IB_FLEX_TOKEN)

Tool

Description

get_flex_query

Execute a Flex Query and retrieve statements (auto-saves for reuse)

list_flex_queries

List all previously used Flex Queries

forget_flex_query

Remove a saved Flex Query from memory

Troubleshooting

Authentication Problems:

  • Use the web interface that opens automatically

  • Complete any required two-factor authentication

  • Try paper trading mode if live trading fails

Gateway Discovery Problems:

  • If another IB Gateway is already listening on a local port but should not be reused, set IB_FORCE_STANDALONE_GATEWAY=true

  • Existing gateways are only reused when the MCP process can reach them over HTTPS; otherwise the bundled standalone gateway is started on an available port

  • For MCP-managed Gateway startup issues, inspect ib-gateway/.runtime/gateway.stdout.log, ib-gateway/.runtime/gateway.stderr.log, and ib-gateway/.runtime/gateway-session.json

  • To clear a stale managed startup lock, confirm no MCP process is currently starting Gateway, then remove ib-gateway/.runtime/gateway-session.lock

Support

  • This Server: Open an issue in this repository.

License

MIT License - see LICENSE file for details.

Thanks to our contributors

A big thank you to everyone who has contributed to making this project better.

Available Tools

14 tools
activate_alertA

Activate a previously created alert. Usage: { "accountId": "<id>", "alertId": "<alertId>" }.

Inputs: alertId (required), accountId (required).

authenticateA

Authenticate with Interactive Brokers. Usage: { "confirm": true }.

Inputs: confirm (required).

confirm_orderB

Manually confirm an order that requires confirmation. Usage: { "replyId": "742a95a7-55f6-4d67-861b-2fd3e2b61e3c", "messageIds": ["o10151", "o10153"] }.

Inputs: replyId (required), messageIds (required).

create_alertC

Create a new trading alert. Usage: { "accountId": "<id>", "alertRequest": { "alertName": "Price Alert", "conditions": [{ "conidex": "265598", "type": "price", "operator": ">", "triggerMethod": "last", "value": "150" }] } }.

Inputs: accountId (required), alertRequest (required).

delete_alertC

Delete an alert. Usage: { "accountId": "<id>", "alertId": "<alertId>" }.

Inputs: alertId (required), accountId (required).

get_account_infoB

Get account information and balances. Usage: { "confirm": true }.

Inputs: confirm (required).

get_alertsC

Get all trading alerts for an account. Usage: { "accountId": "<id>" }.

Inputs: accountId (required).

get_live_ordersA

Get all live/open orders for monitoring and validation. Usage: {} for all accounts or { "accountId": "<id>" } for a specific account. This is the recommended way to validate that market orders were executed successfully after placing them.

Inputs: accountId.

get_market_dataA

Get real-time market data. Usage: { "symbol": "AAPL" } or { "symbol": "AAPL", "exchange": "NASDAQ" }.

Inputs: symbol (required), exchange.

get_option_chainA

Get option expirations and strikes for an underlying symbol. Usage: { "symbol": "AAPL" } or { "symbol": "AAPL", "exchange": "SMART" }.

Inputs: symbol (required), exchange.

get_order_statusA

Get the status of a specific order. Usage: { "orderId": "12345" }.

Inputs: orderId (required).

get_positionsC

Get current positions. Usage: {} or { "accountId": "<id>" }.

Inputs: accountId (required).

place_orderA

Place a trading order. Examples:

  • Market buy: { "accountId":"abc","symbol":"AAPL","action":"BUY","orderType":"MKT","quantity":1 }

  • Limit sell: { "accountId":"abc","symbol":"AAPL","action":"SELL","orderType":"LMT","quantity":1,"price":185.5 }

  • Stop sell: { "accountId":"abc","symbol":"AAPL","action":"SELL","orderType":"STP","quantity":1,"stopPrice":180 }

  • Option buy: { "accountId":"abc","symbol":"AAPL","secType":"OPT","expiry":"JAN27","strike":200,"right":"C","action":"BUY","orderType":"LMT","quantity":1,"price":4.5 }

  • Option by conid: { "accountId":"abc","conid":123456789,"secType":"OPT","action":"BUY","orderType":"MKT","quantity":1 }

  • Suppress confirmations: { "accountId":"abc","symbol":"AAPL","action":"BUY","orderType":"MKT","quantity":1,"suppressConfirmations":true }

Inputs: action (required), quantity (required), accountId (required), orderType (required), +11 more.

resolve_option_conidA

Resolve a specific option contract conid. Usage: { "symbol": "AAPL", "expiry": "JAN27", "strike": 200, "right": "C" } or add { "exchange": "SMART" }.

Inputs: right (required), expiry (required), strike (required), symbol (required), +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 14 tools

    Disambiguation4/5

    Most tools have distinct purposes (alerts vs orders vs account data), but get_live_orders and get_order_status could be confused since both relate to order monitoring. get_alerts vs create/activate/delete_alert are clear, and get_option_chain vs resolve_option_conid are related but distinct enough.

    Naming Consistency4/5

    The naming follows a consistent verb_noun pattern (get_, create_, activate_, delete_, place_, confirm_). Minor deviation: 'authenticate' lacks a noun object, and 'resolve_option_conid' is slightly more verbose than the others, but overall the pattern is predictable.

    Tool Count5/5

    14 tools is well-scoped for a trading platform server covering authentication, account info, market data, orders, and alerts. Each tool addresses a distinct workflow need without excessive overlap or bloat.

    Completeness4/5

    The server covers core trading workflows: authentication, account/position queries, market data, order placement/status/confirmation, and alert lifecycle (create, activate, delete, list). Missing order cancellation/modification and position closing are notable gaps, but the primary use cases are covered.

    Maintenance

    ActivityInactive
    ResponsivenessMixed handling

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides AI models with secure access to Interactive Brokers trading data and functionality, enabling account management, market data retrieval, and trading operations through natural language interactions.
      18
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Connects AI assistants to Interactive Brokers for intelligent portfolio management, options analysis, risk monitoring, and automated trading strategy suggestions. Enables real-time account tracking, Greeks calculations, option chain analysis, and playbook-based risk adjustments through natural language.
      5
      -
    • A
      license
      A
      quality
      D
      maintenance
      Enables 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.
      20
      14
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Gives AI assistants real-time access to Interactive Brokers accounts via the Client Portal Web API, with 26 read-only tools for portfolio, market data, options, and scanner.
      32
      8 npm
      2
      MIT