Skip to main content

Model Context Protocol (MCP) server exposing Interactive Brokers data via ib_async + FastMCP

Project description

IB Async MCP Server

CI

Lightweight Model Context Protocol (MCP) server exposing read-only Interactive Brokers data (contracts, historical data, fundamentals, news, portfolio, account) via the asynchronous ib_async library and FastMCP. Ideal for feeding financial data into LLM workflows and autonomous agents while keeping trading disabled.

Overview

This directory contains an MCP (Model Context Protocol) server that wraps the ib_async library to allow LLMs to interact with Interactive Brokers data.

Features

The MCP server provides the following tools for LLM interaction:

1. Contract Lookup and Conversion

  • lookup_contract: Look up contract details by ticker symbol and optional exchange/currency
  • ticker_to_conid: Convert ticker symbol to contract ID (conid)

2. Market Data

  • get_historical_data: Retrieve historical market data with configurable duration, bar size, and data type

3. News

  • get_news: Retrieve current news articles for a contract
  • get_historical_news: Retrieve historical news articles within a date range

4. Fundamental Data

  • get_fundamental_data: Retrieve fundamental data including financial summaries, ownership, financial statements, and more

5. Portfolio and Account Information

  • get_portfolio: Retrieve portfolio positions and details
  • get_account_summary: Retrieve account summary information
  • get_positions: Retrieve current positions

Prerequisites

  1. Interactive Brokers Account: You need an active IB account

  2. IB Gateway or TWS: Download and install either:

  3. API Configuration:

    • Enable API access in TWS/Gateway: Configure → API → Settings and check "Enable ActiveX and Socket Clients"
    • Set appropriate port (default: 7497 for TWS, 4001 for Gateway)
    • Add 127.0.0.1 to trusted IPs if connecting locally

Installation

From source (development)

git clone https://github.com/Hellek1/ib-mcp.git
cd ib-mcp
pip install poetry
poetry install

Usage

Running the MCP Server

STDIO Mode (Default)

The default mode runs as a spawnable MCP server communicating via standard input/output. This is ideal for integration with MCP clients like Claude Desktop.

# Using default settings (TWS on localhost:7497)
poetry run ib-mcp-server

# Custom IB Gateway connection
poetry run ib-mcp-server --host 127.0.0.1 --port 4001 --client-id 1

# Help with all options
poetry run ib-mcp-server --help

HTTP Mode

HTTP mode runs a persistent server that listens on a host and port, enabling multi-client access and network connectivity.

# Local HTTP server
poetry run ib-mcp-server --transport http --http-host 127.0.0.1 --http-port 8000

# Listen on all interfaces (for Docker/remote access) 
poetry run ib-mcp-server --transport http --http-host 0.0.0.0 --http-port 8000

# Using environment variables
IB_MCP_TRANSPORT=http IB_MCP_HTTP_HOST=127.0.0.1 IB_MCP_HTTP_PORT=8000 poetry run ib-mcp-server

Security Note: HTTP mode binds to localhost (127.0.0.1) by default. For remote access, place behind a reverse proxy with proper authentication and use a protected network.

Command Line Options

IB Connection

  • --host: IB Gateway/TWS host (default: 127.0.0.1)
  • --port: IB Gateway/TWS port (default: 7497 for TWS, use 4001 for Gateway)
  • --client-id: Unique client ID for the connection (default: 1)

Transport Configuration

  • --transport: Transport protocol - stdio (default) or http
  • --http-host: HTTP server host (default: 127.0.0.1)
  • --http-port: HTTP server port (default: 8000)

Environment Variables

You can also use environment variables instead of flags:

IB Connection

  • IB_HOST
  • IB_PORT
  • IB_CLIENT_ID

Transport

  • IB_MCP_TRANSPORT
  • IB_MCP_HTTP_HOST
  • IB_MCP_HTTP_PORT

Flags override environment variables if both are provided.

When to Use STDIO vs HTTP

Use Case STDIO HTTP
Claude Desktop integration ✅ Recommended ❌ Not supported
Local single-client usage ✅ Simple setup ⚠️ Overkill
Multi-client access ❌ Not possible ✅ Supported
Remote/network access ❌ Not possible ✅ Supported
Docker deployment ✅ Simple ✅ More flexible
Production usage ✅ Secure by default ⚠️ Needs auth/proxy

Docker

Build

docker build -t ib-mcp .

Run (connect to TWS running on host)

STDIO Mode (Default)

On macOS/Windows Docker Desktop you can reach host via host.docker.internal (already the default):

docker run --rm -it \
   -e IB_HOST=host.docker.internal \
   -e IB_PORT=7497 \
   -e IB_CLIENT_ID=1 \
   ghcr.io/hellek1/ib-mcp

On Linux you may need to add --add-host host.docker.internal:host-gateway and ensure the TWS/Gateway port is accessible:

docker run --rm -it \
   --add-host host.docker.internal:host-gateway \
   -e IB_HOST=host.docker.internal \
   -e IB_PORT=7497 \
   ghcr.io/hellek1/ib-mcp

Override arguments directly if preferred:

docker run --rm -it ghcr.io/hellek1/ib-mcp --host host.docker.internal --port 4001 --client-id 2

HTTP Mode

Run as an HTTP server for multi-client or remote access:

# Local access
docker run --rm -it -p 8000:8000 \
   -e IB_HOST=host.docker.internal \
   -e IB_PORT=7497 \
   -e IB_MCP_TRANSPORT=http \
   -e IB_MCP_HTTP_HOST=0.0.0.0 \
   -e IB_MCP_HTTP_PORT=8000 \
   ghcr.io/hellek1/ib-mcp

# Or using command line arguments
docker run --rm -it -p 8000:8000 \
   ghcr.io/hellek1/ib-mcp \
   --host host.docker.internal --port 7497 \
   --transport http --http-host 0.0.0.0 --http-port 8000

The HTTP server will be available at http://localhost:8000/mcp/.

MCP Client Integration

STDIO Mode

The server communicates via stdio using the MCP protocol. It can be integrated with MCP-compatible tools and LLM applications.

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

{
   "mcpServers": {
      "ib-async": {
         "command": "docker",
         "args": [
            "run",
            "--rm",
            "--add-host","host.docker.internal:host-gateway",
            "-e","IB_HOST=host.docker.internal",
            "-e","IB_PORT=7497",
            "-e","IB_CLIENT_ID=1",
            "ghcr.io/hellek1/ib-mcp:latest"
         ]
      }
   }
}

Notes:

  1. Remove the --add-host line on macOS/Windows Docker Desktop (it's only needed on Linux).

HTTP Mode

For HTTP mode, connect to the server at http://localhost:8000/mcp/ using any MCP-compatible HTTP client.

Available Tools

Contract Lookup

lookup_contract(symbol, sec_type="STK", exchange="SMART", currency="USD")
ticker_to_conid(symbol, sec_type="STK", exchange="SMART", currency="USD")

Market Data

get_historical_data(symbol, duration="1 M", bar_size="1 day", data_type="TRADES", exchange="SMART", currency="USD")

News

get_news(symbol, provider_codes="", exchange="SMART", currency="USD")
get_historical_news(symbol, start_date, end_date, provider_codes="", max_count=10, exchange="SMART", currency="USD")

Fundamentals

get_fundamental_data(symbol, report_type="ReportsFinSummary", exchange="SMART", currency="USD")

Available report types:

  • ReportsFinSummary: Financial summary
  • ReportsOwnership: Ownership information
  • ReportsFinStatements: Financial statements
  • RESC: Research reports
  • CalendarReport: Calendar events

Portfolio & Account

get_portfolio(account="")
get_account_summary(account="")
get_positions(account="")

Example Usage

Once connected to an LLM through MCP, you can ask questions like:

  • "Look up the contract details for AAPL"
  • "Get the last month of daily historical data for TSLA"
  • "What are the recent news articles for Microsoft?"
  • "Show me the financial summary for Google"
  • "What positions do I currently have in my portfolio?"

Data Formats

XML to Markdown Conversion

The server automatically converts XML-formatted fundamental data to markdown for better readability in LLM interactions.

Error Handling

The server includes comprehensive error handling and will provide meaningful error messages when:

  • IB connection fails
  • Invalid symbols are requested
  • Market data is not available
  • Authentication issues occur

Troubleshooting

Connection Issues

  1. "Cannot connect to Interactive Brokers"

    • Ensure TWS/Gateway is running
    • Check that API is enabled in settings
    • Verify port numbers match (7497 for TWS, 4001 for Gateway)
    • Check firewall settings
  2. "No contract found"

    • Verify symbol spelling
    • Try different exchanges (NYSE, NASDAQ vs SMART)
    • Check if security type is correct
  3. "No market data"

    • Ensure you have appropriate market data subscriptions
    • Check if markets are open for real-time data
    • Try delayed data mode if real-time is not available

Performance Tips

  1. Use specific exchanges when possible instead of "SMART" routing
  2. Limit historical data requests to reasonable time ranges
  3. Cache contract IDs for frequently accessed symbols

Security Considerations

  • The MCP server operates in read-only mode - no order placement capabilities
  • Credentials are handled by the IB Gateway/TWS application
  • The server only accesses data you have permission to view in your IB account

Contributing

  1. Fork & branch: feat/xyz
  2. Install dev deps: poetry install
  3. Activate pre-commit: pre-commit install
  4. Run tests: poetry run pytest -q
  5. Open a PR with a concise description.

Release (maintainers)

poetry version patch  # or minor / major
poetry build
poetry publish --username __token__ --password <pypi-token>
git tag v$(poetry version -s)
git push --tags

Support & References


Licensed under the BSD 3-Clause License. Contributions welcome.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ib_mcp-0.2.7.tar.gz (16.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ib_mcp-0.2.7-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file ib_mcp-0.2.7.tar.gz.

File metadata

  • Download URL: ib_mcp-0.2.7.tar.gz
  • Upload date:
  • Size: 16.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ib_mcp-0.2.7.tar.gz
Algorithm Hash digest
SHA256 08af453df715eb2d23a078ceee3baf6a3a34e47b862fed5ff2ec5648e03bcb9b
MD5 96f114c5d41eaf1dffcfd9c692847d0a
BLAKE2b-256 ae1a2880ab2522a1a432070933dda33b596d4e5a1ac2d4afeea8c7d5d3b27e67

See more details on using hashes here.

Provenance

The following attestation bundles were made for ib_mcp-0.2.7.tar.gz:

Publisher: publish.yml on Hellek1/ib-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ib_mcp-0.2.7-py3-none-any.whl.

File metadata

  • Download URL: ib_mcp-0.2.7-py3-none-any.whl
  • Upload date:
  • Size: 13.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ib_mcp-0.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 79692f6532b019053499c74341efb5b63acf0e26d1a831f467fb9efcdd84f4b3
MD5 3afcc6066a0fb651f8bf0029dfab5615
BLAKE2b-256 b06e6f7572210eeca730034a95a100a7a7e3ae2d2a19c07f1b4da7843c003dc6

See more details on using hashes here.

Provenance

The following attestation bundles were made for ib_mcp-0.2.7-py3-none-any.whl:

Publisher: publish.yml on Hellek1/ib-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page