IDA Pro MCP Fusion

io.github.rison1337由 GitHub 账号 rison1337 发布v2.0.0更新于 Oct 24, 2026

IDA Pro MCP fusion with cache queries and multi-binary headless analysis.

概览

AI 生成的概览

将 MCP 编码助手连接到本地已授权的 IDA Pro,用于反编译、交叉引用与类型分析、补丁修改以及带缓存的多二进制逆向分析。

可以做什么
通过单一 stdio 端点提供约 75 个面向 IDA 的工具:会话控制(idb_open、idb_batch_open、idb_list、idb_close、idb_save)、概览与反编译(survey_binary、decompile、disasm、analyze_function)、搜索与关系(find、find_bytes、search_text、xrefs_to、callees、callgraph、trace_data_flow)、类型与栈、数据库编辑(rename、set_comments、patch_asm、make_data)、签名,以及可选的调试器扩展。supervisor 可在隔离的无头 worker 中同时打开多个二进制,IDB 旁的 SQLite 缓存为函数、字符串、全局变量、导入、交叉引用和调用图边提供索引查询。
适用场景
适合让助手直接在 IDA Pro 中处理二进制:样本初筛、反编译与交叉引用追踪、在同一会话中对比多个二进制,或复用已缓存的分析结果而不必反复调用 IDA 的单线程 API。适用于逆向工程与恶意软件分析流程,而非一般编码任务。
运行要求
需要本地已授权的 IDA Pro 8.3 或更高版本(推荐 9.x),不支持 IDA Free。需要 Python 3.11+、uv/uvx,以及能启动本地 stdio 服务器的 MCP 客户端。需先用 py-activate-idalib.py 激活 IDA 的无头 Python 环境。仅限桌面运行;未声明认证、环境变量或请求头。
安装前请注意
修改类与任意 Python 工具被标记为 unsafe 且默认关闭;py_eval、py_exec_file、调试器控制和补丁操作可执行代码或永久更改 IDB,仅在可信客户端与输入下启用。服务器默认仅绑定回环地址,不应暴露到不可信网络。分析不可信二进制时,请使用与手动恶意软件分析相同的隔离环境。

安装

在 SourceWeft 中

  1. 打开 控制台中的 IDA Pro MCP Fusion,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[English — selected] [Открыть русскую версию]

[Latest release] [Tests] [Python 3.11 or newer] [IDA Pro 8.3 or newer] [MCP over stdio or HTTP] [MIT license]

One MCP endpoint. Many binaries. Persistent analysis context.

Quick start · Why Fusion · Architecture · Tools · Configuration · Development

What is Fusion?

IDA Pro MCP Fusion connects MCP-compatible coding agents to IDA Pro and turns a single connection into a practical reverse-engineering workspace. It combines live IDA analysis with a persistent SQLite index and a supervisor that can keep several binaries open in isolated headless workers.

Use it to decompile and disassemble functions, trace cross-references, query types, rename symbols, patch data, create signatures, inspect multiple samples, and reuse cached analysis without repeatedly walking IDA's single-threaded APIs.

[!IMPORTANT] This project requires a local, licensed installation of IDA Pro. IDA Free is not supported. The server does not provide IDA, Hex-Rays, or a hosted analysis service.

Why Fusion

CapabilityWhat it changes
⚡Persistent SQLite cacheFunctions, strings, globals, imports, xrefs, and call-graph edges remain queryable across repeated investigations.
◈Multi-binary supervisorOpen, address, and close several GUI or headless databases through one MCP endpoint.
⛓Persistent workersA later supervisor can discover and adopt an existing worker for the same database.
◎Batch-first workflowWarm analysis and build caches for a collection of samples with one idb_batch_open call.
⛨Controlled surfaceRead-only profiles, opt-in unsafe tools, worker limits, timeouts, and idle cleanup keep automation bounded.

The cache lives beside the IDB as <database>.mcp.sqlite. Freshness is checked against the IDB modification time and cache schema, so stale rows are not silently reused.

Quick start

1. Prerequisites

  • IDA Pro 8.3 or newer; IDA 9.x is recommended
  • Python 3.11 or newer
  • uv / uvx
  • Any MCP client that can launch a local stdio server

Install uv if it is not available:

bash
python -m pip install uv

Activate IDA's headless Python environment once:

powershell
# Windows — adjust the IDA version/path if neededuv run "C:\Program Files\IDA Professional 9.3\idalib\python\py-activate-idalib.py"
bash
# macOS — adjust the IDA version/path if neededuv run "/Applications/IDA Professional 9.3.app/Contents/MacOS/idalib/python/py-activate-idalib.py"

2. Add the MCP server

The recommended setup runs the latest code directly from this repository:

json
{  "mcpServers": {    "ida-pro-mcp-fusion": {      "command": "uvx",      "args": [        "--from",        "git+https://github.com/rison1337/ida-pro-mcp-fusion",        "idalib-mcp",        "--stdio"      ]    }  }}

Claude Code:

bash
claude mcp add ida-pro-mcp-fusion -- uvx --from git+https://github.com/rison1337/ida-pro-mcp-fusion idalib-mcp --stdio

Or download the packaged MCP bundle from the latest release.

3. Open a database

Ask the connected agent to start with:

python
idb_open(    "C:/samples/target.exe",    preferred_session_id="target",    build_caches=True,    init_hexrays=True,)

Every analysis call then names its database explicitly:

python
survey_binary(database="target")decompile("main", database="target")xrefs_to("WinMain", database="target")cache_callgraph_hotspots(limit=25, database="target")

Architecture

  1. Your MCP client starts idalib-mcp over stdio or HTTP.
  2. The supervisor creates or adopts one worker per binary and enforces the worker limit.
  3. Tool calls include a database session ID, so requests are routed to the correct IDB.
  4. IDA performs live decompilation and mutation work; cache tools serve indexed queries from the sidecar SQLite database.
  5. Workers remain discoverable on the host and clean themselves up after their idle TTL.

GUI databases can participate too. idb_open supports four routing modes:

ModeBehaviour
prefer_headlessUse or create an idalib worker. This is the default.
force_headlessNever adopt a running GUI instance.
prefer_guiAdopt a matching GUI instance, otherwise create a worker.
force_guiAdopt a matching GUI instance or launch IDA GUI.

Multi-binary workflow

Open a small collection and keep every session available:

python
idb_batch_open(    [        "C:/samples/loader.exe",        "C:/samples/payload.dll",        "C:/samples/helper.dll",    ],    session_prefix="case42",    refresh_cache=True,    cache_include_xrefs=True,)

For a large corpus, build each cache and release its worker immediately:

python
idb_batch_open(    ["C:/corpus/a.exe", "C:/corpus/b.exe", "C:/corpus/c.exe"],    close_after_cache=True,    retry_without_auto_analysis_on_timeout=True,)

Useful session controls:

python
idb_list()idb_close(database="case42_1_loader")

Tool surface

The codebase registers 75 IDA-facing analysis tools, plus the supervisor's multi-session controls. The exact number visible to a client intentionally varies: debugger tools are an extension, dangerous operations are disabled unless explicitly enabled, and a profile can expose a smaller allowlist.

AreaRepresentative tools
Sessionsidb_open, idb_batch_open, idb_list, idb_close, idb_save
Survey & decompilationsurvey_binary, decompile, disasm, analyze_function, analyze_component
Search & relationshipsfind, find_bytes, search_text, xrefs_to, callees, callgraph, trace_data_flow
Persistent cachecache_status, refresh_cache, cache_entity_query, cache_xrefs, cache_callgraph_hotspots, cache_find_regex
Types & stackdeclare_type, type_inspect, set_type, infer_types, stack_frame, declare_stack
Database editingrename, set_comments, define_func, define_code, patch_asm, make_data
Signaturesmake_signature, make_signature_for_function, make_signature_for_range, find_xref_signatures
Debugger extensiondbg_start, dbg_bps, dbg_regs, dbg_stacktrace, dbg_read, dbg_write

The nine cache-specific tools are:

text
cache_status              refresh_cachecache_refresh_if_stale    cache_list_funcscache_entity_query        cache_xrefscache_callgraph           cache_callgraph_hotspotscache_find_regex

Configuration

Worker pool

bash
uvx --from git+https://github.com/rison1337/ida-pro-mcp-fusion \  idalib-mcp --stdio --max-workers 4
Option / variablePurpose
--max-workers NMaximum simultaneous database workers; 0 means unlimited. Default: 4.
IDA_MCP_MAX_WORKERSEnvironment default for the worker limit.
IDA_MCP_OPEN_TIMEOUTMaximum auto-analysis open time in seconds. Default: 1800; 0 disables the limit.
IDA_MCP_LOAD_TIMEOUTMaximum load-only open time in seconds. Default: 300; 0 disables the limit.

Restricted profiles

Expose only a curated set of tools:

bash
idalib-mcp --stdio --profile profiles/readonly.txt

Two ready-to-use profiles are included:

Management tools remain available so sessions can still be opened and inspected.

HTTP transport

bash
idalib-mcp --host 127.0.0.1 --port 8745

IDA GUI bridge:

bash
ida-pro-mcp --transport http://127.0.0.1:8744/sse

To install the GUI plugin and generate client configuration interactively:

bash
python -m pip install https://github.com/rison1337/ida-pro-mcp-fusion/archive/refs/heads/main.zipida-pro-mcp --install

Restart IDA and the MCP client after installation.

Safety notes

  • The server binds to loopback by default. Do not expose it to an untrusted network.
  • Mutating and arbitrary-Python tools are marked unsafe and are not enabled by default.
  • py_eval, py_exec_file, debugger controls, and patching operations can execute code or permanently change an IDB. Enable them only for trusted clients and inputs.
  • Analyze untrusted binaries inside the same isolation boundary you would use for manual malware analysis.

Enable unsafe worker tools only when the workflow requires them:

bash
idalib-mcp --stdio --unsafe

Troubleshooting

uvx is not recognized

Install uv with python -m pip install uv, open a new terminal, and confirm with uvx --version.

Python / IDA version mismatch

Run Hex-Rays idapyswitch, select a Python 3.11+ installation, then activate idalib again with py-activate-idalib.py.

A database call says that database is required

Call idb_list() and pass the returned session_id as database=. Paths and filenames are not accepted in place of a session ID.

The worker limit has been reached

Close an unused session with idb_close, raise --max-workers, or use close_after_cache=True for corpus indexing.

Development

Clone the repository and run the platform-independent test suite:

bash
git clone https://github.com/rison1337/ida-pro-mcp-fusion.gitcd ida-pro-mcp-fusionpython -m pip install pytest jsonschema "mcp>=1.0" "tomli-w>=1.0"python -m pytest -q tests

Run the IDA-backed suite in an activated IDA environment:

bash
uv run ida-mcp-test tests/typed_fixture.elf -q

New IDA tools live in src/ida_pro_mcp/ida_mcp/api_*.py and register through the @tool decorator. Supervisor and worker lifecycle tests live under tests/.

Project identity and credits

Fusion Edition is maintained by rison1337.

The project builds on the MIT-licensed mrexodia/ida-pro-mcp codebase. Its persistent cache and headless orchestration also incorporate ideas developed in QiuChenly/ida-pro-mcp-enhancement and winmin/ida-headless-mcp. Attribution is retained here and in the source history; Fusion's packaging, cache tooling, batch workflow, session lifecycle, and public identity are maintained in this repository.

License

Distributed under the MIT License. IDA Pro and Hex-Rays are trademarks of Hex-Rays SA and are not included with this project.


Русский

[Open English version] [Русский — выбран]

Одна MCP-точка. Много бинарников. Контекст анализа сохраняется.

Быстрый старт · Почему Fusion · Архитектура · Инструменты · Настройка

Что такое Fusion?

IDA Pro MCP Fusion подключает MCP-совместимых агентов к IDA Pro и превращает одно соединение в полноценное рабочее место для реверсинга. Живой анализ IDA объединён с постоянным SQLite-индексом и supervisor-процессом, который может держать несколько бинарников в изолированных headless-воркерах.

Можно декомпилировать и дизассемблировать функции, исследовать перекрёстные ссылки, типы и граф вызовов, переименовывать символы, патчить данные, создавать сигнатуры и повторно использовать уже построенный анализ.

[!IMPORTANT] Нужна локальная лицензированная установка IDA Pro. IDA Free не поддерживается. Сервер не содержит IDA, Hex-Rays и не отправляет бинарники во внешний сервис.

Почему Fusion

ВозможностьЧто это даёт
⚡Постоянный SQLite-кэшФункции, строки, глобальные переменные, импорты, xref и call graph доступны между запусками.
◈Мульти-бинарный supervisorНесколько GUI- или headless-баз управляются через одну MCP-точку.
⛓Живущие воркерыСледующее подключение может найти и принять уже запущенный worker для той же базы.
◎Пакетный анализОткрытие образцов и построение кэшей выполняется одним idb_batch_open.
⛨Контролируемый интерфейсRead-only-профили, лимит воркеров, тайм-ауты и opt-in для опасных инструментов.

Кэш лежит рядом с IDB в файле <database>.mcp.sqlite. Актуальность проверяется по времени изменения IDB и версии схемы, поэтому устаревшие данные не выдаются незаметно.

Быстрый старт

1. Что понадобится

  • IDA Pro 8.3 или новее; рекомендуется IDA 9.x
  • Python 3.11 или новее
  • uv / uvx
  • MCP-клиент, который умеет запускать локальный stdio-сервер

Установите uv, если его ещё нет:

bash
python -m pip install uv

Один раз активируйте headless Python от IDA:

powershell
# Windows — при необходимости измените версию и путь к IDAuv run "C:\Program Files\IDA Professional 9.3\idalib\python\py-activate-idalib.py"
bash
# macOS — при необходимости измените версию и путь к IDAuv run "/Applications/IDA Professional 9.3.app/Contents/MacOS/idalib/python/py-activate-idalib.py"

2. Добавьте MCP-сервер

Рекомендуемая конфигурация запускает код напрямую из этого репозитория:

json
{  "mcpServers": {    "ida-pro-mcp-fusion": {      "command": "uvx",      "args": [        "--from",        "git+https://github.com/rison1337/ida-pro-mcp-fusion",        "idalib-mcp",        "--stdio"      ]    }  }}

Для Claude Code:

bash
claude mcp add ida-pro-mcp-fusion -- uvx --from git+https://github.com/rison1337/ida-pro-mcp-fusion idalib-mcp --stdio

Готовый MCPB-пакет доступен в последнем релизе.

3. Откройте базу

Попросите подключённого агента начать так:

python
idb_open(    "C:/samples/target.exe",    preferred_session_id="target",    build_caches=True,    init_hexrays=True,)

Каждый следующий вызов анализа получает явный ID базы:

python
survey_binary(database="target")decompile("main", database="target")xrefs_to("WinMain", database="target")cache_callgraph_hotspots(limit=25, database="target")

Архитектура

  1. MCP-клиент запускает idalib-mcp через stdio или HTTP.
  2. Supervisor создаёт или принимает по одному worker-процессу на каждый бинарник.
  3. Каждый вызов содержит database, поэтому запрос попадает в нужную IDB-сессию.
  4. IDA выполняет живой анализ и изменения, а cache-инструменты читают индекс из SQLite.
  5. Воркеры остаются обнаруживаемыми на компьютере и завершаются после периода простоя.

idb_open поддерживает четыре режима:

РежимПоведение
prefer_headlessИспользовать или создать idalib-worker. Режим по умолчанию.
force_headlessНе принимать запущенный GUI-процесс.
prefer_guiПринять подходящий GUI, а если его нет — создать worker.
force_guiПринять GUI или запустить новый процесс IDA.

Работа с несколькими бинарниками

Открыть несколько образцов и оставить все сессии доступными:

python
idb_batch_open(    [        "C:/samples/loader.exe",        "C:/samples/payload.dll",        "C:/samples/helper.dll",    ],    session_prefix="case42",    refresh_cache=True,    cache_include_xrefs=True,)

Для большого корпуса можно построить кэш и сразу освободить worker:

python
idb_batch_open(    ["C:/corpus/a.exe", "C:/corpus/b.exe", "C:/corpus/c.exe"],    close_after_cache=True,    retry_without_auto_analysis_on_timeout=True,)

Управление сессиями:

python
idb_list()idb_close(database="case42_1_loader")

Инструменты

В кодовой базе зарегистрировано 75 инструментов анализа IDA, а supervisor добавляет управление мульти-бинарными сессиями. Видимый клиенту список намеренно меняется: debugger-инструменты являются расширением, опасные операции отключены без явного разрешения, а профиль может оставить только выбранные имена.

ОбластьПримеры
Сессииidb_open, idb_batch_open, idb_list, idb_close, idb_save
Обзор и декомпиляцияsurvey_binary, decompile, disasm, analyze_function, analyze_component
Поиск и связиfind, find_bytes, search_text, xrefs_to, callees, callgraph, trace_data_flow
Постоянный кэшcache_status, refresh_cache, cache_entity_query, cache_xrefs, cache_callgraph_hotspots, cache_find_regex
Типы и стекdeclare_type, type_inspect, set_type, infer_types, stack_frame, declare_stack
Изменение базыrename, set_comments, define_func, define_code, patch_asm, make_data
Сигнатурыmake_signature, make_signature_for_function, make_signature_for_range, find_xref_signatures
Debugger-расширениеdbg_start, dbg_bps, dbg_regs, dbg_stacktrace, dbg_read, dbg_write

Настройка

Пул воркеров

bash
uvx --from git+https://github.com/rison1337/ida-pro-mcp-fusion \  idalib-mcp --stdio --max-workers 4
Параметр / переменнаяНазначение
--max-workers NМаксимум одновременно работающих баз; 0 — без лимита. По умолчанию 4.
IDA_MCP_MAX_WORKERSЗначение лимита по умолчанию из окружения.
IDA_MCP_OPEN_TIMEOUTМаксимальное время автоанализа при открытии в секундах. По умолчанию 1800.
IDA_MCP_LOAD_TIMEOUTМаксимальное время загрузки без автоанализа. По умолчанию 300.

Ограниченные профили

Оставить только выбранные инструменты:

bash
idalib-mcp --stdio --profile profiles/readonly.txt

HTTP

bash
idalib-mcp --host 127.0.0.1 --port 8745

GUI-мост:

bash
ida-pro-mcp --transport http://127.0.0.1:8744/sse

Для установки GUI-плагина:

bash
python -m pip install https://github.com/rison1337/ida-pro-mcp-fusion/archive/refs/heads/main.zipida-pro-mcp --install

После установки перезапустите IDA и MCP-клиент.

Безопасность

  • По умолчанию сервер слушает только loopback. Не открывайте его в недоверенную сеть.
  • Изменяющие и произвольные Python-инструменты помечены как unsafe и выключены по умолчанию.
  • py_eval, py_exec_file, debugger-команды и патчинг могут выполнять код или менять IDB.
  • Непроверенные бинарники анализируйте в той же изоляции, что и при ручном malware analysis.

Включить unsafe-инструменты можно явно:

bash
idalib-mcp --stdio --unsafe

Решение проблем

uvx не найден

Установите uv командой python -m pip install uv, откройте новый терминал и проверьте uvx --version.

Несовместимая версия Python или IDA

Запустите idapyswitch, выберите Python 3.11+, затем снова выполните py-activate-idalib.py.

Ошибка о том, что нужен database

Вызовите idb_list() и передайте возвращённый session_id как database=. Пути и имена файлов вместо ID сессии не принимаются.

Достигнут лимит воркеров

Закройте неиспользуемую сессию через idb_close, увеличьте --max-workers или используйте close_after_cache=True.

Разработка

bash
git clone https://github.com/rison1337/ida-pro-mcp-fusion.gitcd ida-pro-mcp-fusionpython -m pip install pytest jsonschema "mcp>=1.0" "tomli-w>=1.0"python -m pytest -q tests

Для тестов, которым нужна сама IDA:

bash
uv run ida-mcp-test tests/typed_fixture.elf -q

Новые инструменты находятся в src/ida_pro_mcp/ida_mcp/api_*.py и регистрируются через @tool. Тесты supervisor и lifecycle — в tests/.

Проект и авторство

Fusion Edition поддерживается rison1337.

Проект основан на MIT-кодовой базе mrexodia/ida-pro-mcp. Постоянный кэш и headless-оркестрация также используют идеи из QiuChenly/ida-pro-mcp-enhancement и winmin/ida-headless-mcp. Атрибуция сохранена в README и истории исходников; упаковка Fusion, cache-инструменты, batch workflow и lifecycle сессий поддерживаются в этом репозитории.

Лицензия

Проект распространяется по MIT License. IDA Pro и Hex-Rays — товарные знаки Hex-Rays SA и не входят в состав проекта.

来源:README.md,提交 3bd6c5c

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v2.0.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分