🚀 ida-multi-mcp
ida-multi-mcp は、単一のMCPエンドポイントを通じて複数のバイナリを同時にリバースエンジニアリングするための、マルチインスタンスIDA Pro MCPサーバーです。IDA Proを使用して複数のバイナリを並列に分析でき、すべてのインスタンスに単一のMCP接続を通じてアクセスできます。複数のMCPクライアント構成を管理する代わりに、複数のIDAインスタンスを開くと、サーバーが自動的に各インスタンスを検出し、リクエストをルーティングします。
🚀 クイックスタート
概要
MCP Client (Claude, Cursor, etc.)
│ stdio (MCP Protocol)
▼
┌─────────────────────────────────┐
│ ida-multi-mcp Server (Router) │
│ - Dynamic tool discovery │
│ - instance_id injection │
│ - Management tools │
└───┬──────┬──────┬───────────────┘
│ │ │ HTTP JSON-RPC
▼ ▼ ▼
IDA #1 IDA #2 IDA #3
(auto) (auto) (auto)
前提条件
- Python 3.11以降
- IDA Pro 8.3以上 (9.0推奨)
インストール
人向けのインストール方法
最も簡単なインストール方法は、AIエージェントに処理させることです。以下のプロンプトをAIツールにコピーして貼り付けてください。
Claude Code / AmpCode:
Install and configure ida-multi-mcp by following the instructions here: https://raw.githubusercontent.com/MeroZemory/ida-multi-mcp/main/docs/installation.md
Cursor:
@Web fetch https://raw.githubusercontent.com/MeroZemory/ida-multi-mcp/main/docs/installation.md and follow the installation steps.
または、手動でインストールすることもできます。
macOS
重要: IDA Proは通常、システムのデフォルトとは異なるPythonバージョンを使用します(例えば、IDAはPython 3.11を使用し、macOSは3.14を搭載しています)。ターミナルのPythonとIDAのPythonの両方にパッケージをインストールする必要があります。
ステップ1: IDAのPythonバージョンを確認する
IDA Proを開き、IDAコンソールで以下のコマンドを実行します。
Python> import sys; print(sys.version)
バージョン(例:3.11)をメモしておいてください。
ステップ2: インストールする
pipx install git+https://github.com/MeroZemory/ida-multi-mcp.git
python3.11 -m pip install --user git+https://github.com/MeroZemory/ida-multi-mcp.git
ida-multi-mcp --install
claude mcp add ida-multi-mcp -s user -- ida-multi-mcp
注意: ida-multi-mcp --install は python3 -m ida_multi_mcp を使用してMCPサーバーを登録しますが、macOSでは誤ったPythonバージョンを指すことがあります。Claude Codeの場合は、上記のように claude mcp add を使用して、pipxで管理されているCLIを直接使用するようにしてください。
Windows
ida-multi-mcp --uninstall
python -m pip uninstall -y ida-multi-mcp
python -m pip install git+https://github.com/MeroZemory/ida-multi-mcp.git
ida-multi-mcp --install
IDAがデフォルトとは異なるPythonバージョンを使用している場合は、python の代わりに py -3.12(IDAのバージョンに置き換える)を使用してください。
%USERPROFILE%\\.codex\\config.toml を手動で編集する場合は、WindowsパスにはリテラルTOML引用符を使用してください(例:[projects.'\\?\\C:\\path\\to\\repo'], command = 'C:\\...\\python.exe')。
Linux
pip install --user git+https://github.com/MeroZemory/ida-multi-mcp.git
ida-multi-mcp --install
AIエージェント向けのインストール方法
インストールガイドを取得して従ってください。
curl -s https://raw.githubusercontent.com/MeroZemory/ida-multi-mcp/main/docs/installation.md
ガイドには以下の内容が含まれています。
- プラットフォーム固有のパッケージインストール(macOS、Windows、Linux)
- IDAのPythonバージョンの一致
- IDAプラグインのセットアップ + MCPクライアントの自動設定 (
ida-multi-mcp --install)
- 検証とトラブルシューティング
サポートされるMCPクライアント
任意のMCP互換クライアントで動作します。以下のクライアントでテスト済みです。
| クライアント |
タイプ |
| Claude Code |
CLI |
| Claude Desktop |
デスクトップ |
| Cursor |
IDE |
| VS Code (Copilot) |
IDE |
| Windsurf |
IDE |
| Zed |
IDE |
| Augment Code |
IDE |
| Cline |
拡張機能 |
| Kilo Code |
拡張機能 |
| Kiro |
IDE |
| LM Studio |
デスクトップ |
| Opencode |
CLI |
| Qodo Gen |
拡張機能 |
| Roo Code |
拡張機能 |
| Trae |
IDE |
| Warp |
ターミナル |
| Amazon Q Developer CLI |
CLI |
| Copilot CLI |
CLI |
| Gemini CLI |
CLI |
MCPクライアントの設定
ida-multi-mcp --install は、検出されたすべてのMCPクライアントを自動的に設定します。
- Claude Code、Claude Desktop、Cursor、Windsurf、VS Code、Zedなど20以上のクライアント
自動検出されないクライアントの場合、または設定JSONを表示するには、以下のコマンドを実行します。
ida-multi-mcp --config
アンインストール
macOS
ida-multi-mcp --uninstall
pipx uninstall ida-multi-mcp
python3.11 -m pip uninstall -y ida-multi-mcp
Windows
ida-multi-mcp --uninstall
ida-multi-mcp --uninstall --ida-dir "C:\Program Files\IDA Pro 9.0"
python -m pip uninstall -y ida-multi-mcp
アンインストール後、IDA ProとMCPクライアントを完全に再起動して、削除された設定が反映されるようにしてください。
使い方
複数のバイナリを開く
- IDA Proを開き、最初のバイナリ(例:
malware.exe)を読み込みます。
- プラグインが自動的に読み込まれます(PLUGIN_FIXフラグ)。
- インスタンスが4文字のID(例:
k7m2)で自動的に登録されます。
- 別のIDA Proインスタンスを開き、2番目のバイナリ(例:
dropper.dll)を読み込みます。
- 別のインスタンスが自動的に登録されます(例:
px3a)。
- 必要に応じてこの手順を繰り返します。
登録されたインスタンスを表示する
ida-multi-mcp --list
出力例:
Registered IDA instances (3):
k7m2
Binary: malware.exe
Path: C:/samples/malware.exe
Arch: x86_64
Port: 49152
PID: 12345
px3a
Binary: dropper.dll
Path: C:/samples/dropper.dll
Arch: x86_64
Port: 49153
PID: 12346
9bf1
Binary: payload.exe
Path: C:/samples/payload.exe
Arch: x86
Port: 49154
PID: 12347
LLMで使用する
接続後、71以上のIDAツールが使用可能になります。すべてのIDAツール呼び出しには instance_id パラメータが必要です。これにより、エージェント間の競合を避けることができます。
単一インスタンスの分析:
Decompile the main function in malware.exe (k7m2)
クロスバイナリ分析:
Decompile main in malware.exe (k7m2) and compare it with the entry point in dropper.dll (px3a)
✨ 主な機能
- ゼロコンフィグレーションのインスタンス検出 — 各IDA Proインスタンスは起動時に自動的に登録されます。
- ポート衝突の回避 — OSによって自動的に割り当てられるポート(ポート0)を使用します。
- 動的なツール検出 — 71以上のIDAツールが自動的に利用可能になります。
- クロスバイナリ分析 —
instance_id パラメータを使用して特定のインスタンスをターゲットにできます。
- スマートなインスタンス追跡 — 4文字のID(k7m2、px3aなど)で、バイナリの変更を自動的に検出します。
- ファイルベースのレジストリ — すべてのアクティブなインスタンスを追跡します。
- グレースフルなフォールバック — バイナリの変更、古いインスタンス、クラッシュを適切に処理します。
🔧 管理ツール
サーバーには、以下の組み込み管理ツールが用意されています。
list_instances()
登録されているすべてのIDAインスタンスとそのメタデータ(バイナリ名、パス、アーキテクチャ、ポート)をリストします。
refresh_tools()
IDAインスタンスからツールを再検出します。IDAプラグインを更新した場合は、このコマンドを使用してください。
get_cached_output(cache_id: str, offset: int = 0, size: int = 20000)
以前のツール呼び出しで切り捨てられたキャッシュされた出力を取得します。
decompile_to_file(...)
関数を逆コンパイルし、結果を直接ディスク上のファイルに保存します。instance_id が必要です。
インスタンスIDの説明
インスタンスIDは、k7m2、px3a、9bf1 のような4文字のbase36文字列(0-9、a-z)です。
なぜ4文字なのか?
- 短く、読みやすい
- 168万の組み合わせがあり、通常の使用では衝突しません
- 衝突が検出された場合、自動的に5文字に拡張されます
どのように生成されるのか?
- プロセスID、ポート、およびIDBファイルのパスに基づいて生成されます
- 同じバイナリを再開すると、同じIDが割り当てられます(決定論的)
- バイナリが置き換えられたり変更されたりすると、新しいIDが自動的に割り当てられます
バイナリを変更するとどうなるのか?
IDAインスタンスで異なるバイナリを開くと、以下のようになります。
- 古いインスタンスが期限切れになります(例:
k7m2 → 期限切れ)
- 新しいインスタンスが登録されます(例:
b12)
- LLMが古いIDを使用しようとすると、置き換えIDを含む有益なエラーメッセージが表示されます
CLIコマンド
ida-multi-mcp
MCPサーバーを起動します(stdio)。MCPクライアントによって使用されます。これはデフォルトのコマンドです。
ida-multi-mcp
ida-multi-mcp --list
登録されているすべてのIDAインスタンスをリストします。
ida-multi-mcp --list
ida-multi-mcp --install [--ida-dir DIR]
IDAプラグインをインストールし、検出されたすべてのMCPクライアント(Claude Code、Claude Desktop、Cursor、Windsurf、VS Code、Zedなど20以上)を自動的に設定します。
ida-multi-mcp --install
ida-multi-mcp --install --ida-dir "C:\Program Files\IDA Pro 9.0"
ida-multi-mcp --uninstall [--ida-dir DIR]
IDAプラグインを削除し、レジストリをクリーンアップし、MCPクライアントの設定を削除します。
ida-multi-mcp --uninstall
ida-multi-mcp --config
MCPクライアントの設定JSONを印刷して、簡単に参照できるようにします。
ida-multi-mcp --config
🔧 技術詳細
インスタンスレジストリ
場所:
- macOS/Linux:
~/.ida-mcp/instances.json
- Windows:
%USERPROFILE%\.ida-mcp\instances.json
各登録されたインスタンスには、以下の情報が含まれています。
- id — 4文字のインスタンス識別子(k7m2、px3aなど)
- pid — IDA ProインスタンスのプロセスID
- host — 常に127.0.0.1(ローカルホスト)
- port — 動的に割り当てられるHTTPポート
- binary_name — ファイル名(malware.exe、driver.dllなど)
- binary_path — バイナリの完全パス
- arch — アーキテクチャ(x86_64、x86、arm64など)
- registered_at — インスタンスが登録されたタイムスタンプ
- last_heartbeat — 最後のハートビートチェックのタイムスタンプ
IDAプラグインディレクトリ
- macOS/Linux:
~/.idapro/plugins/
- Windows:
%APPDATA%\Hex-Rays\IDA Pro\plugins\
リクエストルーティング
- MCPクライアントが、必要な
instance_id パラメータを指定してツール(例:decompile)を呼び出します。
- サーバーがHTTP JSON-RPCを介してターゲットインスタンスにリクエストをルーティングします。
- IDAインスタンスがリクエストを処理します。
- 結果がクライアントに返されます。
ヘルスモニタリング
- 各IDAインスタンスは60秒ごとにハートビートを送信します。
- 古いインスタンス(2分以上ハートビートがない)は自動的にクリーンアップされます。
- サーバー起動時に、死んだプロセスがレジストリから削除されます。
- インスタンスがクラッシュした場合、その後のリクエストには有益なエラーメッセージが返されます。
バイナリ変更検出
2つの戦略を使用してバイナリの変更を検出します。
プライマリ(高速) — IDAイベントフックがバイナリの変更を即座に検出します。
フォールバック(安全) — 各ツール呼び出しでバイナリが変更されていないことを確認し、フックの失敗を処理します。
バイナリの変更が検出されると、以下のようになります。
- 古いインスタンスIDが期限切れとしてマークされます。
- 新しいインスタンスが新しいIDで登録されます。
- LLMには、置き換えIDを含む有益なメッセージが送信されます。
トラブルシューティング
"No IDA instances registered"
以下のことを確認してください。
- IDA Proがバイナリを読み込んで実行されていること。
- IDAのプラグインリスト(Edit → Plugins → Scan)を確認し、
ida-multi-mcp プラグインが読み込まれていること。
- IDAコンソールにエラーメッセージが表示されていないこと。
ida-multi-mcp --list を再度実行する。
"Instance 'k7m2' not found"
インスタンスがクラッシュしたか、期限切れになっています。以下のコマンドを実行して、利用可能なインスタンスを確認し、有効なIDを使用してください。
ida-multi-mcp --list
"Instance 'k7m2' expired. Replaced by 'px3a'"
そのIDAインスタンスで異なるバイナリを開いたため、これは正常な動作です。新しいインスタンスID(px3a)を使用してください。
プラグインがIDAに読み込まれない / "No module named 'ida_multi_mcp'"
これは通常、Pythonバージョンの不一致により、IDAのPythonがパッケージを見つけられないことを意味します。
-
IDAのPythonバージョンを確認する — IDAコンソールで以下のコマンドを実行します。
import sys; print(sys.version)
-
その特定のPythonバージョンにパッケージをインストールする。
macOS:
python3.11 -m pip install --user git+https://github.com/MeroZemory/ida-multi-mcp.git
Windows:
py -3.12 -m pip install git+https://github.com/MeroZemory/ida-multi-mcp.git
-
IDAプラグインディレクトリに ida_multi_mcp.py が含まれていることを確認する。
- macOS/Linux:
~/.idapro/plugins/
- Windows:
%APPDATA%\Hex-Rays\IDA Pro\plugins\
-
IDA Proを再起動する。
MCPサーバーが接続できない(macOS)
MCPクライアントで ida-multi-mcp の Status: failed が表示される場合は、登録されているコマンドが誤ったPythonバージョンを指している可能性があります。
-
設定されているコマンドを確認する(例:.claude.json, .cursor/mcp.json)。
-
python3 -m ida_multi_mcp と表示されている場合は、pipxで管理されているCLIに置き換える。
Claude Code:
claude mcp remove ida-multi-mcp -s user
claude mcp add ida-multi-mcp -s user -- ida-multi-mcp
その他のクライアント: MCP設定JSONを編集し、以下のように変更する。
{
"command": "ida-multi-mcp",
"args": []
}
-
MCPクライアントを再起動する。
CodexがWindowsでTOML解析エラーで起動できない
Codexが %USERPROFILE%\.codex\config.toml に対して invalid unquoted key のようなエラーを出力する場合は、設定に有効なTOML構文ではないWindowsパスが含まれています。
Windowsパスにはリテラル引用符で囲まれたキー/文字列使用してください。
[projects.'\\?\C:\Git\MeroZemory\tidy-up']
trust_level = "trusted"
[mcp_servers.ida-multi-mcp]
command = 'C:\Users\MeroZemory\AppData\Local\Programs\Python\Python311\python.exe'
args = ["-m", "ida_multi_mcp"]
\\?\... のプロジェクトテーブルキーを引用符なしで使用しないでください。また、バックスラッシュをエスケープしない限り、二重引用符で囲まれたWindowsパスを使用しないでください。
設計上の決定
| 決定 |
理由 |
| ポート0(自動割り当て) |
ポートの衝突を排除し、無制限のインスタンスにスケールできます。 |
| 4文字のbase36 ID |
短く、読みやすく、168万の組み合わせがあり、覚えやすいです。 |
| ファイルベースのレジストリ |
シンプルで、プロセス間で共有でき、デバッグしやすく、データベースに依存しません。 |
| 動的なツール検出 |
将来的な拡張に対応し、自動更新が可能で、ツールリストをハードコードする必要がありません。 |
| 二重のバイナリ変更検出 |
IDAフックが失敗した場合の堅牢なフォールバック機能があります。 |
パフォーマンス
- レジストリ操作: <1ms (JSONファイル、ファイルロック)
- ツール検出: IDAインスタンスごとに約50ms (一度のキャッシュ)
- ツール呼び出しのルーティング: <5ms (ローカルHTTP JSON-RPC)
- ハートビート間隔: 60秒 (無視できるほどのオーバーヘッド)
制限事項
- 127.0.0.1のみをサポートしています(ローカルホストでの分析)
- v1.0ではリモートIDAインスタンスはサポートされていません
- まだIDAのバッチ/ヘッドレス(idalib)モードはサポートされていません
- v1.0では、リソース(ツールではない)のルーティングは手動で行う必要があります
📄 ライセンス
MIT
コントリビューション
コントリビューションを歓迎します!以下のことを確認してください。
- Python 3.11以上との互換性
- クロスプラットフォーム(Windows、macOS、Linux)
- クリーンで読みやすいコード
- 新機能に対するテスト
謝辞
このプロジェクトは、Duncan Ogilvie (mrexodia)による ida-pro-mcp に触発されて構築されました。IDAツールの実装(71以上のツール)はida-pro-mcpに由来し、ida-multi-mcpにバンドルパッケージとして取り込まれ、その上にマルチインスタンスオーケストレーションが追加されています。
インストール方法(AIエージェントにやさしいインストールガイド)は、Yeongyu Yun (code-yeongyu)による oh-my-opencode に影響を受けています。
関連プロジェクト
- ida-pro-mcp — 元のシングルインスタンスIDA MCPプラグイン(ツールはここから派生) (MIT License)
- Claude Code — ネイティブサポートのあるMCPクライアント
- Cursor — MCP対応の代替エディタ
サポート
問題、機能リクエスト、または質問については、以下のことを行ってください。
- 上記のトラブルシューティングセクションを確認する
- アーキテクチャの詳細についてはDESIGN.mdを確認する
- GitHubでイシューを開く