🚀 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 上提交问题