Skip to main content
Glama
IBKR MCP Server

IBKR MCP Server

IBKR MCP Server

An MCP server that gives AI agents 38 tools to query and trade through Interactive Brokers, built on ib_async and FastMCP.

WARNING

This project is designed and testedonly with IBKR PAPER accounts. Six tools can place, modify or cancel real orders (place_order, place_bracket_order, place_combo_order, modify_order, cancel_order, cancel_all_open_orders). Use at your own risk. Nothing here is financial advice, and the authors accept no liability for any losses.

Features

Orders (10)

  • place_order, place_bracket_order, place_combo_order — submit stock, option, bracket and combo orders

  • modify_order, cancel_order, cancel_all_open_orders — change or cancel orders

  • precheck_order — risk-only dry check (hours, notional, price distance, buying power, concentration)

  • get_live_orders, get_order_status, get_executions — order and fill tracking

Account and data (16)

  • get_positions, get_account_summary, get_portfolio_snapshot, get_pnl_per_position, get_daily_pnl_history, classify_positions_by_strategy

  • get_market_data, get_historical_bars, get_52w_context, get_option_chain

  • get_fundamentals, get_earnings_date, get_dividend_calendar (via yfinance)

  • get_exchange_hours, resolve_symbol, screen_universe

Options analytics (9)

  • get_market_data_with_greeks, bs_price, implied_volatility, greeks_from_price

  • prob_itm, expected_move

  • evaluate_multi_leg, pmcc_evaluator, roll_analyzer

Diagnostics (3)

  • healthcheck, get_recent_errors, get_server_info

Related MCP server: Open Paper Trading MCP

Safety by design

  • Live-price gate on place_order: the order is blocked if no live price is available, or if a limit price deviates from the mid/last/close reference by more than IBKR_ORDER_PRICE_TOLERANCE_PCT (default 2.0%).

  • precheck_order risk limits (configurable, evaluated when the tool is called):

    • IBKR_MAX_ORDER_NOTIONAL — max order notional, default 5000.0 (blocker)

    • IBKR_MAX_PRICE_DISTANCE_PCT — max limit-price distance from reference, default 0.10 (blocker)

    • IBKR_MAX_CONCENTRATION_PCT — max post-trade position share of net liquidation, default 0.20 (warning)

    • It also blocks when the exchange is closed or the order exceeds buying power.

  • Paper port by default: the server connects to 127.0.0.1:4002.

NOTE

TheIBKR_MAX_* limits are enforced by precheck_order, not inside the order-placing tools. The agent (or your prompt/policy) must call precheck_order before placing orders.

Quick start

Requirements: Python 3.11+, and IB Gateway or TWS running in paper mode with the API enabled (default Gateway paper port 4002).

git clone https://github.com/ettore-pedemonti/ibkr-mcp-server.git
cd ibkr-mcp-server
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python server.py   # speaks MCP over stdio

Example MCP client configuration (e.g. Claude Desktop):

{
  "mcpServers": {
    "ibkr": {
      "command": "/path/to/ibkr-mcp-server/.venv/bin/python",
      "args": ["/path/to/ibkr-mcp-server/server.py"],
      "env": {
        "IB_HOST": "127.0.0.1",
        "IB_PORT": "4002",
        "IB_CLIENT_ID": "10"
      }
    }
  }
}

Configuration

All settings are environment variables.

Variable

Default

Description

IB_HOST

127.0.0.1

IB Gateway / TWS host

IB_PORT

4002

API port (4002 = Gateway paper)

IB_CLIENT_ID

10

Client ID used by the server

IBKR_MAX_ORDER_NOTIONAL

5000.0

Max order notional in precheck_order

IBKR_MAX_PRICE_DISTANCE_PCT

0.10

Max limit-price distance from reference (fraction) in precheck_order

IBKR_MAX_CONCENTRATION_PCT

0.20

Concentration warning threshold (fraction of net liquidation)

IBKR_ORDER_PRICE_TOLERANCE_PCT

2.0

Max limit-price deviation (in %) enforced by the place_order price gate

IBKR_MARKET_DATA_TYPE

3

IB market data type (1 live, 2 frozen, 3 delayed, 4 delayed-frozen)

Testing

test_all_tools.py is a read-only regression script: it calls the read-only tools and skips the order-mutating ones. It requires a running IB Gateway/TWS in paper mode.

TEST_IB_CLIENT_ID=99 python test_all_tools.py

TEST_IB_CLIENT_ID (default 99) sets the client ID used by the script, so it does not clash with a running server.

Roadmap

  • Enforce the IBKR_MAX_* risk limits inside the order-placing tools, not only in precheck_order

  • Unit tests with a mocked ib_async

  • GitHub Actions CI

  • ruff linting and type hints

License

MIT

Tool Schema Changelog

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

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      C
      maintenance
      Enables 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.
      14
      138 npm
      228
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to interact with Interactive Brokers through 48 tools for market data, orders, account management, and more, via the MCP protocol.
      MIT
    • 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