
Servidor MCP Headless do Binary Ninja — fornecendo a agentes de IA capacidades profundas de engenharia reversa por meio de 180 ferramentas.
Um servidor headless Binary Ninja que fala MCP (Protocolo de Contexto de Modelo), dando a agentes de IA acesso completo a fluxos de trabalho profundos de engenharia reversa — desmontagem, IL, patches, tipos, referências cruzadas e mais — sem uma GUI.
Projetado para rodar no mesmo contêiner Docker que o runtime do agente. Sem sidecars, sem serviços extras.
Este projeto inteiro — código, testes e documentação — é 100% vibe coded.
Os servidores MCP existentes do Binary Ninja são vinculados à GUI ou expõem uma superfície de ferramentas limitada. Este servidor é apenas headless e projetado para fluxos de trabalho orientados por agentes em ambientes de VM/contêiner em sandbox: o agente obtém controle total sobre o sistema de análise, automatizando grandes partes da engenharia reversa enquanto você discute interativamente e direciona o processo.
O objetivo é uma interface onde agentes possam inspecionar, refinar e estender uma análise ao longo do tempo — atualizando tipos, símbolos e metadados, melhorando incrementalmente o banco de dados de análise, aplicando patches e iterando com segurança usando desfazer/refazer, e executando scripts personalizados quando um fluxo de trabalho precisar de algo sob medida.
binja.eval e binja.call para qualquer coisa que o catálogo de ferramentas não cubra.3.11+binaryninja importável no seu runtime (para análise real)git clone https://github.com/mrphrazer/binary-ninja-headless-mcp.git
cd binary-ninja-headless-mcp
pip install .
Ou instale diretamente da raiz do repositório sem clonar:
pip install git+https://github.com/mrphrazer/binary-ninja-headless-mcp.git
Transporte Stdio (padrão):
python3 binary_ninja_headless_mcp.py
Transporte TCP:
python3 binary_ninja_headless_mcp.py --transport tcp --host 127.0.0.1 --port 8765
Modo falso de backend (nenhum Binary Ninja necessário):
python3 binary_ninja_headless_mcp.py --fake-backend
Este servidor fala MCP padrão sobre stdio (padrão) ou tcp, então qualquer host de agente compatível com MCP pode usá-lo.
claude mcp add binary_ninja_headless_mcp -- python3 /path/to/binary-ninja-headless-mcp/binary_ninja_headless_mcp.py
Ou adicione ao .mcp.json do seu projeto:
{
"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 com args ["binary_ninja_headless_mcp.py"] quando o cwd for a raiz do repositório, ou use um caminho absoluto do script em args.cwd para o caminho do repositório se você quiser que caminhos relativos como samples/ls sejam resolvidos corretamente.--fake-backend.health.ping, depois session.open.Modelo de implantação recomendado: execute o processo do agente e este servidor MCP na mesma imagem de contêiner.
Exemplo 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 você precisar de análise real do Binary Ninja no contêiner, adicione seu runtime do Binary Ninja + configuração de licença nesta mesma imagem e inicie o agente com este servidor MCP configurado.
initializepingtools/listtools/callshutdownComportamento de tools/list:
offset ou limit for fornecido, usa saída paginada (offset=0, limit=50 padrão no modo paginado).prefix (por exemplo binary.)query (correspondência de substring contra nome/descrição da ferramenta)offset, limit, total, has_more.has_more=true), inclui next_offset e uma dica notice.Comportamento da resposta de chamada de ferramenta:
structuredContent é o payload completo canônico.content[0].text é uma string de resumo compacta (não duplicação completa de JSON).Este repositório é bem testado e possui portões de qualidade obrigatórios.
pytest --collect-only -q para a contagem atual de testes coletados.ruff format --check .ruff check .pytestBINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 para que as verificações sejam executadas sem exigir instalação do Binary Ninja.read_only=true).binary.basic_blocks_at e function.basic_blocks são paginados (offset/limit).memory.read tem um limite de resposta: length <= 65536.stdio/tcp) não é autenticada por padrão.binja.eval e acesso amplo à API via binja.call.ruff format --check .
ruff check .
BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pytest -q
Use o fuzzer de funcionalidades MCP embutido para exercitar uma ampla superfície de ferramentas contra samples/ls.
Backend real do Binary Ninja:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --iterations 120 --seed 1337
Execução de teste com backend falso:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --fake-backend --iterations 20
Escreva um relatório JSON de cobertura:
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --report-json /tmp/mcp-fuzzer-report.json
Flags úteis:
--min-success-tools N: sai com código diferente de zero se menos de N ferramentas tiverem sucesso.--verbose: imprime cada chamada de ferramenta durante o fuzzing.--update-analysis: abre a sessão semente com update_analysis=true.O servidor atualmente expõe 181 ferramentas em 36 grupos de funcionalidades.