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
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
| Capacidad | Qué cambia | |
|---|---|---|
| ⚡ | Caché SQLite persistente | Las funciones, cadenas, globales, importaciones, xrefs y aristas del grafo de llamadas permanecen consultables entre investigaciones repetidas. |
| ◈ | Supervisor multi-binario | Abre, direcciona y cierra varias bases de datos GUI o headless a través de un único endpoint MCP. |
| ⛓ | Workers persistentes | Un supervisor posterior puede descubrir y adoptar un worker existente para la misma base de datos. |
| ◎ | Flujo de trabajo orientado a lotes | Calienta el análisis y las cachés para una colección de muestras con una sola llamada a idb_batch_open. |
| ⛨ | Superficie controlada | Perfiles 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
- Tu cliente MCP inicia
idalib-mcpa través de stdio o HTTP. - El supervisor crea o adopta un worker por binario y aplica el límite de workers.
- Las llamadas a herramientas incluyen un ID de sesión
database, por lo que las solicitudes se enrutan al IDB correcto. - 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.
- 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:
| Modo | Comportamiento |
|---|---|
prefer_headless | Usar o crear un worker idalib. Este es el predeterminado. |
force_headless | Nunca adoptar una instancia GUI en ejecución. |
prefer_gui | Adoptar una instancia GUI coincidente; de lo contrario, crear un worker. |
force_gui | Adoptar 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.
| Área | Herramientas representativas |
|---|---|
| Sesiones | idb_open, idb_batch_open, idb_list, idb_close, idb_save |
| Reconocimiento y descompilación | survey_binary, decompile, disasm, analyze_function, analyze_component |
| Búsqueda y relaciones | find, find_bytes, search_text, xrefs_to, callees, callgraph, trace_data_flow |
| Caché persistente | cache_status, refresh_cache, cache_entity_query, cache_xrefs, cache_callgraph_hotspots, cache_find_regex |
| Tipos y pila | declare_type, type_inspect, set_type, infer_types, stack_frame, declare_stack |
| Edición de base de datos | rename, set_comments, define_func, define_code, patch_asm, make_data |
| Firmas | make_signature, make_signature_for_function, make_signature_for_range, find_xref_signatures |
| Extensión de depurador | dbg_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 / variable | Propósito |
|---|---|
--max-workers N | Máximo de workers de base de datos simultáneos; 0 significa ilimitado. Predeterminado: 4. |
IDA_MCP_MAX_WORKERS | Valor predeterminado de entorno para el límite de workers. |
IDA_MCP_OPEN_TIMEOUT | Tiempo máximo de apertura de autoanálisis en segundos. Predeterminado: 1800; 0 desactiva el límite. |
IDA_MCP_LOAD_TIMEOUT | Tiempo 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:
profiles/readonly.txt— inspección sin herramientas de mutaciónprofiles/triage.txt— superficie de análisis compacta de primera pasada
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.
Русский
Одна 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
- El cliente MCP inicia
idalib-mcpa través de stdio o HTTP. - El supervisor crea o acepta un proceso worker por cada binario.
- Cada llamada contiene
database, por lo que la solicitud llega a la sesión IDB correcta. - IDA ejecuta análisis y cambios en vivo, mientras que las herramientas de caché leen el índice desde SQLite.
- Los workers permanecen detectables en el equipo y finalizan tras un período de inactividad.
idb_open admite cuatro modos:
| Modo | Comportamiento |
|---|---|
prefer_headless | Usar o crear idalib-worker. Modo predeterminado. |
force_headless | No aceptar un proceso GUI en ejecución. |
prefer_gui | Aceptar un GUI adecuado; si no existe, crear un worker. |
force_gui | Aceptar 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.
| Área | Ejemplos |
|---|---|
| Sesiones | idb_open, idb_batch_open, idb_list, idb_close, idb_save |
| Resumen y descompilación | survey_binary, decompile, disasm, analyze_function, analyze_component |
| Búsqueda y relaciones | find, find_bytes, search_text, xrefs_to, callees, callgraph, trace_data_flow |
| Caché persistente | cache_status, refresh_cache, cache_entity_query, cache_xrefs, cache_callgraph_hotspots, cache_find_regex |
| Tipos y pila | declare_type, type_inspect, set_type, infer_types, stack_frame, declare_stack |
| Modificación de base | rename, set_comments, define_func, define_code, patch_asm, make_data |
| Firmas | make_signature, make_signature_for_function, make_signature_for_range, find_xref_signatures |
| Extensión de depurador | dbg_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 / variable | Propósito |
|---|---|
--max-workers N | Máximo de bases trabajando simultáneamente; 0 — sin límite. Por defecto 4. |
IDA_MCP_MAX_WORKERS | Valor de límite predeterminado desde el entorno. |
IDA_MCP_OPEN_TIMEOUT | Tiempo máximo de autoanálisis al abrir, en segundos. Por defecto 1800. |
IDA_MCP_LOAD_TIMEOUT | Tiempo máximo de carga sin autoanálisis. Por defecto 300. |
Perfiles limitados
Dejar solo las herramientas seleccionadas:
idalib-mcp --stdio --profile profiles/readonly.txt
profiles/readonly.txt— vista sin herramientas de modificaciónprofiles/triage.txt— conjunto compacto para análisis inicial
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.