Skip to main content
Glama
Claude-Reverser

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:

Область

Изменение

Безопасность данных

Очистка частичных баз учитывает владельца: никогда не удаляются файлы .id0/.id1/.id2/.nam/.til, принадлежащие другому активному экземпляру, а при недоступности определения владельца выполняется безопасный отказ

Надёжность сохранения

idb_save выполняется с бюджетом 600 с (было 60 с); idb_close отказывается убивать воркер после неудачного сохранения вместо молчаливого отбрасывания изменений

Параллелизм

Блокировка супервизора больше не охватывает запуск воркеров (~120 с), проверки состояния (~2,5 с/сессию) или завершение устаревших воркеров — одно медленное открытие не может заморозить все сессии

Устойчивость

Некорректный JSON-RPC через stdio возвращает -32700/-32600 вместо падения прокси

Тайм-ауты

Тайм-аут прокси поднят с 30 с до 900 с и сделано настраиваемым (IDA_MCP_PROXY_TIMEOUT), так что длинные декомпиляции не «проваливаются» на стороне клиента, пока продолжают выполняться на стороне сервера

Сеть

Гонка TOCTOU при порте воркера теперь повторяет попытки; записи SSE и завершение работы защищены блокировками; чтение CORS-политики кэшируется за пределами главного потока IDA

Лимиты ресурсов

Журнал трассировки IDB ограничен 64 МБ (IDA_MCP_TRACE_MAX_MB) с обрезкой слишком больших аргументов/результатов; очередь при сбоях сброса ограничена

Аутентификация

Каждый HTTP-запрос требует API-ключ экземпляра; выдается ровно один раз через GET /key, после чего сжигается. Ключ хранится на диске и переживает перезапуски и перезагрузки

Хостинговые конечные точки

GET /health (неаутентифицированная проверка готовности), GET /sessions (открытые базы данных + время последнего доступа), POST /upload (прямая загрузка бинарного файла с ограничением размера)

Завершение неактивных сессий

Сессии без обращений в течение IDA_MCP_IDLE_TIMEOUT минут автоматически закрываются (с сохранением)

Плавное завершение

При получении SIGTERM/SIGINT перед выходом сохраняется каждая открытая база данных — больше нет потерянной работы при pct stop

Самообновление

При запуске проверяются релизы 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 не поддерживается

  • uv

  • 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

Назначение

GET /health

нет

Проверка готовности: {"status":"ok","uptime":N,"sessions":N} — опрашивайте, а не спите

GET /sessions

ключ

Открытые базы данных, включая время последнего доступа

POST /upload?filename=NAME

ключ

Потоковая загрузка бинарного содержимого тела запроса в IDA_MCP_UPLOAD_DIR; возвращает путь для idb_open

Совершите:

# 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

Смысл

IDA_MCP_OPEN_TIMEOUT

1800

Максимум секунд на открытие + автоматический анализ до завершения (0 = без ограничений)

IDA_MCP_WORKER_CALL_TIMEOUT

900

Страховочный тайм-аут для каждого пересылаемого вызова инструмента

IDA_MCP_PROXY_TIMEOUT

900

Тайм-аут GUI-прокси → апстрим IDA (0 = без ограничений)

IDA_MCP_TRACE_MAX_MB

64

Лимит журнала трассировки, хранящегося внутри IDB

IDA_MCP_MAX_WORKERS

4

Значение --max-workers по умолчанию

IDA_MCP_HEALTH_TCP_TIMEOUT / IDA_MCP_HEALTH_RPC_TIMEOUT

2.0 / 10.0

Бюджеты проверки работоспособности

IDA_MCP_IDLE_TIMEOUT

60

Количество минут до автоматического закрытия неактивной сессии (0 отключает)

IDA_MCP_MAX_UPLOAD_MB

100

Лимит для тела запроса POST /upload

IDA_MCP_UPLOAD_DIR

~/.idapro/mcp/uploads

Каталог хранения загруженных файлов

IDA_MCP_API_KEY / IDA_MCP_API_KEY_FILE

– / ~/.idapro/mcp/api_key

Задать или переместить ключ экземпляра

IDA_MCP_SHUTDOWN_SAVE_TIMEOUT / IDA_MCP_SHUTDOWN_SAVE_BUDGET

30 / 120

Бюджет сохранения на базу / общий бюджет при завершении по SIGTERM

IDA_MCP_NO_UPDATE_CHECK

не задано

Установите 1, чтобы отключить проверку релизов GitHub

Заметки безопасности: ключ закрывает все 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.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    C
    maintenance
    A headless MCP server that manages multiple independent IDA Pro worker processes for reverse engineering, supporting database operations and debug tools.
    12
  • A
    license
    Not graded
    quality
    D
    maintenance
    Headless MCP server for IDA Pro enabling on-demand database loading and programmatic reverse engineering workflows via MCP tools.
    18
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server that enables AI agents to control IDA Pro instances via Unix-socket supervisor, providing tools for decompilation, disassembly, and Python scripting.
    3

View all related MCP servers

Related MCP Connectors

  • MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.

  • MCP server for ScanMalware.com URL scanning, malware detection, and analysis.

  • MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.

View all MCP Connectors

Latest Blog Posts

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/Claude-Reverser/IDA-instances-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server