
Serveur MCP Headless Binary Ninja — offrant aux agents IA des capacités profondes de rétro-ingénierie via 180 outils.
Un serveur Binary Ninja sans interface graphique qui parle le MCP (Model Context Protocol), offrant aux agents IA un accès complet à des workflows avancés de rétro-ingénierie — désassemblage, IL, patching, types, références croisées, et plus — sans GUI.
Conçu pour fonctionner dans le même conteneur Docker que l'exécution de l'agent. Pas de sidecars, pas de services supplémentaires.
Ce projet entier — code, tests et documentation — est 100 % vibe codé.
Les serveurs MCP Binary Ninja existants sont soit liés à une interface graphique, soit n'exposent qu'une surface d'outils limitée. Ce serveur est uniquement sans interface graphique et conçu pour des workflows pilotés par agent dans des environnements VM/conteneurs sandboxés : l'agent obtient un contrôle total sur le système d'analyse, automatisant de grandes parties de la rétro-ingénierie pendant que vous discutez et orientez le processus de manière interactive.
L'objectif est une interface où les agents peuvent inspecter, affiner et étendre une analyse au fil du temps — mettre à jour les types, symboles et métadonnées, améliorer la base de données d'analyse de manière incrémentale, appliquer des correctifs et itérer en toute sécurité avec annulation/répétition, et exécuter des scripts personnalisés lorsqu'un workflow nécessite quelque chose de spécifique.
binja.eval et binja.call pour tout ce que le catalogue d'outils ne couvre pas.3.11+binaryninja importable dans votre environnement d'exécution (pour une analyse réelle)git clone https://github.com/mrphrazer/binary-ninja-headless-mcp.git
cd binary-ninja-headless-mcp
pip install .
Ou installez directement depuis la racine du dépôt sans cloner :
pip install git+https://github.com/mrphrazer/binary-ninja-headless-mcp.git
Transport stdio (par défaut) :
python3 binary_ninja_headless_mcp.py
Transport TCP :
python3 binary_ninja_headless_mcp.py --transport tcp --host 127.0.0.1 --port 8765
Mode backend factice (Binary Ninja non requis) :
python3 binary_ninja_headless_mcp.py --fake-backend
Ce serveur parle MCP standard via stdio (par défaut) ou tcp, donc tout hôte d'agent compatible MCP peut l'utiliser.
claude mcp add binary_ninja_headless_mcp -- python3 /path/to/binary-ninja-headless-mcp/binary_ninja_headless_mcp.py
Ou ajoutez-le au fichier .mcp.json de votre projet :
{
"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 avec les arguments ["binary_ninja_headless_mcp.py"] lorsque cwd est la racine du dépôt, ou utilisez un chemin de script absolu dans args.cwd sur le chemin du dépôt si vous voulez que les chemins relatifs comme samples/ls soient résolus correctement.--fake-backend.health.ping, puis session.open.Modèle de déploiement recommandé : exécutez le processus d'agent et ce serveur MCP dans la même image de conteneur.
Exemple de 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 vous avez besoin d'une analyse Binary Ninja réelle dans le conteneur, ajoutez votre environnement d'exécution Binary Ninja + configuration de licence dans cette même image et démarrez l'agent avec ce serveur MCP configuré.
initializepingtools/listtools/callshutdownComportement de tools/list :
offset ou limit est fourni, utilise une sortie paginée (offset=0, limit=50 par défaut en mode paginé).prefix (par exemple binary.)query (correspondance de sous-chaîne avec le nom/la description de l'outil)offset, limit, total, has_more.has_more=true), inclut next_offset et un indice notice.Comportement de la réponse d'appel d'outil :
structuredContent est la charge utile canonique complète.content[0].text est une chaîne de résumé compacte (pas de duplication JSON complète).Ce dépôt est bien testé et comporte des barrières de qualité obligatoires.
pytest --collect-only -q pour le nombre actuel de tests collectés.ruff format --check .ruff check .pytestBINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pour que les vérifications s'exécutent sans nécessiter l'installation de Binary Ninja.read_only=true).binary.basic_blocks_at et function.basic_blocks sont paginés (offset/limit).memory.read a une limite stricte de réponse : length <= 65536.stdio/tcp) est non authentifiée par défaut.binja.eval et un accès large aux API via binja.call.ruff format --check .
ruff check .
BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pytest -q
Utilisez le fuzzer de fonctionnalités MCP intégré pour exercer une large surface d'outils sur samples/ls.
Backend Binary Ninja réel :
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --iterations 120 --seed 1337
Exécution de test rapide avec backend factice :
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --fake-backend --iterations 20
Écrire un rapport de couverture JSON :
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --report-json /tmp/mcp-fuzzer-report.json
Indicateurs utiles :