Radare2 MCP Server について
Radare2 MCP Server は、radare2 のバイナリ解析を AI エージェントから利用できるようにする MCP サーバーです。C 言語で記述され、r2 のネイティブ API を直接呼び出します。コマンドライン、r2 コアプラグイン、MCP サーバーとして動作し、リバースエンジニアやセキュリティ研究者を想定しています。
主な機能
- 01r2 ネイティブ API を用いた C 言語実装
- 02コマンドライン、r2 プラグイン、MCP サーバーの各モード
- 03r2pipe によるローカルおよびリモートの r2/iaito セッション接続
- 04読み取り専用モード、サンドボックス固定、ツール制限
- 05X-Session-ID による多重化と Bearer 認証を備えた HTTP モード
- 06任意の r2 コマンドおよび r2js スクリプトの実行
活用シーン
- 01AI エージェントによるバイナリ構造と関数の解析支援
- 02読み込み済みの r2 セッションを MCP ツール経由で操作
- 03SQL で関数サイズなどの解析結果を照会
MCP 対応
本プロジェクトは MCP サーバーであり、open_file、analyze、sql などの radare2 解析ツールを stdio または HTTP 経由で MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Radare2 MCP サーバー
OpenCode、Mai、VSCode、Claude、CLION などの AI エージェントで radare2 を使用するための MCP サーバーです。
特長
この実装には、次の特長があります。
- 💻 ネイティブの r2 API を使用して C で完全に記述されています
- 🧩 CLI、r2 プラグイン、MCP サーバーとして動作します
- 🔍 radare2 によるシームレスなバイナリ解析
- 🔗 r2pipe 経由で、ローカルまたはリモートの任意の r2/iaito セッションに接続できます
- 🔒 読み取り専用モード、サンドボックスロック、ツールの制限に対応しています
- 🔩 詳細なツール設定
- 🔁 stdin/stdout による直接通信モデル
- 🌐 オプションの
X-Session-ID多重化に対応した HTTP MCP サーバーモード - 🛠️ r2 コマンドまたは r2js スクリプトを実行するためのオプションの生アクセス
インストール
r2pm を使用する
パッケージをインストールする最も簡単な方法は、r2pm を使用することです。
$ r2pm -Uci r2mcp
r2mcp 実行ファイルは、ホームディレクトリにある r2pm の bindir にコピーされます。ただし、このバイナリをシェルから直接実行することは想定されていません。選択した言語モデルの MCP サービスハンドラーから起動した場合にのみ動作します。
$ r2pm -r r2mcp
これは一般的な mcpServer JSON 設定ファイルです。
{
"mcpServers": {
"radare2": {
"command": "r2pm",
"args": ["-r", "r2mcp"]
}
}
}
Codex
codex プラグインをインストールするには、次のコマンドを実行してください。
make codex-plugin-install
ホームディレクトリに個人用マーケットプレイスが作成され、dist/codex-plugin 内のファイルがコピーされます。
Docker を使用する
別の方法として、Docker イメージをビルドできます。
docker build -t r2mcp .
MCP クライアントの設定ファイル(以下を参照)を更新し、次の Docker イメージを使用するように設定してください。
"command": "docker""args": ["run", "--rm", "-i", "-v", "/tmp/data:/data", "r2mcp"].
設定
HTTP サーバーモード
-H [address:]port を使用すると、stdin/stdout の代わりに r2mcp を HTTP MCP サーバーとして実行できます。ポートのみを指定した場合は 127.0.0.1 のみにバインドされます。サーバーにネットワーク経由でアクセスできるようにするには、明示的に 0.0.0.0:port を指定してください。
r2mcp -H 8765
# Public binding; protect this with -a <token> or -A.
r2mcp -H 0.0.0.0:8765 -A
-X max[:idle_seconds] を使用すると、セッションごとの HTTP 状態が有効になり、X-Session-ID リクエストヘッダーによってルーティングされます。
r2mcp -H 8765 -X 8:600
HTTP ベアラー認証は -a <token> で有効になります。クライアントはすべての GET および POST リクエストで Authorization: Bearer <token> を送信する必要があります。
r2mcp -H 8765 -a my-secret-token
-A または -a random を使用すると、起動時にランダムなトークンが生成されます。生成されたトークンは stderr に一度だけ出力されます。
r2mcp -H 8765 -A
同じトークン設定は R2MCP_AUTH_TOKEN でも指定できます。ランダムなトークンを生成するには、値を random に設定します。
-X を使用するには、radare2 ABI 91 以降が必要です。それ以前の radare2 ヘッダーでは HTTP リクエストヘッダー API が公開されていないためです。古い ABI でも -H は単一の共有 HTTP サーバーとして動作しますが、-X は無視されます。ベアラー認証にもこのヘッダー API が必要です。
r2 コアプラグインモード
r2 コアプラグインは、既存の radare2 セッション内で r2mcp コマンドを公開します。r2 から HTTP モードを起動すると、現在の RCore を再利用するため、MCP ツールはそのセッションですでに読み込まれているファイルと解析状態を操作できます。
r2 -e r2mcp.port=8765 -c 'r2mcp start' /bin/ls
便利なサブコマンド:
r2mcp startまたはr2mcp httpは、HTTP MCP サーバーをバックグラウンドで起動します。r2mcp stop、r2mcp restart、r2mcp statusは、バックグラウンドサーバーを管理します。r2mcp logs on|offとr2mcp logs file <path>は、プラグインのデバッグログを制御します。r2mcp approve on|offとr2mcp approve url <url>は、スーパーバイザーの承認を制御します。r2mcp yolo on|offは承認を無効にし、危険な実行ツールを公開します。r2mcp configは、r2mcp.*eval キーを一覧表示します。
このプラグインは、CLI で公開されている同じサーバーオプションの eval キーを登録します:
r2mcp.port、r2mcp.log、r2mcp.logfile、r2mcp.auth、r2mcp.approve、r2mcp.svc、
r2mcp.yolo、r2mcp.mini、r2mcp.permissive、r2mcp.run、
r2mcp.readonly、r2mcp.ignore_analysis、r2mcp.prompts、
r2mcp.prompts.dir、r2mcp.sandbox、r2mcp.sandbox.grain、
r2mcp.content、r2mcp.enabled、r2mcp.disabled、
r2mcp.session_tools、r2mcp.sessions、r2mcp.sessions.max、
r2mcp.sessions.timeout、r2mcp.decompiler、r2mcp.baseurl。
プラグインを -i で手動読み込みする場合は、プラグインの読み込み後にこれらのキーを設定してください。たとえば -c 'e r2mcp.port=8765' を使用します。radare2 はアドホックなプラグイン初期化より前に、初期の -e オプションを処理するためです。
r2xsql を使った SQL
r2mcp が使用するものと同じ radare2 ビルド用の r2xsql コアプラグインをインストールしてください。ローカルモードでは、-r を指定しなくても sql ツールを利用できます。open_file、analyze、sql を、次のような引数で呼び出します:
{"query":"SELECT name, size FROM funcs WHERE size > 100 ORDER BY size DESC LIMIT 10"}
sql ツールは、1つのステートメントを読み込まれた SQL コアプラグインに直接渡し、SQL 演算子と引用符で囲まれたテキストをそのまま保持します。結果はプラグインのテキスト出力です。SQL による書き込みをサポートしているため、読み取り専用モード(-R)では除外されます。ローカルの r2mcp サーバーまたは r2mcp のコアプラグインで使用してください。リモートの r2 HTTP クライアントモード(-u)では、このツールは公開されません。
インストール済みのプラグインは自動的に読み込まれます。ビルドを明示的に読み込むには、r2mcp コマンドに -c 'L /absolute/path/core_r2xsql.so' を追加します。起動コマンドは MCP リクエストまたは -T テストの前に順番に実行され、その出力は MCP 用の stdout を有効に保つために破棄されます。macOS/Windows では、実際のプラグインファイル名を使用してください。
Claude Desktop との統合
Claude Desktop アプリで CMD + , を押して、開発者設定を開きます。以下の説明に従って設定ファイルを編集し、JSON ファイルの編集後にクライアントを再起動してください:
-
Claude Desktop の設定ファイルを探します:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
設定ファイルに以下を追加します:
{
"mcpServers": {
"radare2": {
"command": "r2pm",
"args": ["-r", "r2mcp"]
}
}
}
VS Code との統合
ユーザー設定に追加することで、Visual Studio Code の GitHub Copilot Chat で r2mcp を使用できます(その他の方法はこちらを参照してください):
- macOS では
CMD + Shift + P、Windows/Linux ではCtrl + Shift + Pを押して、コマンドパレットを開きます。 Copilot: Open User Configurationを検索して選択します(macOS では通常~/Library/Application Support/Code/User/mcp.jsonにあります)。- 設定ファイルに以下を追加します:
{
"servers": {
"radare2": {
"type": "stdio",
"command": "r2pm",
"args": ["-r", "r2mcp"]
}
},
"inputs": []
}
Zed との統合
設定に追加することで、Zed でも r2mcp を使用できます:
- コマンドパレットを開きます:macOS では
CMD + Shift + P、Windows/Linux ではCtrl + Shift + Pを押します。 agent: open configurationを検索するか、settingsを検索します。- 次のようにサーバーを追加します:
"context_servers": {
"r2-mcp-server": {
"source": "custom",
"command": "r2pm",
"args": ["-r", "r2mcp"],
"env": {}
}
}
注:使用するには、Claude、Gemini などの別の LLM エージェントが必要です。
開発者向け
ソースからビルド
Linux/macOS
サーバーをローカルでテストするには、make でビルドしてインストールできます。
make install
これにより、サーバーがコンパイルされ、macOS では r2mcp バイナリが /usr/local/bin に配置されます。
Windows
Windows では、CI と同じように meson と ninja を使用してください。
meson b
ninja -C b
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。