IDA Pro MCP Fusion

Fusión de IDA Pro MCP para ingeniería inversa con 76 herramientas, caché SQLite y análisis headless de IDA multi-binario.

Documentación

IDA Pro MCP Fusion — multi-binary reverse engineering through MCP

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

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

Un solo endpoint MCP. Muchos binarios. Contexto de análisis persistente.

Inicio rápido · Por qué Fusion · Arquitectura · Herramientas · Configuración · Desarrollo

¿Qué es Fusion?

IDA Pro MCP Fusion conecta agentes de codificación compatibles con MCP a IDA Pro y convierte una única conexión en un espacio de trabajo práctico de ingeniería inversa. Combina el análisis en vivo de IDA con un índice SQLite persistente y un supervisor que puede mantener varios binarios abiertos en workers headless aislados.

Úsalo para descompilar y desensamblar funciones, rastrear referencias cruzadas, consultar tipos, renombrar símbolos, parchear datos, crear firmas, inspeccionar múltiples muestras y reutilizar análisis en caché sin recorrer repetidamente las APIs de un solo hilo de IDA.

[!IMPORTANT] Este proyecto requiere una instalación local con licencia de IDA Pro. IDA Free no es compatible. El servidor no proporciona IDA, Hex-Rays ni un servicio de análisis alojado.

Por qué Fusion

CapacidadQué cambia
⚡Caché SQLite persistenteLas funciones, cadenas, globales, importaciones, xrefs y aristas del grafo de llamadas permanecen consultables entre investigaciones repetidas.
◈Supervisor multi-binarioAbre, direcciona y cierra varias bases de datos GUI o headless a través de un único endpoint MCP.
⛓Workers persistentesUn supervisor posterior puede descubrir y adoptar un worker existente para la misma base de datos.
◎Flujo de trabajo orientado a lotesCalienta el análisis y las cachés para una colección de muestras con una sola llamada a idb_batch_open.
⛨Superficie controladaPerfiles de solo lectura, herramientas inseguras opcionales, límites de workers, tiempos de espera y limpieza por inactividad mantienen la automatización acotada.

La caché reside junto al IDB como <database>.mcp.sqlite. La frescura se verifica contra el tiempo de modificación del IDB y el esquema de la caché, por lo que las filas obsoletas no se reutilizan silenciosamente.

Inicio rápido

1. Requisitos previos

  • IDA Pro 8.3 o más reciente; se recomienda IDA 9.x
  • Python 3.11 o más reciente
  • uv / uvx
  • Cualquier cliente MCP que pueda lanzar un servidor stdio local

Instala uv si no está disponible:

python -m pip install uv

Activa el entorno Python headless de IDA una vez:

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

2. Añade el servidor MCP

La configuración recomendada ejecuta el código más reciente directamente desde este repositorio:

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

Claude Code:

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

O descarga el paquete MCP empaquetado desde la última versión.

3. Abre una base de datos

Pide al agente conectado que comience con:

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

Cada llamada de análisis nombra entonces su base de datos explícitamente:

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

Arquitectura

Architecture of IDA Pro MCP Fusion
  1. Tu cliente MCP inicia idalib-mcp a través de stdio o HTTP.
  2. El supervisor crea o adopta un worker por binario y aplica el límite de workers.
  3. Las llamadas a herramientas incluyen un ID de sesión database, por lo que las solicitudes se enrutan al IDB correcto.
  4. IDA realiza trabajo de descompilación y mutación en vivo; las herramientas de caché sirven consultas indexadas desde la base de datos SQLite lateral.
  5. Los workers permanecen descubribles en el host y se limpian solos después de su TTL de inactividad.

Las bases de datos GUI también pueden participar. idb_open admite cuatro modos de enrutamiento:

ModoComportamiento
prefer_headlessUsar o crear un worker idalib. Este es el predeterminado.
force_headlessNunca adoptar una instancia GUI en ejecución.
prefer_guiAdoptar una instancia GUI coincidente; de lo contrario, crear un worker.
force_guiAdoptar una instancia GUI coincidente o lanzar la GUI de IDA.

Flujo de trabajo multi-binario

Abre una pequeña colección y mantén cada sesión disponible:

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,
)

Para un corpus grande, construye cada caché y libera su worker inmediatamente:

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,
)

Controles de sesión útiles:

idb_list()
idb_close(database="case42_1_loader")

Superficie de herramientas

El código base registra 75 herramientas de análisis orientadas a IDA, además de los controles multi-sesión del supervisor. El número exacto visible para un cliente varía intencionalmente: las herramientas de depuración son una extensión, las operaciones peligrosas están deshabilitadas a menos que se habiliten explícitamente, y un perfil puede exponer una lista de permitidos más pequeña.

ÁreaHerramientas representativas
Sesionesidb_open, idb_batch_open, idb_list, idb_close, idb_save
Reconocimiento y descompilaciónsurvey_binary, decompile, disasm, analyze_function, analyze_component
Búsqueda y relacionesfind, find_bytes, search_text, xrefs_to, callees, callgraph, trace_data_flow
Caché persistentecache_status, refresh_cache, cache_entity_query, cache_xrefs, cache_callgraph_hotspots, cache_find_regex
Tipos y piladeclare_type, type_inspect, set_type, infer_types, stack_frame, declare_stack
Edición de base de datosrename, set_comments, define_func, define_code, patch_asm, make_data
Firmasmake_signature, make_signature_for_function, make_signature_for_range, find_xref_signatures
Extensión de depuradordbg_start, dbg_bps, dbg_regs, dbg_stacktrace, dbg_read, dbg_write

Las nueve herramientas específicas de caché son:

cache_status              refresh_cache
cache_refresh_if_stale    cache_list_funcs
cache_entity_query        cache_xrefs
cache_callgraph           cache_callgraph_hotspots
cache_find_regex

Configuración

Grupo de workers

uvx --from git+https://github.com/rison1337/ida-pro-mcp-fusion \
  idalib-mcp --stdio --max-workers 4
Opción / variablePropósito
--max-workers NMáximo de workers de base de datos simultáneos; 0 significa ilimitado. Predeterminado: 4.
IDA_MCP_MAX_WORKERSValor predeterminado de entorno para el límite de workers.
IDA_MCP_OPEN_TIMEOUTTiempo máximo de apertura de autoanálisis en segundos. Predeterminado: 1800; 0 desactiva el límite.
IDA_MCP_LOAD_TIMEOUTTiempo máximo de apertura solo de carga en segundos. Predeterminado: 300; 0 desactiva el límite.

Perfiles restringidos

Expón solo un conjunto seleccionado de herramientas:

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

Se incluyen dos perfiles listos para usar:

Las herramientas de gestión permanecen disponibles para que las sesiones aún puedan abrirse e inspeccionarse.

Transporte HTTP

idalib-mcp --host 127.0.0.1 --port 8745

Puente GUI de IDA:

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

Para instalar el plugin GUI y generar la configuración del cliente de forma interactiva:

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

Reinicia IDA y el cliente MCP después de la instalación.

Notas de seguridad

  • El servidor se vincula a loopback por defecto. No lo expongas a una red no confiable.
  • Las herramientas de mutación y Python arbitrario están marcadas como inseguras y no están habilitadas por defecto.
  • py_eval, py_exec_file, los controles del depurador y las operaciones de parcheo pueden ejecutar código o cambiar permanentemente un IDB. Habilítalas solo para clientes y entradas confiables.
  • Analiza binarios no confiables dentro del mismo límite de aislamiento que usarías para el análisis manual de malware.

Habilita las herramientas inseguras de workers solo cuando el flujo de trabajo lo requiera:

idalib-mcp --stdio --unsafe

Solución de problemas

uvx no se reconoce

Instala uv con python -m pip install uv, abre una nueva terminal y confirma con uvx --version.

Desajuste de versión de Python / IDA

Ejecuta Hex-Rays idapyswitch, selecciona una instalación de Python 3.11+ y luego activa idalib nuevamente con py-activate-idalib.py.

Una llamada a la base de datos dice que se requiere database

Llama a idb_list() y pasa el session_id devuelto como database=. Las rutas y nombres de archivo no se aceptan en lugar de un ID de sesión.

Se ha alcanzado el límite de workers

Cierra una sesión no utilizada con idb_close, aumenta --max-workers o usa close_after_cache=True para la indexación de corpus.

Desarrollo

Clona el repositorio y ejecuta la suite de pruebas independiente de la plataforma:

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

Ejecuta la suite respaldada por IDA en un entorno IDA activado:

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

Las nuevas herramientas de IDA viven en src/ida_pro_mcp/ida_mcp/api_*.py y se registran a través del decorador @tool. Las pruebas del ciclo de vida del supervisor y los workers viven bajo tests/.

Identidad del proyecto y créditos

Fusion Edition es mantenido por rison1337.

El proyecto se basa en el código base mrexodia/ida-pro-mcp con licencia MIT. Su caché persistente y orquestación headless también incorporan ideas desarrolladas en QiuChenly/ida-pro-mcp-enhancement y winmin/ida-headless-mcp. La atribución se conserva aquí y en el historial de fuentes; el empaquetado de Fusion, las herramientas de caché, el flujo de trabajo por lotes, el ciclo de vida de sesiones y la identidad pública se mantienen en este repositorio.

Licencia

Distribuido bajo la Licencia MIT. IDA Pro y Hex-Rays son marcas comerciales de Hex-Rays SA y no se incluyen con este proyecto.


Русский

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 для опасных инструментов.
El caché se encuentra junto al IDB en el archivo <database>.mcp.sqlite. Su vigencia se verifica según la hora de modificación del IDB y la versión del esquema, por lo que los datos obsoletos no se entregan de forma inadvertida.

Inicio rápido

1. Qué necesitarás

  • IDA Pro 8.3 o posterior; se recomienda IDA 9.x
  • Python 3.11 o posterior
  • uv / uvx
  • Un cliente MCP que pueda ejecutar un servidor stdio local

Instale uv si aún no lo tiene:

python -m pip install uv

Active una vez el Python headless de IDA:

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

2. Agregue el servidor MCP

La configuración recomendada ejecuta el código directamente desde este repositorio:

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

Para Claude Code:

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

Un paquete MCPB listo está disponible en la última versión.

3. Abra la base

Pida al agente conectado que comience así:

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

Cada llamada de análisis posterior recibe un ID de base explícito:

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

Arquitectura

Архитектура IDA Pro MCP Fusion
  1. El cliente MCP inicia idalib-mcp a través de stdio o HTTP.
  2. El supervisor crea o acepta un proceso worker por cada binario.
  3. Cada llamada contiene database, por lo que la solicitud llega a la sesión IDB correcta.
  4. IDA ejecuta análisis y cambios en vivo, mientras que las herramientas de caché leen el índice desde SQLite.
  5. Los workers permanecen detectables en el equipo y finalizan tras un período de inactividad.

idb_open admite cuatro modos:

ModoComportamiento
prefer_headlessUsar o crear idalib-worker. Modo predeterminado.
force_headlessNo aceptar un proceso GUI en ejecución.
prefer_guiAceptar un GUI adecuado; si no existe, crear un worker.
force_guiAceptar un GUI o iniciar un nuevo proceso de IDA.

Trabajo con múltiples binarios

Abra varias muestras y mantenga todas las sesiones disponibles:

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,
)

Para un corpus grande, puede construir el caché y liberar el worker de inmediato:

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,
)

Gestión de sesiones:

idb_list()
idb_close(database="case42_1_loader")

Herramientas

En la base de código están registradas 75 herramientas de análisis de IDA, y el supervisor agrega la gestión de sesiones multi-binario. La lista visible para el cliente cambia intencionalmente: las herramientas de depuración son una extensión, las operaciones peligrosas están desactivadas sin permiso explícito, y el perfil puede dejar solo los nombres seleccionados.

ÁreaEjemplos
Sesionesidb_open, idb_batch_open, idb_list, idb_close, idb_save
Resumen y descompilaciónsurvey_binary, decompile, disasm, analyze_function, analyze_component
Búsqueda y relacionesfind, find_bytes, search_text, xrefs_to, callees, callgraph, trace_data_flow
Caché persistentecache_status, refresh_cache, cache_entity_query, cache_xrefs, cache_callgraph_hotspots, cache_find_regex
Tipos y piladeclare_type, type_inspect, set_type, infer_types, stack_frame, declare_stack
Modificación de baserename, set_comments, define_func, define_code, patch_asm, make_data
Firmasmake_signature, make_signature_for_function, make_signature_for_range, find_xref_signatures
Extensión de depuradordbg_start, dbg_bps, dbg_regs, dbg_stacktrace, dbg_read, dbg_write

Configuración

Pool de workers

uvx --from git+https://github.com/rison1337/ida-pro-mcp-fusion \
  idalib-mcp --stdio --max-workers 4
Parámetro / variablePropósito
--max-workers NMáximo de bases trabajando simultáneamente; 0 — sin límite. Por defecto 4.
IDA_MCP_MAX_WORKERSValor de límite predeterminado desde el entorno.
IDA_MCP_OPEN_TIMEOUTTiempo máximo de autoanálisis al abrir, en segundos. Por defecto 1800.
IDA_MCP_LOAD_TIMEOUTTiempo máximo de carga sin autoanálisis. Por defecto 300.

Perfiles limitados

Dejar solo las herramientas seleccionadas:

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

HTTP

idalib-mcp --host 127.0.0.1 --port 8745

Puente GUI:

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

Para instalar el plugin GUI:

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

Después de la instalación, reinicie IDA y el cliente MCP.

Seguridad

  • Por defecto, el servidor escucha solo en loopback. No lo exponga a una red no confiable.
  • Las herramientas de modificación y Python arbitrario están marcadas como unsafe y desactivadas por defecto.
  • py_eval, py_exec_file, comandos de depurador y parcheo pueden ejecutar código o modificar el IDB.
  • Analice binarios no verificados en el mismo aislamiento que en el análisis manual de malware.

Puede habilitar las herramientas unsafe explícitamente:

idalib-mcp --stdio --unsafe

Solución de problemas

uvx no encontrado

Instale uv con el comando python -m pip install uv, abra una nueva terminal y verifique uvx --version.

Versión incompatible de Python o IDA

Ejecute idapyswitch, seleccione Python 3.11+ y luego vuelva a ejecutar py-activate-idalib.py.

Error sobre que se necesita database

Llame a idb_list() y pase el session_id devuelto como database=. No se aceptan rutas ni nombres de archivo en lugar del ID de sesión.

Límite de workers alcanzado

Cierre una sesión no utilizada mediante idb_close, aumente --max-workers o use close_after_cache=True.

Desarrollo

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

Para las pruebas que requieren el propio IDA:

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

Las nuevas herramientas se encuentran en src/ida_pro_mcp/ida_mcp/api_*.py y se registran mediante @tool. Las pruebas de supervisor y lifecycle están en tests/.

Proyecto y autoría

Fusion Edition es mantenido por rison1337.

El proyecto se basa en la base de código MIT de mrexodia/ida-pro-mcp. El caché persistente y la orquestación headless también usan ideas de QiuChenly/ida-pro-mcp-enhancement y winmin/ida-headless-mcp. La atribución se conserva en el README y el historial de fuentes; el empaquetado de Fusion, las herramientas de caché, el flujo de trabajo por lotes y el ciclo de vida de sesiones se mantienen en este repositorio.

Licencia

El proyecto se distribuye bajo la MIT License. IDA Pro y Hex-Rays son marcas comerciales de Hex-Rays SA y no forman parte del proyecto.