
Headless Binary Ninja MCP server — предоставляющий агентам ИИ глубокие возможности реверс-инжиниринга через 180 инструментов.
Сервер Binary Ninja без графического интерфейса, работающий по протоколу MCP (Model Context Protocol), предоставляющий AI-агентам полный доступ к глубоким процессам реверс-инжиниринга — дизассемблированию, IL, патчингу, типам, перекрёстным ссылкам и многому другому — без GUI.
Спроектирован для запуска в том же Docker-контейнере, что и среда выполнения агента. Без сайдкаров, без дополнительных сервисов.
Весь этот проект — код, тесты и документация — на 100% сделан по принципу vibe coding.
Существующие MCP-серверы Binary Ninja либо привязаны к GUI, либо предоставляют ограниченный набор инструментов. Этот сервер работает исключительно без GUI и предназначен для управляемых агентами процессов в изолированных средах VM/контейнеров: агент получает полный контроль над системой анализа, автоматизируя большие части реверс-инжиниринга, пока вы интерактивно обсуждаете и направляете процесс.
Цель — интерфейс, в котором агенты могут со временем просматривать, уточнять и расширять анализ: обновлять типы, символы и метаданные, инкрементально улучшать базу данных анализа, безопасно применять патчи и итерации с помощью отмены/повтора, а также запускать пользовательские скрипты, когда рабочий процесс требует чего-то особенного.
binja.eval и binja.call для всего, что не покрывается каталогом инструментов.3.11+binaryninja Python, доступным для импорта в вашей среде выполнения (для реального анализа)git clone https://github.com/mrphrazer/binary-ninja-headless-mcp.git
cd binary-ninja-headless-mcp
pip install .
Или установите напрямую из корня репозитория без клонирования:
pip install git+https://github.com/mrphrazer/binary-ninja-headless-mcp.git
Транспорт Stdio (по умолчанию):
python3 binary_ninja_headless_mcp.py
Транспорт TCP:
python3 binary_ninja_headless_mcp.py --transport tcp --host 127.0.0.1 --port 8765
Режим фиктивного бэкенда (Binary Ninja не требуется):
python3 binary_ninja_headless_mcp.py --fake-backend
Этот сервер использует стандартный MCP через stdio (по умолчанию) или tcp, поэтому любой хост агента, поддерживающий MCP, может его использовать.
claude mcp add binary_ninja_headless_mcp -- python3 /path/to/binary-ninja-headless-mcp/binary_ninja_headless_mcp.py
Или добавьте его в .mcp.json вашего проекта:
{
"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 с аргументами ["binary_ninja_headless_mcp.py"], когда cwd указывает на корень репозитория, или используйте абсолютный путь к скрипту в args.cwd в путь к репозиторию, если хотите, чтобы относительные пути, такие как samples/ls, разрешались правильно.--fake-backend.health.ping, затем session.open.Рекомендуемая модель развёртывания: запуск процесса агента и этого MCP-сервера в одном образе контейнера.
Пример базового образа:
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"]
Если вам нужен реальный анализ Binary Ninja внутри контейнера, добавьте среду выполнения Binary Ninja + настройку лицензии в этот же образ и запустите агента с настроенным MCP-сервером.
initializepingtools/listtools/callshutdownПоведение tools/list:
offset или limit, используется постраничный вывод (по умолчанию offset=0, limit=50 в постраничном режиме).prefix (например, binary.)query (поиск по подстроке в имени/описании инструмента)offset, limit, total, has_more.has_more=true), включает next_offset и подсказку notice.Поведение ответов на вызовы инструментов:
structuredContent — это каноническая полная нагрузка.content[0].text — это компактная строка сводки (не полное дублирование JSON).Этот репозиторий хорошо протестирован и имеет принудительные шлюзы качества.
pytest --collect-only -q для получения текущего количества собранных тестов.ruff format --check .ruff check .pytestBINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1, поэтому проверки выполняются без необходимости установки Binary Ninja.read_only=true).binary.basic_blocks_at и function.basic_blocks имеют постраничный вывод (offset/limit).memory.read имеет жёсткое ограничение ответа: length <= 65536.stdio/tcp) по умолчанию не аутентифицировано.binja.eval и широкий доступ к API через binja.call.ruff format --check .
ruff check .
BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pytest -q
Используйте встроенный MCP-фаззер функций для тестирования широкого спектра инструментов на samples/ls.
Реальный бэкенд Binary Ninja:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --iterations 120 --seed 1337
Дымовое тестирование фиктивного бэкенда:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --fake-backend --iterations 20
Записать отчёт о покрытии в JSON:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --report-json /tmp/mcp-fuzzer-report.json
Полезные флаги:
--min-success-tools N: завершается с ненулевым кодом, если успешно выполнилось менее N инструментов.--verbose: выводить каждый вызов инструмента во время фаззинга.--update-analysis: открыть начальный сеанс с update_analysis=true.