🚀 ida-multi-mcp
ida-multi-mcp 是一個多實例 IDA Pro MCP 服務器,可通過單個 MCP 端點同時對多個二進制文件進行逆向工程。藉助該工具,用戶能夠使用 IDA Pro 並行分析多個二進制文件,所有實例均可通過單一 MCP 連接訪問,無需為每個實例單獨配置 MCP 客戶端。
🚀 快速開始
ida-multi-mcp 允許你使用 IDA Pro 並行分析多個二進制文件,所有實例都可以通過一個 MCP 連接訪問。你只需打開多個 IDA 實例,服務器會自動發現並將請求路由到每個實例,而無需管理多個 MCP 客戶端配置。
MCP Client (Claude, Cursor, etc.)
│ stdio (MCP Protocol)
▼
┌─────────────────────────────────┐
│ ida-multi-mcp Server (Router) │
│ - 動態工具發現 │
│ - 注入 instance_id │
│ - 管理工具 │
└───┬──────┬──────┬───────────────┘
│ │ │ HTTP JSON-RPC
▼ ▼ ▼
IDA #1 IDA #2 IDA #3
(自動) (自動) (自動)
✨ 主要特性
- 零配置實例發現:每個 IDA Pro 實例在啟動時自動註冊。
- 無端口衝突:使用操作系統自動分配的端口(端口 0)。
- 動態工具發現:所有 71 種以上的 IDA 工具可自動使用。
- 跨二進制分析:通過
instance_id 參數指定特定實例。
- 智能實例跟蹤:使用 4 字符 ID(如 k7m2、px3a 等),並自動檢測二進制文件的更改。
- 基於文件的註冊表:跟蹤所有活動實例。
- 優雅回退:處理二進制文件更改、過時實例和崩潰情況。
📦 安裝指南
手動安裝
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 版本與默認版本不同,請使用 py -3.12(替換為 IDA 的版本)而不是 python。如果你手動編輯 %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
💻 使用示例
打開多個二進制文件
-
打開 IDA Pro 並加載第一個二進制文件(例如 malware.exe)
- 插件會自動加載(PLUGIN_FIX 標誌)
- 實例會自動註冊並獲得一個 4 字符 ID(例如
k7m2)
-
打開另一個 IDA Pro 實例並加載第二個二進制文件(例如 dropper.dll)
-
重複上述步驟以處理更多二進制文件
查看已註冊的實例
ida-multi-mcp --list
輸出示例:
已註冊的 IDA 實例 (3):
k7m2
二進制文件: malware.exe
路徑: C:/samples/malware.exe
架構: x86_64
端口: 49152
PID: 12345
px3a
二進制文件: dropper.dll
路徑: C:/samples/dropper.dll
架構: x86_64
端口: 49153
PID: 12346
9bf1
二進制文件: payload.exe
路徑: C:/samples/payload.exe
架構: x86
端口: 49154
PID: 12347
在大語言模型中使用
連接後,所有 71 種以上的 IDA 工具均可使用。所有 IDA 工具調用都需要 instance_id 參數,以避免跨代理衝突。
分析單個實例:
反編譯 malware.exe (k7m2) 中的主函數
跨二進制分析:
反編譯 malware.exe (k7m2) 中的 main 函數,並將其與 dropper.dll (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 是 4 字符的 base36 字符串(0 - 9,a - z),如 k7m2、px3a、9bf1。
為什麼是 4 個字符?
- 簡短易讀
- 有 168 萬種組合(在典型使用中無衝突)
- 如果檢測到衝突,會自動擴展到 5 個字符
它們是如何生成的?
- 基於進程 ID、端口和 IDB 文件路徑生成
- 重新打開相同的二進制文件會得到相同的 ID(確定性)
- 替換/更改二進制文件會生成新的 ID(自動)
更改二進制文件時會發生什麼?
當你在 IDA 實例中打開不同的二進制文件時:
- 舊實例過期(例如
k7m2 → 過期)
- 新實例註冊(例如
b12)
- 如果大語言模型嘗試使用舊 ID,會收到一個包含替換 ID 的有用錯誤信息
CLI 命令
ida-multi-mcp
啟動 MCP 服務器(標準輸入輸出)。供 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 客戶端調用工具(例如
decompile)並提供所需的 instance_id 參數
- 服務器通過 HTTP JSON-RPC 將請求路由到目標實例
- IDA 實例處理請求
- 結果返回給客戶端
健康監測
- 每個 IDA 實例每 60 秒發送一次心跳
- 過時的實例(2 分鐘以上無心跳)會自動清理
- 服務器啟動時,會從註冊表中移除已死亡的進程
- 如果實例崩潰,後續請求會收到有用的錯誤信息
二進制文件更改檢測
使用雙重策略檢測:
主要(快速):當二進制文件更改時,IDA 事件鉤子會立即觸發
備用(安全):每次工具調用都會驗證二進制文件是否更改,以處理鉤子失敗的情況
當檢測到二進制文件更改時:
- 舊實例 ID 標記為過期
- 新實例使用新 ID 註冊
- 大語言模型會收到包含替換 ID 的有用消息
故障排除
"No IDA instances registered"
確保:
- IDA Pro 正在運行並加載了二進制文件
- 檢查 IDA 的插件列表(編輯 → 插件 → 掃描)以確認
ida-multi-mcp 插件已加載
- 檢查 IDA 控制檯是否有錯誤消息
- 再次運行
ida-multi-mcp --list
"Instance 'k7m2' not found"
該實例已崩潰或過期。運行:
ida-multi-mcp --list
查看可用實例,然後使用有效的 ID。
"Instance 'k7m2' expired. Replaced by 'px3a'"
你在該 IDA 實例中打開了不同的二進制文件。這是正常現象。使用新的實例 ID (px3a)。
插件未在 IDA 中加載 / "No module named 'ida_multi_mcp'"
這通常意味著 IDA 的 Python 由於 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 客戶端顯示 Status: failed 表示 ida-multi-mcp 連接失敗,註冊的命令可能指向錯誤的 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 打印類似 invalid unquoted key 的錯誤信息,對於 %USERPROFILE%\.codex\config.toml,配置中包含的 Windows 路徑不是有效的 TOML 語法。
對 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)
- 代碼簡潔易讀
- 為新功能添加測試
致謝
本項目受到 ida-pro-mcp 的啟發並基於其構建,該項目由 Duncan Ogilvie (mrexodia) 開發。IDA 工具的實現(71 種以上的工具)源自 ida-pro-mcp,並已作為捆綁包集成到 ida-multi-mcp 中,在此基礎上增加了多實例編排功能。
安裝方法(對 AI 代理友好的安裝指南)受到 oh-my-opencode 的影響,該項目由 Yeongyu Yun (code-yeongyu) 開發。
相關項目
- ida-pro-mcp:原始的單實例 IDA MCP 插件(工具源自此處)(MIT 許可證)
- Claude Code:原生支持 MCP 的客戶端
- Cursor:支持 MCP 的替代編輯器
支持
如果你遇到問題、有功能請求或疑問,請:
- 查看上面的故障排除部分
- 查看 DESIGN.md 瞭解架構細節
- 在 GitHub 上提交問題