轻量级模型上下文协议(MCP)服务器通过异步的ib_async库和FastMCP暴露只读的交互式经纪人数据(合约、历史数据、基本面数据、新闻、投资组合、账户)。非常适合将金融数据输入到LLM工作流程和自主代理中,同时保持交易禁用。
此目录包含一个MCP(模型上下文协议)服务器,该服务器封装了ib_async库,允许LLMs与交互式经纪人数据进行交互。
MCP服务器提供了以下工具供LLM交互使用:
交互式经纪人账户:您需要一个有效的IB账户
IB网关或TWS:下载并安装以下任一选项:
API配置:
配置 → API → 设置 并勾选“启用ActiveX和Socket客户端”127.0.0.1到可信IP地址git clone https://github.com/Hellek1/ib-mcp.git
cd ib-mcp
pip install poetry
poetry install
默认模式作为可启动的MCP服务器运行,通过标准输入/输出通信。这非常适合与Claude Desktop等MCP客户端集成。
# 使用默认设置(TWS在localhost:7497)
poetry run ib-mcp-server
# 自定义IB网关连接
poetry run ib-mcp-server --host 127.0.0.1 --port 4001 --client-id 1
# 显示所有选项的帮助
poetry run ib-mcp-server --help
HTTP模式运行一个持久的服务器,监听主机和端口,支持多客户端访问和网络连接。
# 本地HTTP服务器
poetry run ib-mcp-server --transport http --http-host 127.0.0.1 --http-port 8000
# 监听所有接口(用于Docker/远程访问)
poetry run ib-mcp-server --transport http --http-host 0.0.0.0 --http-port 8000
# 使用环境变量
IB_MCP_TRANSPORT=http IB_MCP_HTTP_HOST=127.0.0.1 IB_MCP_HTTP_PORT=8000 poetry run ib-mcp-server
安全提示:HTTP模式默认绑定到localhost(127.0.0.1)。对于远程访问,请放置在带有适当身份验证的反向代理后面,并使用受保护的网络。
--host: IB网关/TWS主机(默认:127.0.0.1)--port: IB网关/TWS端口(默认:TWS为7497,Gateway为4001)--client-id: 连接的唯一客户端ID(默认:1)--transport: 传输协议 - stdio(默认)或http--http-host: HTTP服务器主机(默认:127.0.0.1)--http-port: HTTP服务器端口(默认:8000)您也可以使用环境变量而不是标志:
IB_HOSTIB_PORTIB_CLIENT_IDIB_MCP_TRANSPORTIB_MCP_HTTP_HOSTIB_MCP_HTTP_PORT如果同时提供标志和环境变量,则标志优先。
| 使用场景 | STDIO | HTTP |
|---|---|---|
| Claude Desktop集成 | ✅ 推荐 | ❌ 不支持 |
| 本地单客户端使用 | ✅ 简单设置 | ⚠️ 过度复杂 |
| 多客户端访问 | ❌ 不可能 | ✅ 支持 |
| 远程/网络访问 | ❌ 不可能 | ✅ 支持 |
| Docker部署 | ✅ 简单 | ✅ 更灵活 |
| 生产使用 | ✅ 默认安全 | ⚠️ 需要认证/代理 |
docker build -t ib-mcp .
在macOS/Windows Docker Desktop上,可以通过host.docker.internal(已经是默认值)访问主机:
docker run --rm -it \
-e IB_HOST=host.docker.internal \
-e IB_PORT=7497 \
-e IB_CLIENT_ID=1 \
ghcr.io/hellek1/ib-mcp
在Linux上,您可能需要添加--add-host host.docker.internal:host-gateway并确保TWS/Gateway端口是可访问的:
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
如果需要,可以直接覆盖参数:
docker run --rm -it ghcr.io/hellek1/ib-mcp --host host.docker.internal --port 4001 --client-id 2
作为HTTP服务器运行以支持多客户端或远程访问:
# 本地访问
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
# 或使用命令行参数
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
HTTP服务器将在http://localhost:8000/mcp/可用。
服务器通过stdio使用MCP协议进行通信。它可以与兼容MCP的工具和LLM应用程序集成。
示例MCP客户端配置(例如Claude Desktop)使用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"
]
}
}
}
注意:
--add-host行(仅在Linux上需要)。对于HTTP模式,使用任何兼容MCP的HTTP客户端连接到服务器http://localhost:8000/mcp/。
lookup_contract(symbol, sec_type="STK", exchange="SMART", currency="USD")
ticker_to_conid(symbol, sec_type="STK", exchange="SMART", currency="USD")
get_historical_data(symbol, duration="1 M", bar_size="1 day", data_type="TRADES", exchange="SMART", currency="USD")
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")
get_fundamental_data(symbol, report_type="ReportsFinSummary", exchange="SMART", currency="USD")
可用报告类型:
ReportsFinSummary: 财务概要ReportsOwnership: 所有权信息ReportsFinStatements: 财务报表RESC: 研究报告CalendarReport: 日历事件get_portfolio(account="")
get_account_summary(account="")
get_positions(account="")
一旦通过MCP连接到LLM,您可以询问如下问题:
服务器会自动将XML格式的基本面数据转换为Markdown,以便在LLM交互中更易读。
服务器包含全面的错误处理,并会在以下情况下提供有意义的错误消息:
"无法连接到交互式经纪人"
"未找到合约"
"没有市场数据"
feat/xyzpoetry installpre-commit installpoetry run pytest -qpoetry version patch # 或 minor / major
poetry build
poetry publish --username __token__ --password <pypi-token>
git tag v$(poetry version -s)
git push --tags
根据BSD 3-Clause许可发布。欢迎贡献。