
ヘッドレス Binary Ninja MCP サーバー — 180のツールを介してAIエージェントに深いリバースエンジニアリング機能を提供します。
ヘッドレスなBinary Ninjaサーバーで、MCP(Model Context Protocol)を話し、AIエージェントにGUIなしで深いリバースエンジニアリングワークフロー(逆アセンブル、IL、パッチ、型、相互参照など)への完全なアクセスを提供します。
エージェントランタイムと同じDockerコンテナ内で実行するように設計されています。サイドカーも追加サービスも不要です。
このプロジェクト全体(コード、テスト、ドキュメント)は100%バイブスコードで書かれています。
既存のBinary Ninja MCPサーバーは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という名前のサーバーを登録します。cwdがリポジトリルートの場合は、コマンドpython3と引数["binary_ninja_headless_mcp.py"]を使用するか、argsに絶対スクリプトパスを使用します。samples/lsのような相対パスを正しく解決したい場合は、cwdをリポジトリパスに設定します。--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/callshutdowntools/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を介した任意のスクリプトと、binja.callを介した広範なAPIアクセスを公開します。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でシードセッションを開きます。サーバーは現在、36の機能グループにわたって181のツールを公開しています。
analysis.status: 解析ステータスを取得します。analysis.progress: 解析進捗スナップショットを取得します。analysis.update: 非同期解析更新をトリガーします。analysis.update_and_wait: 解析更新を実行し、完了を待ちます。analysis.abort: 解析を中断します。analysis.set_hold: 解析キューを保留/解除します。annotation.rename_function: 関数の名前を変更します。annotation.rename_symbol: アドレスのシンボル名を変更します。annotation.undefine_symbol: アドレスのユーザーシンボルを未定義にします。annotation.define_symbol: アドレスにシンボルを定義します。annotation.rename_data_var: データ変数の名前を変更します。annotation.define_data_var: データ変数を定義します。annotation.undefine_data_var: データ変数を未定義にします。annotation.set_comment: アドレスにコメントを設定します。annotation.get_comment: アドレスのコメントを取得します。annotation.add_tag: アドレスにユーザーデータタグを追加します。annotation.get_tags: アドレスのタグを取得します。arch.info: アーキテクチャとプラットフォームのメタデータを取得します。arch.disasm_bytes: 選択されたアーキテクチャでバイトを逆アセンブルします。arch.assemble: 選択されたアーキテクチャで命令テキストをアセンブルします。baseaddr.detect: ベースアドレス検出を実行します。baseaddr.reasons: ベースアドレス検出の理由を取得します。baseaddr.abort: ベースアドレス検出を中断します。binary.summary: バイナリ/セッションのサマリーを取得します。binary.save: 現在のバイナリビューをファイルパスに保存します。binary.functions: 関数をページネーション付きで一覧表示します。binary.strings: 発見された文字列をページネーション付きで一覧表示します。binary.search_text: セッション内の生テキスト/バイトを検索します。binary.sections: セクションをページネーション付きで一覧表示します。binary.segments: セグメントをページネーション付きで一覧表示します。binary.symbols: シンボルをページネーション付きで一覧表示します。binary.data_vars: データ変数をページネーション付きで一覧表示します。binary.get_function_at: アドレスから関数を検索します。binary.get_function_disassembly_at: アドレスを含む関数の完全な逆アセンブリを取得します。binary.get_function_il_at: アドレスを含む関数の完全なILを取得します。binary.functions_at: アドレスにある関数を一覧表示します。binary.basic_blocks_at: アドレスにある基本ブロックをページネーション付きで一覧表示します。binja.info: Binary Ninjaのバージョン/インストール情報を返します。binja.call: 汎用APIブリッジ:bn.*またはbv.*ターゲットパスを呼び出します。binja.eval: bn、sessions、オプションのbvを使ってPythonコードを評価します。data.typed_at: アドレスにある型付きデータ変数を取得します。database.create_bndb: セッションから.bndbを作成します。database.save_auto_snapshot: 自動スナップショットを保存します。database.info: セッションのデータベースステータスを取得します。database.snapshots: データベーススナップショットを一覧表示します。database.read_global: データベースのグローバル文字列キーを読み取ります。database.write_global: データベースのグローバル文字列キーを書き込みます。debug.parsers: このビューに対して有効なデバッグ情報パーサーを一覧表示します。debug.parse_and_apply: デバッグ情報を解析してビューに適用します。disasm.linear: 線形逆アセンブリ行を取得します。disasm.function: アドレスを含む関数の完全な逆アセンブリを取得します。disasm.range: アドレス範囲の逆アセンブリ行を取得します。