mcp-ibkr
mcp-ibkr
Собственный MCP-сервер (Model Context Protocol) для подключения Claude Code к Interactive Brokers (IBKR), начиная с режима только чтение на аккаунте Paper Trading.
Статус проекта: 12 из 12 фаз завершено. См. раздел «Текущее состояние».
1. Что это за проект
Мост между Claude Code и IBKR: Claude Code запускает этот сервер, сервер предоставляет «инструменты» (функции с именем и описанием), и Claude использует их, когда пользователь запрашивает информацию об аккаунте, позициях или рынке. Ни один инструмент не общается с IBKR напрямую: все они проходят через централизованный слой интеграции.
Related MCP server: IB Portfolio Tracker MCP Server
2. Архитектура
Claude Code (cliente MCP)
│ stdio / JSON-RPC
v
Servidor MCP (src/server.py)
│
v
Tool Registry (src/tools/*)
│
v
Capa de integración IBKR (src/ibkr/*)
│ ib_async → socket TCP
v
IB Gateway (Paper Trading, puerto 4002)
│
v
Interactive Brokers3. Структура папок
mcp-ibkr/
├── src/
│ ├── server.py # Punto de entrada del servidor MCP
│ ├── ibkr/
│ │ └── connection.py # UNICO lugar que habla con ib_async / IB Gateway
│ ├── tools/
│ │ ├── registry.py # Registro central: conecta archivos de herramienta con el servidor
│ │ ├── account/ # Saldo, resumen de cuenta, verificar conexión
│ │ ├── market/ # Precio, cotización, históricos
│ │ ├── positions/ # Posiciones abiertas, P&L
│ │ └── orders/ # Consultar (activa) + crear/cancelar (ACTION, deshabilitadas)
│ ├── config/
│ │ └── settings.py # Carga .env, rechaza arrancar en config insegura
│ └── utils/
│ └── risk.py # RiskLevel: READ_ONLY / ACTION
├── tests/
├── .env.example
├── .gitignore
├── .mcp.json # Registro del servidor para Claude Code (scope project)
├── pyproject.toml # Configuracion de pytest
├── requirements.txt # Dependencias exactas (pip freeze)
└── README.md4. Требования
Python 3.11+ (проверено на 3.14).
Git.
curl(для загрузкиget-pip.pyв разделе 5 и установщика IB Gateway в разделе 6).Установленный IB Gateway с запущенной сессией Paper Trading (см. раздел 6).
5. Установка и настройка
cd ~/mcp-ibkr
# Crear entorno virtual aislado para este proyecto
python3 -m venv --without-pip .venv
# Instalar pip dentro del venv (no viene incluido con --without-pip)
curl -sS https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py
.venv/bin/python3 /tmp/get-pip.py
# Instalar dependencias del proyecto
.venv/bin/python3 -m pip install -r requirements.txt
# Configuración local (nunca se sube a Git)
cp .env.example .envПримечание о
requirements.txt: мы устанавливаем напрямую только 4 пакета (mcp,ib_async,python-dotenv,pytest), но в файле гораздо больше строк, потому чтоpip freezeвключает также зависимости этих пакетов (зависимости их зависимостей). Это нормально — это не значит, что проект использует все эти библиотеки напрямую.
Примечание: в системах Debian/Ubuntu
python3 -m venvсам по себе может не сработать, если отсутствует системный пакетpython3-venv(устанавливается командойsudo apt install python3-venv). Если у вас нет доступа кsudo, комбинация--without-pip+ ручная установкаpipвнутри venv (шаги выше) даёт такую же изолированную среду без необходимости прав администратора.
6. Подключение к IBKR (Paper Trading)
Установите IB Gateway (официальная загрузка,
stable-standalone):curl -o ibgateway-stable-standalone-linux-x64.sh \ https://download.interactivebrokers.com/installers/ibgateway/stable-standalone/ibgateway-stable-standalone-linux-x64.sh chmod u+x ibgateway-stable-standalone-linux-x64.sh ./ibgateway-stable-standalone-linux-x64.shОткройте его и войдите, явно выбрав «Paper Trading» (не «Live Trading»), используя свой логин/пароль Paper Trading.
Убедитесь, что порт API — 4002 (Paper). Подтвердить можно так:
ss -ltnp | grep 4002 # deberia aparecer un proceso "java" escuchandoСкопируйте
.env.exampleв.env(если ещё не сделали) и при необходимости скорректируйте значения, если ваша конфигурация отличается.
Почему это безопасно: src/config/settings.py отказывается запускаться,
если IBKR_PORT не равен точно 4002, а также если
IBKR_PAPER_TRADING_CONFIRMED не содержит true. Кроме того, соединение
(src/ibkr/connection.py) открывается с readonly=True, из-за чего IB
Gateway отклоняет любые попытки отправки ордеров на уровне API, даже
до того, как появятся инструменты для ордеров.
7. Настройка Claude Code
Сервер зарегистрирован в .mcp.json (в корне проекта) с областью
project. Это означает, что файл версионируется в Git, и любой, кто
откроет этот репозиторий в Claude Code, увидит предложенный сервер — но он
не запускается автоматически: Claude Code помечает его как «Pending approval»,
пока вы не откроете сессию внутри этой папки и не одобрите его.
cd ~/mcp-ibkr
claude # al iniciar, Claude Code te preguntará si confías en mcp-ibkrЧтобы в любой момент проверить статус сервера:
claude mcp list
claude mcp get mcp-ibkrЕсли когда-нибудь захотите его удалить:
claude mcp remove mcp-ibkr -s project8. Доступные инструменты
Инструмент | Категория | Риск | Статус | Описание |
|
| READ_ONLY | Активен | Подтверждает активное соединение с IB Gateway (Paper Trading) и перечисляет видимые аккаунты. |
|
| READ_ONLY | Активен | Чистая стоимость, доступные средства, buying power и маржа. |
|
| READ_ONLY | Активен | Последняя цена, bid/ask, предыдущее закрытие и объём акции. |
|
| READ_ONLY | Активен | Исторические OHLCV-свечи акции. |
|
| READ_ONLY | Активен | Открытые позиции (все или отфильтрованные по символу). |
|
| READ_ONLY | Активен | Дневной P&L, нереализованный и реализованный по аккаунту. |
|
| READ_ONLY | Активен | Список открытых ордеров и их статус. |
|
| ACTION | Отключён | Создаёт ордер MKT/LMT. Требует двойной активации (см. раздел 11). |
|
| ACTION | Отключён | Отменяет открытый ордер по |
9. Как добавить / изменить / удалить / отключить инструмент
Каждый инструмент — это один файл внутри src/tools/<категория>/,
имеющий следующий вид (см. src/tools/account/verificar_conexion_ibkr.py как реальный пример):
from mcp.types import ToolAnnotations
from src.utils.risk import RiskLevel
NAME = "mi_herramienta"
DESCRIPTION = "Que hace, cuando usarla, que devuelve, si modifica la cuenta."
ANNOTATIONS = ToolAnnotations(readOnlyHint=True, openWorldHint=True)
ENABLED = True
RISK_LEVEL = RiskLevel.READ_ONLY # o RiskLevel.ACTION si modifica algo
def mi_herramienta(parametro: str) -> str:
return "resultado"Функция должна называться так же, как NAME — так центральный реестр
(src/tools/registry.py) находит её автоматически. Если RISK_LEVEL —
ACTION, то помимо ENABLED = True также требуется IBKR_ENABLE_ACTION_TOOLS=true
в .env (см. раздел 11) — два независимых ключа, намеренно.
Об ANNOTATIONS: destructiveHint и idempotentHint имеют значение только
когда readOnlyHint=False (так указано в спецификации MCP) — поэтому для
инструмента только для чтения достаточно readOnlyHint и openWorldHint.
Добавляйте их только если RISK_LEVEL — ACTION, как в
src/tools/orders/crear_orden.py.
Добавление инструмента
Создайте файл в соответствующей категории (или создайте новую категорию, см. ниже).
Добавьте имя файла (без
.py) в списокTOOLSв__init__.pyэтой категории.Перезапустите сессию Claude Code, чтобы он его подхватил (Claude Code читает инструменты один раз, при запуске сервера;
claude mcp listтолько проверяет статус соединения, ничего не перезагружает).
Изменение инструмента
Отредактируйте напрямую его файл — DESCRIPTION, параметры функции,
внутреннюю логику и т.д. registry.py трогать не нужно.
Удаление инструмента
Удалите файл и уберите его имя из TOOLS в __init__.py его категории.
Отключение инструмента (без удаления)
Установите ENABLED = False в его файле. registry.py автоматически его пропустит.
Создание новой категории
Создайте папку src/tools/<категория>/ с __init__.py, определяющим
TOOLS: list[str] = [...], и добавьте имя категории в
CATEGORIES в src/tools/registry.py.
10. Тестирование
cd ~/mcp-ibkr
.venv/bin/python3 -m pytest tests/ -vtests/test_server.py— сервер запускается и предоставляет ожидаемые инструменты (то же самое, что увидел бы Claude Code при подключении); инструменты только для чтения не задают неприменимые аннотации; и каждый инструмент отвечает дружелюбным сообщением, если IBKR недоступен, вместо того чтобы допустить исключение.tests/test_settings.py— конфигурация отклоняет порт, отличный от 4002, и отсутствиеIBKR_PAPER_TRADING_CONFIRMED.tests/test_connection.py— слой соединения сериализует попытки подключения (с имитацией IBKR, реальный Gateway не требуется): если два инструмента вызываются почти одновременно, никогда не выполняется две попытки соединения параллельно.tests/test_risk_system.py— инструментыACTION(crear_orden,cancelar_orden) не регистрируются по умолчанию, а валидации ордера (количество, тип, цена) отклоняют недопустимые параметры.tests/test_ibkr_integration.py— реальное соединение с IB Gateway. Если Gateway не запущен, этот тест пропускается (не падает) — это ожидаемо, это не ошибка проекта.
Все тесты, связанные с ордерами, используют validar_parametros_orden
изолированно (без обращения к IBKR) или зависят от того, что crear_orden
отключён по умолчанию: ни один тест этого проекта не отправляет реальный
ордер, даже в Paper Trading.
11. От Paper Trading к Live Trading
⚠️ Live Trading пока не поддерживается этим проектом, и
crear_orden/cancelar_ordenотключены по умолчанию. Ниже объясняются уровни безопасности, а не приглашение активировать их не подумав.
Есть три независимых уровня, которые не позволяют случайно отправить реальный ордер:
Обязательный порт 4002 —
src/config/settings.pyотказывается запускаться, еслиIBKR_PORTне равен точно порту Paper Trading. В этой версии проекта нет ни одного пути в коде для использования порта 4001 (Live).Двойной ключ для инструментов ACTION —
crear_ordenиcancelar_ordenтребуютENABLED = Trueв своём собственном файле иIBKR_ENABLE_ACTION_TOOLS=trueв.env. Ни один из них не активирован по умолчанию. Оба читаются только при запуске сервера: если вы измените их при уже запущенном сервере, нужно перезапустить сессию Claude Code, чтобы изменение вступило в силу.Соединение только для чтения на уровне API — пока
IBKR_ENABLE_ACTION_TOOLSимеет значениеfalse,src/ibkr/connection.pyподключается сreadonly=True: IB Gateway отклоняет любой ордер, даже если кому-то удалось обойти два предыдущих уровня.
Если в будущем вы решите включить отправку ордеров в Paper Trading,
путь будет таким: пересмотреть и усилить валидации в
src/tools/orders/crear_orden.py, установить IBKR_ENABLE_ACTION_TOOLS=true
в .env и ENABLED = True в файлах ордеров. Поддержка реального
Live Trading не реализована и не планируется в этом проекте — потребовался
бы полностью отдельный обзор безопасности, прежде чем это рассматривать.
12. Текущее состояние
Фаза 1 — Архитектура и концепции
Фаза 2 — Минимальная структура проекта
Фаза 3 — Среда разработки
Фаза 4 — Минимальный MCP-сервер
Фаза 5 — Подключение Claude Code к MCP
Фаза 6 — Первый тестовый инструмент
Фаза 7 — Подключение к IB Gateway (Paper Trading)
Фаза 8 — Инструменты запросов
Фаза 9 — Система валидации и рисков
Фаза 10 — Инструменты ордеров (заблокированы)
Фаза 11 — Полное тестирование
Фаза 12 — Финальная документация
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables 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.14518212MIT
- AlicenseNot gradedqualityDmaintenanceConnects Claude AI to Interactive Brokers accounts to enable real-time portfolio tracking, position management, and historical market data retrieval. It also integrates financial news and sentiment analysis from multiple sources, including Finnhub and IB native feeds.MIT
- FlicenseCqualityBmaintenanceEnables interaction with Interactive Brokers through the TWS API for account management, market data, contract resolution, and order placement, with paper trading by default.141
- AlicenseNot gradedqualityBmaintenanceEnables read-only access to Interactive Brokers data including contracts, market data, news, fundamentals, and portfolio/account information for LLM workflows and autonomous agents.17BSD 3-Clause
Related MCP Connectors
Trade Robinhood through natural language in Claude Code.
Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jotorresro/mcp-ibkr'
If you have feedback or need assistance with the MCP directory API, please join our Discord server