IDA-instances-MCP
IDA-instances-MCP
Пользовательская сборка ida-pro-mcp: MCP-сервер, позволяющий MCP-клиентам управлять IDA Pro, — переработанная с упором на стабильность для размещения нескольких headless-экземпляров idalib (схема Ida-Instances).
Это форк ida-pro-mcp от mrexodia (MIT). Вся заслуга апстрима принадлежит Duncan Ogilvie и контрибьюторам; описанные ниже изменения поддерживаются в этом репозитории.
Что изменено
Усиление стабильности поверх апстрима v2.0.0:
Область | Изменение |
Безопасность данных | Очистка частичных баз учитывает владельца: никогда не удаляются файлы |
Надёжность сохранения |
|
Параллелизм | Блокировка супервизора больше не охватывает запуск воркеров (~120 с), проверки состояния (~2,5 с/сессию) или завершение устаревших воркеров — одно медленное открытие не может заморозить все сессии |
Устойчивость | Некорректный JSON-RPC через stdio возвращает |
Тайм-ауты | Тайм-аут прокси поднят с 30 с до 900 с и сделано настраиваемым ( |
Сеть | Гонка TOCTOU при порте воркера теперь повторяет попытки; записи SSE и завершение работы защищены блокировками; чтение CORS-политики кэшируется за пределами главного потока IDA |
Лимиты ресурсов | Журнал трассировки IDB ограничен 64 МБ ( |
Аутентификация | Каждый HTTP-запрос требует API-ключ экземпляра; выдается ровно один раз через |
Хостинговые конечные точки |
|
Завершение неактивных сессий | Сессии без обращений в течение |
Плавное завершение | При получении |
Самообновление | При запуске проверяются релизы GitHub; интерактивным сессиям предлагается автообновление в одно нажатие клавиши |
Настройки хостинга по умолчанию | Головной (headless) супервизор слушает на 0.0.0.0:9999; GUI-плагин также привязывается к 0.0.0.0 и теперь требует тот же API-ключ |
Related MCP server: idalib-mcp-headless
Требования
Linux, macOS или Windows
Python 3.11+ (используйте
idapyswitchвнутри IDA, чтобы версии совпадали)IDA Pro 8.3+ (рекомендуется 9.x). IDA Free не поддерживается
MCP-клиент (Claude Code, Cursor, Codex, OpenCode, VS Code, ...)
Установка
Активируйте idalib для вашего окружения uv:
# linux (server deployment)
uv run "/opt/idapro-9.x/idalib/python/py-activate-idalib.py"
# macos
uv run "/Applications/IDA Professional 9.x.app/Contents/MacOS/idalib/python/py-activate-idalib.py"
# windows
uv run "C:\Program Files\IDA Professional 9.x\idalib\python\py-activate-idalib.py"Headless-запускам дополнительно нужен каталог установки IDA в переменной IDADIR.
Запуск headless-супервизора (режим хостинга)
uv run idalib-mcp # serves http://0.0.0.0:9999/mcp (new default)При запуске генерируется API-ключ (или загружается с диска), и каждый запрос без него получает 401 Unauthorized — без исключений.
Получите ключ один раз с машины/сети, которой принадлежит экземпляр:
curl http://your-host:9999/key
# {"key": "3f2b..."} <- save it; this endpoint is now burned until restartКлюч сохраняется в
~/.idapro/mcp/api_key(права0600) и переживает перезагрузки;GET /keyвыдаёт ключ один раз за запуск сервераМожно переопределить через
IDA_MCP_API_KEY(или переместить его файл черезIDA_MCP_API_KEY_FILE)Все остальные конечные точки требуют его при каждом вызове:
Authorization: Bearer <key>
# or equivalently
X-API-Key: <key>Ключ никогда не логируется.
Хостинговые конечные точки
Endpoint | Auth | Назначение |
| нет | Проверка готовности: |
| ключ | Открытые базы данных, включая время последнего доступа |
| ключ | Потоковая загрузка бинарного содержимого тела запроса в |
Совершите:
# provisioning flow
while ! curl -sf http://10.0.0.4:9999/health >/dev/null; do sleep 1; done
KEY=$(curl -s http://10.0.0.4:9999/key | jq -r .key)
curl -H "Authorization: Bearer $KEY" --data-binary @sample.elf \
"http://10.0.0.4:9999/upload?filename=sample.elf"Полезные флаги:
uv run idalib-mcp --host 127.0.0.1 --port 9999 # override bind address
uv run idalib-mcp --max-workers 8 # concurrent databases (default 4, 0 = unlimited)
uv run idalib-mcp --unsafe # enable destructive/debugger tools (DANGEROUS)
uv run idalib-mcp --profile tools.txt # restrict worker tools to a profile file
uv run idalib-mcp --stdio # stdio transport instead of HTTP
uv run idalib-mcp path/to/binary # open a binary at startupИнструменты жизненного цикла сессии: idb_open, idb_list, idb_close — откройте одну базу данных за сессию; каждая сессия получает собственный изолированный процесс воркера.
Запуск GUI-прокси (интерактивный IDA)
Запустите плагин внутри IDA (Edit -> Plugins -> MCP или Ctrl+Alt+M), затем:
uv run ida-pro-mcp # stdio proxy, auto-discovers IDA
uv run ida-pro-mcp --transport http://127.0.0.1:9999 # serve HTTP insteadПодключение MCP-клиента
Универсальная JSON-конфигурация (HTTP-транспорт):
{
"mcpServers": {
"ida-instances": {
"url": "http://your-host:9999/mcp",
"headers": {
"Authorization": "Bearer <key-from-/key>"
}
}
}
}Claude Code:
claude mcp add --transport http ida-instances http://your-host:9999/mcp \
--header "Authorization: Bearer <key-from-/key>"Для GUI-прокси через stdio выполните uv run ida-pro-mcp --config и вставьте JSON в ваш клиент.
Конфигурация (переменные окружения)
Variable | Default | Смысл |
|
| Максимум секунд на открытие + автоматический анализ до завершения ( |
|
| Страховочный тайм-аут для каждого пересылаемого вызова инструмента |
|
| Тайм-аут GUI-прокси → апстрим IDA ( |
|
| Лимит журнала трассировки, хранящегося внутри IDB |
|
| Значение |
|
| Бюджеты проверки работоспособности |
|
| Количество минут до автоматического закрытия неактивной сессии ( |
|
| Лимит для тела запроса |
|
| Каталог хранения загруженных файлов |
| – / | Задать или переместить ключ экземпляра |
|
| Бюджет сохранения на базу / общий бюджет при завершении по |
| не задано | Установите |
Заметки безопасности: ключ закрывает все HTTP-конечные точки и супервизора, и два GUI-плагина (плагин может выполнять произвольный код через
py_eval, поэтому он защищён ключом даже на loopback). Это bearer-токен — любой, кто его получит, получит в распоряжение экземпляр; добавьте обратный TLS-прокси, если ключ уходит из вашей доверенной сети. Браузер может передать ключ через?key=<key>(удобно для/config.html).
Тестирование
IDADIR=/path/to/ida uv run ida-mcp-test tests/crackme03.elf -q
IDADIR=/path/to/ida uv run ida-mcp-test tests/typed_fixture.elf -q
IDADIR=/path/to/ida uv run ida-mcp-test tests/crackme03.elf -c api_analysis # one category
IDADIR=/path/to/ida uv run coverage run -m ida_pro_mcp.test tests/crackme03.elf -qЛицензия
MIT — унаследовано от апстрима ida-pro-mcp. Имена продуктов (IDA Pro, Hex-Rays) являются товарными знаками Hex-Rays SA; этот проект требует вашей собственной действующей лицензии IDA Pro.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for the Seline Analytics API
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Hosted MCP server for task-first delegation to remote workstations and workers.
Related MCP Servers
- AlicenseCqualityAmaintenanceMCP Server for automated reverse engineering with IDA Pro.431,602 PyPI12,620MIT
- FlicenseNot gradedqualityDmaintenanceA headless MCP server that manages multiple independent IDA Pro worker processes for reverse engineering, supporting database operations and debug tools.22-
- AlicenseNot gradedqualityDmaintenanceHeadless MCP server for IDA Pro enabling on-demand database loading and programmatic reverse engineering workflows via MCP tools.18MIT
- AlicenseNot gradedqualityAmaintenanceHeadless reverse engineering MCP server integrating IDA Pro for static analysis and x64dbg for dynamic debugging via controlled MCP tools.4GPL 3.0