IDA-instances-MCP
IDA-instances-MCP
Compilación personalizada de ida-pro-mcp: un servidor MCP que permite a los clientes MCP manejar IDA Pro — rehecha con una revisión de estabilidad orientada a alojar múltiples instancias idalib sin interfaz gráfica (la configuración Ida-Instances).
Se trata de un fork del ida-pro-mcp de mrexodia (MIT). Todo el reconocimiento del upstream es para Duncan Ogilvie y sus colaboradores; los cambios propios que se describen a continuación se mantienen en este repositorio.
Qué hay de personalizado
Endurecimiento de la estabilidad sobre la v2.0.0 del upstream:
Ámbito | Cambio |
Seguridad de datos | La limpieza parcial de la base de datos es consciente de la propiedad: nunca elimina archivos |
Fiabilidad de guardado |
|
Concurrencia | El bloqueo del supervisor ya no abarca la creación de los procesos (~120 s), las comprobaciones de salud (~2,5 s/session) ni la terminación de procesos obsoletos: una apertura lenta ya no congela todas las sesiones |
Robustez | Un JSON-RPC malformado a través de stdio devuelve |
Tiempos de espera | El timeout del proxy se amplía de 30s a 900s y se hace configurable ( |
Red | El problema TOCTOU del puerto del worker ahora reconecta; la salida SSE y el cierre están protegidos con bloqueos; las políticas CORS se leen de la caché fuera del hilo principal de IDA |
Límites de recursos | El registro de trazas del IDB se limita a 64 MB ( |
Autenticación | Cada petición HTTP requiere una clave de API de la instancia; se emite exactamente una vez mediante |
Endpoints de hosting |
|
Recolección de sesiones | Las sesiones que no se toque durante |
Apierro controlado | Con |
Auto-actualización | En el inicio se consultan los lanzamientos de GitHub; las sesiones interactivas reciben la opción de actualizarse automáticamente con una tecla |
Valores por defecto | El supervisor sin interfaz gráfica escucha en 0.0.0.0:9999; el plugin de la GUI también tiene binding en 0.0.0.0 y ahora exige la misma clave de API |
Related MCP server: idalib-mcp-headless
Requisitos
Linux, macOS o Windows
Python 3.11+ (usa
idapyswitchcon el que IDA coincida)IDA Pro 8.3+ (se recomienda la 9.x). IDa Free no es compatible
Un cliente de MCP (Claude Code, Cursor, Codex, Opencode, VS Code, ...)
Instalación
Activa idalib para tu entorno de 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"Los ejecuciones sin interfaz gráfica necesitan además el directorio de instalación de IDA en IDADIR.
Cómo ejecutar el supervisor sin interfaz gráfica (modo hosting)
uv run idalib-mcp # serves http://0.0.0.0:9999/mcp (new default)Al iniciar, se generará una clave de API (o se cargará desde el disco) y toda petición que no la incluya recibirá 401 Unauthorized — no hay excepciones.
Obtén la clave una vez desde la máquina/red propietaria de la instancia:
curl http://your-host:9999/key
# {"key": "3f2b..."} <- save it; this endpoint is now burned until restartLa clave se persistí en
~/.idapro/mcp/api_key(modo0600) y sobrevive a reinicios;GET /keyla vuelve a emitir una única vez cada vez que arranca el servidorSe puede anular con
IDA_MCP_API_KEY(o se puede reubicar conIDA_MCP_API_KEY_FILE)Todos los demás endpoints la exigen en cada llamada:
Authorization: Bearer <key>
# or equivalently
X-API-Key: <key>La clave no se registra nunca en los logs.
Endpoints de hosting
Endpoint | Autorización | Propósito |
| No | Sonda de disponibilidad: |
| Clave | Bases de datos abiertas incl. última acceso |
| Clave | Subida de binario con el cuerpo bruto, transmitido en streaming a |
# 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"Opciones útiles:
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 startupHerramientas del ciclo de vida de las sesiones: idb_open, idb_list, idb_close — se abre una base de datos por sesión; cada sesión tiene su propio proceso aislado.
Ejecutar el proxy de la GUI (IDA interactivos)
Inicia el plugin en el IDA (Editar -> Plugins -> MCP, o Ctrl+Alt+M), y después:
uv run ida-pro-mcp # stdio proxy, auto-discovers IDA
uv run ida-pro-mcp --transport http://127.0.0.1:9999 # serve HTTP insteadConecta un cliente de MCPpedar
Configuración JSON genérica (transporte HTTP):
{
"mcpServers": {
"ida-instances": {
"url": "http://your-host:9999/mcp",
"headers": {
"Authorization": "Bearer <key-from-/key>"
}
}
}
}Claude:
claude mcp add --transport http ida-instances http://your-host:9999/mcp \
--header "Authorization: Bearer <key-from-/key>"Para el proxy de la GUI por stdio, ejecuta uv run ida-pro-mcp --config y pega el JSON en tu cliente.
Configuración (variables de entorno)
Variable | Valor por defecto | Significado |
|
| Número máximo de segundos para abrir + análisis automático antes de terminar el proceso ( |
|
| Tope de seguridad de la llamada tool por cada worker |
|
| Timeout del proxy de la GUI → IDA ( |
|
| Límite de size del log de trazas almacenado dentro del IDB |
|
| Valo de |
|
| Presupuestos de las sondas de disponibilidad |
|
| Minutos de inactividad; se cierra automáticamente ( |
|
| Límite para el cuerpo de |
|
| Dónde se guardan los archivos subidos |
| – / | Inyecta o mueve la clave dela instancia |
|
| Presupuesto de guardado por base de datos / total en apagado por |
| desactivado | Configuar a |
Notas de seguridad: la clave de API protege todos los endpoints HTTP del supervisor y del plugin de la interface gráfica (el plugin puede ejecutar código arbitrario con
py_eval, por lo que requiere autenticación incluso en local). Con la llave se puede controlar por completo la instancia; agrega un proxy inverso TLS si la clave va a salir de la red de confianza. Los exploradores pueden pasar la claves como?key=<clave>(útil para/config.html).
A prueba
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 -qThis 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