ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【MCP】ida-pro-mcp 入门实战:安装、启动并用 MCP Inspector 调通四层连通

【MCP】ida-pro-mcp 入门实战:安装、启动并用 MCP Inspector 调通四层连通

1. 为什么 ida-pro-mcp 装完还是连不上:四层连通到底卡在哪

ida-pro-mcp 是一个把 IDA Pro 的逆向分析能力通过 MCP 协议暴露给 AI 客户端的桥接工具,简单说就是让 Claude、Codex 这类客户端能直接调用 IDA 的反编译、函数列表、内存读取等能力。它适合做逆向工程、恶意样本分析、固件审计的初学者和中级选手,尤其是那些已经习惯用 AI 辅助读代码、但不想在 IDA 和聊天窗口之间反复复制粘贴的人。

但很多人第一次装完会遇到一个很迷惑的状态:命令行没报错,插件也装了,客户端配置也写了,可就是调不通。原因在于 ida-pro-mcp 的链路不是一层,而是四层——MCP 客户端、代理进程、IDA 插件 HTTP 服务、IDB 查询执行。任何一层断了,表现都是“工具调不出来”,但排查方向完全不同。

我试过在一台 Windows 机器上从零走完整条链路,踩过的坑集中在 Python 版本、插件目录、端口发现和 profile 白名单这四件事上。这篇就按“装完能跑通四层”为目标,把每一步的可复制命令、配置片段和 Inspector 验证动作写清楚,最后把 endpoint 切到 TaoToken 统一 Key 通道做鉴权联调,用 Inspector 四层全绿作为验收。

先明确环境基线,不满足的话后面全是白费功夫:

环境项要求
Python3.11 及以上,推荐 3.12/3.13
IDA Pro8.3 及以上,推荐 9.0 及以上
MCP 客户端至少一个受支持客户端,也可手工配置
HeadlessIDA 9.0+ 的 idalib,需先完成激活

IDA Free 不能加载第三方插件,所以不在支持范围内。IDA 9.0+ 默认自带 Python 3.12,较旧版本如果 Python 不达标,用 IDA 自带的idapyswitch.exe切换解释器,这一步后面排错章节会展开。

四层连通的判定标准不是“命令没报错”,而是:客户端能看到服务器、代理能运行、插件能监听、只读 IDB 调用能返回结果。下面按这个顺序拆。

2. 装 ida-pro-mcp 前把 Python 和 IDA 插件目录理清楚

安装 ida-pro-mcp 最容易翻车的地方不是包本身,而是 Python 解释器和 IDA 插件搜索路径没对齐。先做三项检查,确认它们不是“各自可用”,而是能被安装器找到。

第一项,在准备运行 ida-pro-mcp 的终端里确认 Python 版本:

python --version python -c "import sys; print(sys.executable)"

输出必须是 3.11 以上,并且记住这个sys.executable路径,后面配置客户端时会用到。如果系统里有多个 Python,务必确认python指向的是你想要的那个。

第二项,确认 IDA Pro 能正常启动并加载一个测试二进制。打开 IDA,加载任意一个 PE 或 ELF,确认反编译窗口正常。然后在 IDA 的 Python Console 里跑一段,看 IDA 自己报告的插件搜索路径:

import ida_diskio print("用户目录:", ida_diskio.get_user_idadir()) print("插件搜索路径:") for path in ida_diskio.get_ida_subdirs("plugins"): print(" ", path)

这段输出非常关键。Windows 未设置IDAUSR时,默认用户插件目录是%APPDATA%\Hex-Rays\IDA Pro\plugins;macOS / Linux 是~/.idapro/plugins/。如果设置了IDAUSR,一切以 IDA 自己报告的路径为准,不要凭记忆猜。

第三项,确认目标 MCP 客户端的配置范围是用户级还是项目级。用户级配置对所有项目生效,项目级只对当前目录生效。初学者建议先用用户级,减少变量。

安装 ida-pro-mcp 本身有两条路线。路线 A 是 Codex 用户当前推荐的方式,通过插件市场安装,走的是 idalib-mcp,不需要先执行ida-pro-mcp --install:

codex plugin marketplace add mrexodia/codex-marketplace codex plugin remove ida-pro-mcp@mrexodia codex plugin add ida-pro-mcp@mrexodia

如果此前没装过,第二条 remove 提示未找到可以忽略。装完重启 Codex,首次运行可能要等 uv 解析依赖。

路线 B 是 IDA GUI 插件兼容路线,官方已说明 GUI MCP 插件不再是推荐方案,未来可能弃用,但很多初学者还是需要它。先装当前 GitHub 主分支版本:

python -m pip uninstall -y ida-pro-mcp python -m pip install "https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip" python -m ida_pro_mcp.server --install

最后一条用模块方式启动,不依赖ida-pro-mcp可执行文件是否在 PATH 里。如果ida-pro-mcp --help能输出帮助,也可以继续用官方 README 里的短命令ida-pro-mcp --install。

安装器会同时做两件事:把插件部署到 IDA 用户插件目录,并向检测到的 MCP 客户端写入服务器配置。需要手工配置时用:

python -m ida_pro_mcp.server --config

插件由两部分构成,缺一不可:

IDA 用户插件目录/ ├── ida_mcp.py # 插件入口与热重载加载器 └── ida_mcp/ # HTTP、RPC、同步层及 API 模块

IDA 不是根据 Python 包名找 MCP,而是启动时扫描插件搜索路径里的脚本。ida_mcp.py被导入后,调用全局PLUGIN_ENTRY(),返回继承自idaapi.plugin_t的实例,其中wanted_name = "MCP"决定菜单名,wanted_hotkey = "Ctrl-Alt-M"声明快捷键:

class MCP(idaapi.plugin_t): flags = idaapi.PLUGIN_KEEP wanted_name = "MCP" wanted_hotkey = "Ctrl-Alt-M" def PLUGIN_ENTRY(): return MCP()

如果菜单没出现,先检查实际搜索路径里是否同时存在ida_mcp.py和ida_mcp/。只有旧版mcp-plugin.py、只装了 Codex 的 idalib-mcp、或者安装器写入的目录不在当前搜索路径中,都不会加载新版 GUI 菜单。

3. 可复制的客户端配置:Base URL、Key、Model ID 三件套

这一节给出可直接粘贴的配置片段。ida-pro-mcp 本身是本地 HTTP 服务,默认监听127.0.0.1:13337,但如果你要把上游模型调用统一走 TaoToken 的 Key 通道,就需要在客户端侧把 Base URL、Key、Model ID 三件套写全。下面按不同客户端分别给。

先看 ida-pro-mcp 自己的客户端配置。安装器写入的 stdio 模式配置大致长这样,路径以你实际客户端为准:

{ "mcpServers": { "ida-pro-mcp": { "command": "python", "args": ["-m", "ida_pro_mcp.server"], "env": { "PYTHONHOME": "", "PYTHONPATH": "", "PYTHONUSERBASE": "" } } } }

默认 stdio 模式下,MCP 客户端启动 Python 子进程,由该进程运行代理。安装器会寻找正确的 Python 可执行文件,并转发PYTHONHOME、PYTHONPATH、PYTHONUSERBASE等关键变量,减少客户端后台环境与交互终端不一致的问题。配置更新使用临时文件加原子替换,避免写入途中中断造成配置损坏。

如果你用的是 Cline 或类似支持 MCP 的编辑器插件,配置通常写在cline_mcp_settings.json里,结构如下:

{ "mcpServers": { "ida-pro-mcp": { "url": "http://127.0.0.1:13337/mcp", "transport": "http", "disabled": false, "autoApprove": [] } } }

注意这里用的是 HTTP transport,不是 stdio。两种模式的区别在于:stdio 由客户端拉起代理进程,HTTP 则要求 IDA 插件已经在监听端口。初学者建议先用 HTTP,因为 Inspector 验证更直观。

接下来是 TaoToken 统一 Key 通道的配置。把上游模型调用的 endpoint 改到 TaoToken,Base URL 用https://taotoken.net/api,Key 从控制台生成,Model ID 按你实际使用的模型填。以 OpenAI 兼容格式为例:

{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoTokenKey", "model": "claude-sonnet-4-20250514" }

如果你用的是 Codex,配置写在auth.json里,三件套同样要写全:

{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoTokenKey", "model": "gpt-4o" }

Key 的生成入口在控制台的 API Keys 页面,模型对话可以在对话页先验证 Key 是否可用,长期编码或 Agent 场景建议用 Coding Plan。这三件套里最容易漏的是 Model ID,很多人只填了 Base URL 和 Key,结果请求发出去返回模型不存在。

配置写完后,完全退出并重新启动 MCP 客户端。部分客户端需要从托盘退出后台进程,否则旧配置还在内存里。重启后让客户端读取 IDB 元数据或列出函数,验证只读调用是否通。

4. 用 MCP Inspector 逐层验证四层连通

MCP Inspector 是验证 ida-pro-mcp 四层连通最直接的工具。它的作用是充当一个独立的 MCP 客户端,直接连你的 HTTP 端点,把 tools/list 和 tools/call 的结果可视化出来。这样你就能把“客户端配置问题”和“服务端问题”分开。

先启动 Inspector:

npx @modelcontextprotocol/inspector

如果之前装过全局命令,也可以直接:

mcp-inspector

界面里填端点:

http://127.0.0.1:13337/mcp

transport 选 HTTP。点连接后,如果四层都通,左侧会列出可用工具。第一层验证是“客户端能看到服务器”——Inspector 能连上并列出工具,说明 MCP 客户端到代理这一层通了。

第二层验证是“代理能运行”。用 CLI 模式快速列工具:

npx @modelcontextprotocol/inspector --cli \ --server-url http://127.0.0.1:13337/mcp \ --transport http \ --method tools/list

如果这条命令返回工具列表 JSON,说明代理进程正常。如果返回 JSON-RPC 错误-32000并提示启动插件的快捷键,说明 MCP 客户端已经到达代理,问题范围缩小到 IDA 实例发现和插件服务。

第三层验证是“插件能监听”。在 IDA 里加载一个二进制,通过 Edit → Plugins → MCP 或Ctrl-Alt-M启动插件。插件默认监听127.0.0.1:13337,如果端口被占用,它会继续尝试后续最多 100 个端口。主机和起始端口可在 Edit → Plugins → MCP Configuration 里调整。确认监听状态可以用:

netstat -ano | findstr 13337

第四层验证是“只读 IDB 调用能返回”。调一个只读工具:

npx @modelcontextprotocol/inspector --cli \ --server-url http://127.0.0.1:13337/mcp \ --transport http \ --method tools/call \ --tool-name get_metadata \ --tool-args-json '{}'

返回 IDB 元数据 JSON 就说明四层全绿。整个链路的数据流是这样的:

客户端发起 tools/call │ ▼ ida-pro-mcp 代理 │ 发现可用实例 ▼ IDA 插件 HTTP 服务 │ 主线程执行 ▼ 返回 IDB 查询结果

刚完成首连时优先用只读能力。profile 是工具白名单文本,项目提供两种典型思路:

profile用途典型能力
triage第一次快速盘点函数列表、导入、反编译等少量工具
readonly完整只读分析分析、读取内存、查询类型,不修改 IDB

这样即使提示理解有偏差,也不会直接更改数据库。验收动作就是 Inspector 里四层全绿:能列工具、能调get_metadata、能返回真实 IDB 数据、端口监听正常。

5. 常见报错排查:401、local proxy failed、reading choices、OAuth

这一节对照真实报错给排查路径。ida-pro-mcp 的报错信息有时候会把人带偏,关键是先判断卡在哪一层。

报错一:401 Unauthorized。这个通常出现在你把上游模型调用切到 TaoToken 之后。原因一般是 Key 没填、Key 过期、或者 Base URL 写错。检查三件套是否写全:Base URL 是https://taotoken.net/api,Key 从控制台 API Keys 页面重新生成,Model ID 确认拼写。如果用的是 Codex,检查auth.json里的字段名是否正确。

报错二:local proxy failed。这个报错说明代理进程启动失败,问题在第二层。最常见原因是 Python 解释器不对。看这段真实报错:

[MCP] Autostarting server... Exception in ida_kernwin.UI_Hooks dispatcher function: SWIG director method error. Error detected when calling 'UI_Hooks.ready_to_run' Traceback (most recent call last): File ".../plugins/ida_mcp.py", line 212, in ready_to_run self.plugin.run(0) File ".../plugins/ida_mcp.py", line 288, in run from ida_mcp import MCP_SERVER, IdaMcpHttpRequestHandler File ".../plugins/ida_mcp/zeromcp/mcp.py", line 410 match urlparse(self.path).path: ^ SyntaxError: invalid syntax

底部显示Python 3.9.9,而match语句需要 3.10+。解决方式是切换 IDA 使用的 Python 版本。在 IDA 同目录下找到idapyswitch.exe,打开后选择 3.13 或其他满足要求的版本,重新打开 IDA 即可。这一步是 ida-pro-mcp 安装里最高频的坑。

报错三:reading choices 相关错误。这个通常出现在客户端解析工具返回结果时,说明返回的 JSON 结构不符合预期。检查 profile 是否限制了工具范围,导致客户端请求的工具不在白名单里。也可能是插件版本和客户端版本不匹配,重新执行python -m ida_pro_mcp.server --install更新插件。

报错四:OAuth 相关错误。如果你在客户端里配置了 OAuth 流程但 ida-pro-mcp 是本地 HTTP 服务,不需要 OAuth。把认证方式改回 API Key 或直接本地无认证。如果上游模型走 TaoToken,认证在 Base URL 和 Key 那一层,不要在 MCP 服务层重复配 OAuth。

报错五:工具不可见。检查 profile、扩展组和 unsafe 设置。刚装完默认可能只暴露少量工具,需要按需放开。

分层排错的决策树可以这样记:

调用失败 ├─ 客户端没看到服务器:检查配置文件和客户端重启 ├─ 代理启动失败:检查 Python 解释器与环境变量 ├─ 提示 IDA 未连接:打开二进制并启动 MCP 插件 ├─ 端口冲突:检查插件实际监听端口和配置 └─ 工具不可见:检查 profile、扩展组和 unsafe 设置

代理找不到插件时会返回 JSON-RPC 错误-32000,并提示启动插件的快捷键。看到这个错误不要慌,它恰恰说明客户端和代理是通的,问题在 IDA 实例发现和插件服务这一层。

卸载流程会从已检测客户端配置中移除 ida-pro-mcp 条目,并删除 IDA 用户目录中的插件文件。执行前先关闭 IDA 和相关 MCP 客户端,以免后台进程继续占用文件或在退出时覆盖配置。

6. 把 endpoint 切到 TaoToken 后的鉴权联调与验收

最后一步是把上游模型调用的 endpoint 统一切到 TaoToken,完成鉴权联调。这一步的意义在于:ida-pro-mcp 负责把 IDB 能力暴露出来,TaoToken 负责把模型调用收敛到一个 Key 通道,两者配合后你只需要维护一套鉴权。

操作顺序是:先在控制台生成 Key,然后在客户端配置里把 Base URL 改成https://taotoken.net/api,Key 填进去,Model ID 按实际模型填。改完后重启客户端,用 Inspector 重新跑一遍四层验证。

验证模型是否可用,可以直接在模型对话页面发一条测试消息,确认 Key 有效。如果要做长期编码或 Agent 场景,Coding Plan 更适合,因为它的额度模型和调用方式对高频调用更友好。

接入文档里有各客户端的详细配置示例,遇到字段名不确定的时候对照一下。整个联调完成后,你的链路是这样的:Inspector 或客户端 → ida-pro-mcp 代理 → IDA 插件 → IDB 查询,上游模型调用走 TaoToken 统一 Key。四层全绿的验收动作不变,只是第二层和上游之间的鉴权换成了 TaoToken。

一个实用技巧:把 Inspector 的 CLI 验证命令写成一个脚本,每次改完配置跑一遍,比在 GUI 里点来点去快得多。脚本里包含tools/list和tools/call get_metadata两条,返回正常就说明链路没断。这样下次换机器或升级插件时,回归验证只需要几秒钟。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进