
Servidor Headless Binary Ninja MCP — brindando a agentes de IA profundas capacidades de ingeniería inversa a través de 180 herramientas.
Un servidor Binary Ninja sin interfaz gráfica que habla MCP (Model Context Protocol), dando a los agentes de IA acceso completo a flujos de trabajo profundos de ingeniería inversa: desensamblado, IL, parcheo, tipos, referencias cruzadas y más, sin GUI.
Diseñado para ejecutarse en el mismo contenedor Docker que el runtime del agente. Sin sidecars, sin servicios adicionales.
Este proyecto completo —código, pruebas y documentación— está 100% vibecoded.
Los servidores MCP existentes de Binary Ninja están ligados a una GUI o exponen una superficie de herramientas limitada. Este servidor es solo headless y está diseñado para flujos de trabajo impulsados por agentes en entornos de VM/contenedor en caja de arena: el agente obtiene control total sobre el sistema de análisis, automatizando grandes partes de la ingeniería inversa mientras discutes y diriges el proceso interactivamente.
El objetivo es una interfaz donde los agentes puedan inspeccionar, refinar y extender un análisis a lo largo del tiempo — actualizando tipos, símbolos y metadatos, mejorando la base de datos de análisis incrementalmente, aplicando parches e iterando de forma segura con deshacer/rehacer, y ejecutando scripts personalizados cuando un flujo de trabajo necesite algo a medida.
binja.eval y binja.call para todo lo que el catálogo de herramientas no cubra.3.11+binaryninja importable en tu runtime (para análisis real)git clone https://github.com/mrphrazer/binary-ninja-headless-mcp.git
cd binary-ninja-headless-mcp
pip install .
O instala directamente desde la raíz del repositorio sin clonar:
pip install git+https://github.com/mrphrazer/binary-ninja-headless-mcp.git
Transporte Stdio (por defecto):
python3 binary_ninja_headless_mcp.py
Transporte TCP:
python3 binary_ninja_headless_mcp.py --transport tcp --host 127.0.0.1 --port 8765
Modo backend falso (no requiere Binary Ninja):
python3 binary_ninja_headless_mcp.py --fake-backend
Este servidor habla MCP estándar sobre stdio (por defecto) o tcp, por lo que cualquier host de agente compatible con MCP puede usarlo.
claude mcp add binary_ninja_headless_mcp -- python3 /path/to/binary-ninja-headless-mcp/binary_ninja_headless_mcp.py
O agrégalo a .mcp.json de tu proyecto:
{
"mcpServers": {
"binary_ninja_headless_mcp": {
"command": "python3",
"args": ["binary_ninja_headless_mcp.py"],
"cwd": "/path/to/binary-ninja-headless-mcp"
}
}
}
codex mcp add binary_ninja_headless_mcp -- python3 binary_ninja_headless_mcp.py
binary_ninja_headless_mcp.python3 con args ["binary_ninja_headless_mcp.py"] cuando cwd sea la raíz del repositorio, o usa una ruta de script absoluta en args.cwd a la ruta del repositorio si quieres que rutas relativas como samples/ls se resuelvan correctamente.--fake-backend.health.ping, luego session.open.Modelo de despliegue recomendado: ejecuta el proceso del agente y este servidor MCP en la misma imagen de contenedor.
Ejemplo base:
FROM python:3.11-slim
WORKDIR /app
COPY . /app
RUN python -m pip install --upgrade pip && pip install ruff pytest
CMD ["python3", "binary_ninja_headless_mcp.py"]
Si necesitas análisis real de Binary Ninja en el contenedor, añade tu runtime de Binary Ninja + configuración de licencia en esta misma imagen e inicia el agente con este servidor MCP configurado.
initializepingtools/listtools/callshutdownComportamiento de tools/list:
offset o limit, usa salida paginada (offset=0, limit=50 por defecto en modo paginado).prefix (por ejemplo binary.)query (coincidencia de subcadena contra nombre/descripción de la herramienta)offset, limit, total, has_more.has_more=true), incluye next_offset y una sugerencia notice.Comportamiento de la respuesta de llamada a herramienta:
structuredContent es el payload completo canónico.content[0].text es una cadena de resumen compacta (no duplicación JSON completa).Este repositorio está bien probado y tiene puertas de calidad obligatorias.
pytest --collect-only -q para el número actual de pruebas recogidas.ruff format --check .ruff check .pytestBINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 para que las comprobaciones se ejecuten sin requerir instalación de Binary Ninja.read_only=true).binary.basic_blocks_at y function.basic_blocks están paginados (offset/limit).memory.read tiene un tope de respuesta estricto: length <= 65536.stdio/tcp) no está autenticada por defecto.binja.eval y acceso amplio a la API mediante binja.call.ruff format --check .
ruff check .
BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pytest -q
## Fuzzer de Características
Usa el fuzzer de características MCP incorporado para ejercitar una amplia superficie de herramientas contra `samples/ls`.
Backend real Binary Ninja:
```bash
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --iterations 120 --seed 1337
Ejecución de prueba con backend falso:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --fake-backend --iterations 20
Escribe un informe de cobertura JSON:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --report-json /tmp/mcp-fuzzer-report.json
## Banderas útiles:
- `--min-success-tools N`: sale con código no cero si menos de `N` herramientas tuvieron éxito.
- `--verbose`: imprime cada llamada a herramienta mientras se fuzzea.
- `--update-analysis`: abre la sesión semilla con `update_analysis=true`.
## Catálogo de Características