Skip to main content
Glama
ettore-pedemonti

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

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
    93 npm
    223
    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