面向 IDA Pro/Home 的本地优先、确定性 MCP 服务器:109 项严格模式逆向工程操作、有证据支持的发现结果,以及受策略门控的 IDB 编辑。
⚠️ 已归档 — 已被官方 Hex-Rays IDA MCP 服务器取代
本项目已不再维护。 2026-09-27,Hex-Rays SA 发布了 官方 IDA MCP 服务器 和 IDA Nexus。开发于同日 在
1.0.0a4版本停止。如需当前使用,请安装他们的版本:
uvx ida-hcli mcp install。它需要 IDA 9.4+ 及idalib,可完全无头运行;GUI 插件为可选。本仓库保留用于其测试套件、文档和架构记录。完整收尾说明见 ARCHIVE.md:项目曾是什么、为何失败、哪些部分是脚手架、 哪些部分仍有价值。本 README 的其余部分描述的系统已不再推荐使用。

IDA Pro MCP 是面向 IDA Pro 的本地模型上下文协议服务器。它允许 MCP 客户端检查 IDB、向 IDA 请求确定性分析结果,并在明确允许时, 将注释或其他更改写回 IDB。宿主进程在 IDA 之外运行,默认会为每个 会话启动一个独立的 IDA 无头进程。
ida_* 操作,可通过
tools/list 和 ida_help 实时发现。当前版本为 1.0.0a4。这是 alpha 软件。公开的 ida_* 操作名称、
schema 和工作区格式在稳定版 1.0.0 发布前可能发生变化。默认客户端接口
包含 102 个精确 schema 操作。请使用实时发现获取完整契约:tools/list
枚举每个操作及其 schema,ida_help(topic="...") 返回单个操作的精确
参数和示例。
你需要:
idat/idat64
可执行文件。仓库的实时测试证据覆盖 IDA 9.3 和 9.4;9.2 是声明的
兼容性下限。常规分析不需要智能提供方。显式智能模式为 jev、custom 和
disabled;禁用模式保留确定性词法搜索可用,且没有本地、Gemini 或
原生模型回退。
默认运行时为 idat:每个会话一个无头 IDA 进程。idalib 后端为
实验性,需要 IDA 9.3 或更新版本的安装并激活 idapro 包,首次安装
无需使用。
安装器会在安装根目录下创建受管理环境,将检出的冻结副本安装到其中, 并为支持的客户端位置写入客户端配置。在仓库根目录下运行:
python3 install.py
对于已知的 IDA 安装,请显式传入:
python3 install.py --ida-dir /path/to/ida-pro-9.3
对于非交互式运行:
python3 install.py --yes --no-ida-prompt --ida-dir /path/to/ida-pro-9.3
安装程序还可以通过 IDADIR、IDA_DIR、PATH 上的 IDA 可执行文件以及常见安装目录来查找 IDA。当存在多个安装时,--ida-version 用于选择版本。请先使用 --dry-run 查看计划中的更改。
安装程序绝不会下载提供程序模型或运行时。它可能会为其内置客户端映射中的每个客户端位置创建或更新配置文件,包括未安装在您机器上的客户端。请检查安装根目录中的 install-report.json,必要时删除未使用的条目。现有的常规配置文件在更改前会被备份;格式错误、符号链接或非常规文件将被拒绝,而不会被覆盖。
安装后请重启 MCP 客户端,以便其重新加载配置。
Agent harnesses 会实时发现工具接口:tools/list 会枚举每个操作及其 schema,ida_help(topic="...") 会返回确切的参数和一个示例。不会安装静态技能文件。
默认安装根目录为:
~/.local/share/ida-pro-mcp%LOCALAPPDATA%/ida-pro-mcp设置 IDA_PRO_MCP_HOME 或传入 --install-root 以选择其他位置。
Alpha 版本由 GitHub Actions 构建,并作为预发布版本手动发布。当有可用发布版本时,请从发布页面下载 bundle.zip 或 bundle.tar.gz 资产及其 SHA256SUMS 文件。验证校验和,解压捆绑包,并从其顶层目录运行安装程序:
python3 install.py --yes --no-ida-prompt --ida-dir /path/to/ida-pro-9.3
发布包还包含用于脚本化 Python 安装的 wheel 和源码分发包。捆绑包是最简单的途径,因为它包含安装程序以及配置 MCP 客户端所需的全部项目文件。发布版本为 alpha 质量;升级前请保留原始二进制文件和 IDB,并阅读发布说明。
安装程序会为其已知的客户端配置路径写入服务器条目。它支持 Gemini CLI、Antigravity、Antigravity IDE、Antigravity CLI、Claude Code、Codex、Copilot CLI、OpenCode、Claude Desktop、Cursor、VS Code、Windsurf、Cline 和 Roo Code。 OpenCode 和 Copilot 系列客户端使用不同的配置结构;请让安装程序写入这些文件,或遵循 OpenCode 设置指南。
对于使用通用 JSON 格式的客户端,该条目等同于:
{
"mcpServers": {
"ida-pro-mcp": {
"command": "/path/to/ida-pro-mcp/.venv/bin/python",
"args": ["-u", "-m", "ida_pro_mcp.host.server"],
"env": {
"IDA_PRO_MCP_HOME": "/path/to/ida-pro-mcp",
"IDADIR": "/path/to/ida-pro-9.3",
"IDA_MCP_TOOL_SURFACE": "agent"
}
}
}
}
在 Windows 上,请使用位于
<install-root>/.venv/Scripts/python.exe 的托管解释器。关键细节包括
托管解释器、-u -m ida_pro_mcp.host.server、所选的 IDA
目录,以及 IDA_MCP_TOOL_SURFACE=agent。不要将客户端指向
install.py;该文件是安装程序,而不是 MCP 服务器。
更改客户端配置后,请完全重启客户端,并检查
ida_help 是否出现在其可用操作中。如果客户端仅显示
旧版宽泛的 tool(action=...) 接口,请检查环境是否选择了
默认的 agent 表面,而不是
IDA_MCP_TOOL_SURFACE=legacy。
首先使用测试二进制文件的绝对路径。打开二进制文件通常会等待 IDA 的初始分析完成;大型二进制文件可能需要一些时间。
ida_open_binary(binary_path="/absolute/path/to/sample")
ida_session_status()
ida_overview()
ida_list_imports(limit=30)
ida_list_strings(query="http", limit=30)
ida_find(query="main", limit=20)
ida_decompile(address="<address returned by IDA>")
ida_xrefs_to(address="<same address>")
每当需要精确的参数 schema 时,请使用 ida_help(topic="ida_decompile")。公共操作的 schema 是严格的:未知参数会被拒绝。根据各个操作的约定,地址可以接受为整数或字符串;请在你的客户端中使用 ida_help 为该操作所显示的形式。
对于小型调查记录,工作区发现操作如下:
ida_write_finding(title="Input reaches parser", address="<address returned by IDA>", kind="finding", status="confirmed", confidence=0.8, evidence=[{"type":"call", "value":"recv", "address":"<evidence address>"}])
ida_analysis_brief()
ida_next_target()
ida_export_findings(format="markdown")
工作区发现结果与 IDB 编辑分开保存。如果当前策略允许工作区写入,ida_write_finding 会在本地记录一条发现结果;否则服务器会返回策略错误。ida_publish_findings(dry_run=true) 会预览 IDB 变更。发布、重命名、打补丁以及其他 IDB 变更操作都受策略门控,并且在操作提供确认机制时,需要按照该操作的文档要求进行确认。
首页保持以任务为导向,但这个紧凑索引让公开接口易于浏览。下面每个名称在调用时都会加上 ida_ 前缀。完整的 schema 和示例可通过 tools/list 和 ida_help(topic="...") 实时获取。
| 分组 | 操作 |
|---|---|
| 会话 | open_binary、open_background、session_state、session_status、session_health、close_session、session_get、session_list、sso_activate、agent_login、agent_logout、session_switch |
| 发现 | overview、find、semantic_search、intelligence_status、usage_status、usage_report、reranker_status、index_functions、index_status、cancel_index、list_functions、list_strings、list_imports、list_types、list_segments、list_sigs、sreg_get、sreg_list、auto_wait、events、registers、search_data_value、search_query_lang |
| 情报 | intelligence_status、usage_status、usage_report |
| 代码 | decompile、disassemble、compare_functions、diff_sessions、xrefs_to、callers、callees、read_bytes、get_type、callgraph、emulate |
| 发现结果 | write_finding、mark_examined、list_findings、search_findings、update_finding、export_findings、publish_findings、import_annotations、analysis_brief、next_target |
| 编辑 | create_function、change_function、rename、comment、patch_bytes、save_idb、make_code、undefine、rename_local、declare_type、apply_type、add_segment、set_segment_attrs、apply_sig、sreg_set、create_data、create_strlit、undo_begin、undo_end、add_entry、idb_snapshot、idb_restore_snapshot、struct_member_add、struct_member_del、struct_member_rename、struct_member_set_type、enum_member_add、enum_member_rename、enum_member_revalue、til_delete、til_export、til_import、import_system_map、mark_dangerous |
| 计算 | calc_eval、calc_offset、calc_convert、calc_resolve、calc_deref、calc_chain、calc_align、calc_bitops |
| 支持 | python、continue、help |
| 工作流 | batch |
服务器的基线策略是 assist。会话可以收紧操作员的基线策略,但不能放宽它。该策略是确定性的;它不会因为客户端请求就判定某个高风险操作是安全的。
只读检查是正常的起点。示例包括 ida_overview、ida_find、ida_list_functions、ida_list_strings、ida_list_imports、ida_decompile、ida_disassemble、ida_xrefs_to、ida_callers、ida_callees、ida_callgraph、ida_read_bytes 以及各项计算操作。这些操作仍会消耗本地文件和 IDA 资源,并且 MCP 客户端会收到它们的结果。
以下操作会更改持久状态或执行代码,应被视为高影响操作:
ida_rename、ida_comment、ida_patch_bytes、函数/类型/段/数据
变更、签名应用、ida_save_idb、快照以及撤销/恢复
操作都可能更改 IDB 或相关状态。ida_publish_findings 会将发现写入 IDB。请先运行其试运行形式;
非试运行形式受门控限制。ida_close_session 会拆除正在运行的 IDA 运行时,从
会话的角度来看具有破坏性。ida_python 会在活动的 IDA 进程中执行任意 Python。它在安全模式下
被阻止,并且在正常策略下需要显式的风险确认。ida_emulate 对于受控检查很有用,但会改变状态的模拟器操作
需要相应的确认。ida_til_export 和 ida_til_import 会访问文件系统并受门控限制。
在适用该防护的情况下,文件系统路径受配置的内存根目录约束。