
Headless Binary Ninja MCP server — fornendo agli agenti AI profonde capacità di reverse engineering tramite 180 strumenti.
Un server Binary Ninja headless che parla MCP (Model Context Protocol), fornendo agli agenti AI pieno accesso a flussi di lavoro complessi di reverse engineering — disassemblaggio, IL, patching, tipi, xref e altro — senza GUI.
Progettato per funzionare nello stesso container Docker del runtime dell'agente. Niente sidecar, niente servizi aggiuntivi.
L'intero progetto — codice, test e documentazione — è realizzato al 100% con vibe coding.
I server MCP per Binary Ninja esistenti sono legati alla GUI o espongono una superficie strumentale limitata. Questo server è solo headless e progettato per flussi di lavoro guidati da agenti in ambienti VM/container sandbox: l'agente ha il pieno controllo del sistema di analisi, automatizzando gran parte del reverse engineering mentre tu interagisci e guidi il processo in modo interattivo.
L'obiettivo è un'interfaccia in cui gli agenti possano ispezionare, perfezionare ed estendere un'analisi nel tempo — aggiornando tipi, simboli e metadati, migliorando incrementalmente il database di analisi, applicando patch e iterando in modo sicuro con undo/redo, ed eseguendo script personalizzati quando un flusso di lavoro necessita di qualcosa di ad hoc.
binja.eval e binja.call per tutto ciò che il catalogo strumenti non copre.3.11+binaryninja importabile nel tuo runtime (per analisi reali)git clone https://github.com/mrphrazer/binary-ninja-headless-mcp.git
cd binary-ninja-headless-mcp
pip install .
Oppure installa direttamente dalla root del repository senza clonare:
pip install git+https://github.com/mrphrazer/binary-ninja-headless-mcp.git
Trasporto Stdio (default):
python3 binary_ninja_headless_mcp.py
Trasporto TCP:
python3 binary_ninja_headless_mcp.py --transport tcp --host 127.0.0.1 --port 8765
Modalità backend fittizio (nessun Binary Ninja richiesto):
python3 binary_ninja_headless_mcp.py --fake-backend
Questo server parla MCP standard su stdio (default) o tcp, quindi qualsiasi host agente compatibile con MCP può utilizzarlo.
claude mcp add binary_ninja_headless_mcp -- python3 /path/to/binary-ninja-headless-mcp/binary_ninja_headless_mcp.py
Oppure aggiungilo al .mcp.json del tuo progetto:
{
"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 argomenti ["binary_ninja_headless_mcp.py"] quando cwd è la root del repository, oppure usa un percorso assoluto dello script in args.cwd sul percorso del repo se vuoi che percorsi relativi come samples/ls vengano risolti correttamente.--fake-backend.health.ping, poi session.open.Modello di deployment consigliato: esegui il processo agente e questo server MCP nella stessa immagine container.
Esempio 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"]
Se hai bisogno di analisi reale con Binary Ninja all'interno del container, aggiungi il tuo runtime Binary Ninja + configurazione licenza nella stessa immagine e avvia l'agente con questo server MCP configurato.
initializepingtools/listtools/callshutdownComportamento di tools/list:
offset o limit, usa output paginato (offset=0, limit=50 di default in modalità paginata).prefix (ad esempio binary.)query (corrispondenza parziale su nome/descrizione dello strumento)offset, limit, total, has_more.has_more=true), include next_offset e un suggerimento notice.Comportamento della risposta alle chiamate strumento:
structuredContent è il payload completo canonico.content[0].text è una stringa riassuntiva compatta (non una duplicazione JSON completa).Questo repository è ben testato e ha gate di qualità obbligatori.
pytest --collect-only -q per il conteggio corrente dei test raccolti.ruff format --check .ruff check .pytestBINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 in modo che i controlli vengano eseguiti senza richiedere l'installazione di Binary Ninja.read_only=true).binary.basic_blocks_at e function.basic_blocks sono paginati (offset/limit).memory.read ha un limite massimo di risposta: length <= 65536.stdio/tcp) non è autenticata di default.binja.eval e ampio accesso API tramite binja.call.ruff format --check .
ruff check .
BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pytest -q
## Fuzzer di Funzionalità
Usa il fuzzer MCP integrato per testare un'ampia superficie strumentale su `samples/ls`.
Backend Binary Ninja reale:
```bash
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --iterations 120 --seed 1337
Esecuzione di prova con backend fittizio:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --fake-backend --iterations 20
Scrivi un report di copertura JSON:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --report-json /tmp/mcp-fuzzer-report.json
Flag utili:
--min-success-tools N: esce con codice diverso da zero se meno di N strumenti hanno successo.--verbose: stampa ogni chiamata strumento durante il fuzzing.--update-analysis: apre la sessione seed con update_analysis=true.Il server espone attualmente 181 strumenti in 36 gruppi di funzionalità.