Another™ MCP Server for Binary Ninja について
Another MCP Server for Binary Ninja は、Binary Ninja で開いたバイナリを AI クライアントから解析できるようにする MCP サーバーです。UI プラグインとしても、コマンドラインからのヘッドレス実行としても動作します。リバースエンジニアリングや セキュリティ研究を行う利用者向けです。
主な機能
- 01関数名・データ変数名の変更
- 02擬似 C・擬似 Rust・中間言語の取得
- 03逆アセンブル、インポート、エクスポートの確認
- 04文字列・関数・データ変数の一覧取得
- 05SSE と stdio による接続
活用シーン
- 01AI クライアントに逆コンパイル結果の説明を依頼する
- 02ヘッドレス環境でバイナリ解析サービスを提供する
- 03Claude Desktop や Cherry Studio からバイナリ構造を照会する
MCP 対応
本プロジェクトは MCP サーバーであり、Binary Ninja で開いた各ファイルを binaryninja:// URI のリソースとして公開し、pseudo_c や disassembly などのツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Binary Ninja 用 Another™ MCP サーバー
英語 | 中文
デモ
tests/binary/beleaf.elf は CSAW'19: Beleaf - Nightmare から取得したものです。 上記リンクから完全な解説もご覧いただけます!

…それでも Another なのはなぜ?
こちらをご覧ください: 既存のプラグインとの主な違い
インストール
サーバーのセットアップ
MCP サーバーの実行方法は 2 通りあります。
-
Binary Ninja UI プラグイン:
- Binary Ninja のプラグインマネージャーからプラグインをインストールします
- 最初のファイルが読み込まれると、MCP サーバーが自動的に起動します。
- 自動起動は
Settings - MCP Server - Auto Startから設定できます - リッスンポートは
Settings - MCP Server - Server port numberから設定できます
- 自動起動は
- 開いているファイルはそれぞれ別のリソースとして公開されます。詳しくは以下の 利用可能なリソース セクションをご覧ください
-
Binary Ninja ヘッドレスモード:
uvx binaryninja-mcp install-api # only run once uvx binaryninja-mcp server <filename> [filename]...filenameには任意のバイナリファイルまたは BNDB を指定できます。UI モードと同様に、開いているファイルはすべて MCP クライアントから利用できます。- サーバーはデフォルトのポート 7000 で実行されます
- 別のポートを指定するには
--portフラグを使用します
MCP クライアントのセットアップ
-
Claude Desktop(stdio リレー クライアント):組み込みのリレーを使用して stdio トランスポート経由で接続するよう、クライアントを設定します。
{ "mcpServers": { "binaryninja": { "command": "uvx", "args": ["binaryninja-mcp", "client"] } } } -
Cherry Studio:
- SSE エンドポイント(推奨):URL:
http://localhost:7000/sse - stdio クライアント:
- コマンド:
uvx - 引数:
binaryninja-mcp client
- コマンド:
- SSE エンドポイント(推奨):URL:
デフォルト以外のポートで MCP サーバーを実行する場合は、サーバーとクライアントの両方のコマンドラインに
--port 12345 を追加してください。
MCP クライアントで利用できるツール
MCP サーバーでは、以下のツールを利用できます。
rename_symbol:関数またはデータ変数の名前を変更しますpseudo_c:指定した関数の擬似 C コードを取得しますpseudo_rust:指定した関数の擬似 Rust コードを取得しますhigh_level_il:指定した関数の高レベル IL を取得しますmedium_level_il:指定した関数の中レベル IL を取得しますdisassembly:関数または指定した範囲の逆アセンブリを取得しますupdate_analysis_and_wait:バイナリの解析を更新し、完了まで待機しますget_triage_summary:BinaryNinja の Triage ビューから基本情報を取得しますget_imports:インポートされたシンボルの辞書を取得しますget_exports:エクスポートされたシンボルの辞書を取得しますget_segments:メモリセグメントの一覧を取得しますget_sections:バイナリセクションの一覧を取得しますget_strings:バイナリ内で見つかった文字列の一覧を取得しますget_functions:関数の一覧を取得しますget_data_variables:データ変数の一覧を取得します
MCP クライアントで利用できるリソース
MCP リソースには、次の形式の URI でアクセスできます。
binaryninja://{filename}/{resource_type}
サーバーは各バイナリについて、次の種類のリソースを提供します。
triage_summary:BinaryNinja のトリアージビューの基本情報imports:インポートされたシンボル/関数の辞書exports:エクスポートされたシンボル/関数の辞書segments:メモリセグメントの一覧sections:バイナリセクションの一覧strings:バイナリ内で見つかった文字列の一覧functions:関数の一覧data_variables:データ変数の一覧
開発
uv は、このプロジェクトで推奨されるパッケージ管理ツールです。
ディレクトリを Binary Ninja のプラグインディレクトリにクローンする
git clone https://github.com/MCPPhalanx/binaryninja-mcp.git "${env:APPDATA}\Binary Ninja\plugins\MCPPhalanx_binaryninja_mcp"
Python 環境をセットアップする
Binary Ninja API は、手動で仮想環境にインストールする必要があります。
uv venv
uv sync --dev
# install binaryninja API
binaryninja-mcp install-api
# check API is correctly installed
uv run python -c 'import binaryninja as bn; assert bn._init_plugins() is None; assert bn.core_ui_enabled() is not None; print("BN API check PASSED!!")'
開発用に MCP クライアントをセットアップする
Claude Desktop のような stdio トランスポートを使用する MCP クライアントでは、作業ディレクトリを開発フォルダーに変更してください。
{
"mcpServers": {
"binaryninja": {
"command": "uv",
"args": [
"--directory",
"C:/path/to/binaryninja-mcp",
"run",
"binaryninja-mcp",
"client"
]
}
}
}
SSE 対応の MCP クライアントは、次の URL を使用して接続できます:http://localhost:7000/sse
ビルド
uv build
テスト
pytest
# To update test snapshots:
pytest --snapshot-update
バージョンの更新
PyPI パッケージのバージョンは、Binary Ninja の plugin.json(package.json 形式)から自動的に取得されるため、BN プラグインと PyPI パッケージのバージョンの一貫性が保たれます。
# bump alpha version
uvx hatch version a
# bump release version
uvx hatch version minor,rc
uvx hatch version release
リリース
uv publish
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。