Skip to main content
Glama
Claude-Reverser

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 .id0/.id1/.id2/.nam/.til reclamados por otra instancia activa, y falla de forma segura si el descubrimiento no está disponible

Fiabilidad de guardado

idb_save se ejecuta con un presupuesto de 600 s (antes 60 s); idb_close se niega a matar a un proceso después de un guardado fallido, en lugar de descartar silenciosamente los cambios

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 -32700/-32600 en lugar de hacer que el proxy se caenga

Tiempos de espera

El timeout del proxy se amplía de 30s a 900s y se hace configurable (IDA_MCP_PROXY_TIMEOUT) para que las descompilaciones largas no “fallen” en el cliente mientras todavía se están ejecutando en el servidor

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 (IDA_MCP_TRACE_MAX_MB), se recortan los argumentos/resultados demasiado grandes y la cola de fallos de volcado queda acotada

Autenticación

Cada petición HTTP requiere una clave de API de la instancia; se emite exactamente una vez mediante GET /key y luego se quema. La clave persiste en el disco para que sobreviva a reinicios y reboots

Endpoints de hosting

GET /health (sonda de disponibilidad sin autenticación), GET /sessions (bases de datos abiertas + último acceso), POST /upload (subida binaria directa con límite de tamaño)

Recolección de sesiones

Las sesiones que no se toque durante IDA_MCP_IDLE_TIMEOUT minutes se cierran automáticamente (se guardan antes)

Apierro controlado

Con SIGTERM/SIGINT se guarda cada base de datos abierta antes de salir — no más trabajo perdido en pct stop

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 idapyswitch con el que IDA coincida)

  • IDA Pro 8.3+ (se recomienda la 9.x). IDa Free no es compatible

  • uv

  • 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 restart
  • La clave se persistí en ~/.idapro/mcp/api_key (modo 0600) y sobrevive a reinicios; GET /key la vuelve a emitir una única vez cada vez que arranca el servidor

  • Se puede anular con IDA_MCP_API_KEY (o se puede reubicar con IDA_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

GET /health

No

Sonda de disponibilidad: {"status":"ok","uptime":N,"sessions":N} — consulta en lugar de esperar

GET /sessions

Clave

Bases de datos abiertas incl. última acceso

POST /upload?filename=NAME

Clave

Subida de binario con el cuerpo bruto, transmitido en streaming a IDA_MCP_UPLOAD_DIR; devuelve la ruta para 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"

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 startup

Herramientas 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 instead

Conecta 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

IDA_MCP_OPEN_TIMEOUT

1800

Número máximo de segundos para abrir + análisis automático antes de terminar el proceso (0 = sin límite)

IDA_MCP_WORKER_CALL_TIMEOUT

900

Tope de seguridad de la llamada tool por cada worker

IDA_MCP_PROXY_TIMEOUT

900

Timeout del proxy de la GUI → IDA (0 = sin límite)

IDA_MCP_TRACE_MAX_MB

64

Límite de size del log de trazas almacenado dentro del IDB

IDA_MCP_MAX_WORKERS

4

Valo de --max-workers por defecto

IDA_MCP_HEALTH_TCP_TIMEOUT / IDA_MCP_HEALTH_RPC_TIMEOUT

2.0 / 10.0

Presupuestos de las sondas de disponibilidad

IDA_MCP_IDLE_TIMEOUT

60

Minutos de inactividad; se cierra automáticamente (0 = desactivado)

IDA_MCP_MAX_UPLOAD_MB

100

Límite para el cuerpo de POST /upload

IDA_MCP_UPLOAD_DIR

~/.idapro/mcp/uploads

Dónde se guardan los archivos subidos

IDA_MCP_API_KEY / IDA_MCP_API_KEY_FILE

– / ~/.idapro/mcp/api_key

Inyecta o mueve la clave dela instancia

IDA_MCP_SHUTDOWN_SAVE_TIMEOUT / IDA_MCP_SHUTDOWN_SAVE_BUDGET

30 / 120

Presupuesto de guardado por base de datos / total en apagado por SIGTERM

IDA_MCP_NO_UPDATE_CHECK

desactivado

Configuar a 1 para desactivar la comprobación de versiones en GitHub

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 -q
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