REA MCP 安装:用 rea-agents 接入 Claude Code、Cursor 与 Codex
本页目录
运行 npx rea-agents@latest setup,批准它列出的计划,然后彻底重启你的编程 agent 即可。前提是 Node.js 22.19+、24.11+ 或 26+;做 JavaScript/Electron 和 .NET 分析不需要别的东西。REA(Reverse Engineer Anything)是第三方开源项目(morluto/rea),通过 MCP 给 AI 编程 agent 提供逆向分析工具,本站与它没有任何关联。
下面的命令和输出都对照 REA 6.7.0 核对过。如果和你本机 rea --help 不一致,以 --help 为准。
前置条件
认准真包。 REA 在 npm 上的包名是 rea-agents,从来没有单独下载的 .exe 或 .dmg。验证方法见如何确认装的是真正的 REA。
Node.js 22.19+、24.11+ 或 26+,以及 npm。 6.7.0 的 package.json 写的是 "node": "^22.19.0 || ^24.11.0 || >=26.0.0",所以 Node.js 23、25 以及更早的 22.x/24.x 都不受支持。REA 不会替你升级 Node、npm 或 Homebrew。
先确认当前版本:
node -v
npm -v
如果 node -v 版本太旧,或者提示找不到命令,就安装 Node.js 24 LTS。REA 官网的 get-started 页面给出了这些方式:
# Windows (PowerShell)
winget install OpenJS.NodeJS.LTS
# macOS with Homebrew
brew install node
# macOS / Linux without Homebrew: install fnm, reopen the terminal, then
curl -fsSL https://fnm.vercel.app/install | bash
fnm install 24
fnm default 24
很多 Linux 发行版仓库里的 nodejs 低于 22.19,出问题时先查这个。
一个支持本地 MCP server 的编程 agent。 最常见的是 Claude Code、Codex 和 Cursor。setup 也能识别 Claude Desktop、Gemini CLI、Windsurf、VS Code、GitHub Copilot CLI、OpenCode、Qwen Code、Grok Build 等(见第 2 步的表格)。
可选:原生分析引擎。 只有分析原生二进制时才需要 Ghidra、Hopper 或 IDA。JavaScript/Electron 和 .NET 的静态分析不需要它们,引擎可以以后再配。
第 1 步:运行 setup
在任意目录执行:
npx rea-agents setup
如果想确保拿到 npm 上最新发布的版本,而不是缓存或当前项目里的旧版本,显式加上标签:
npx rea-agents@latest setup
整个过程分几步,每一步都需要你确认,所以可以放心运行:
- npm 先询问是否下载包。 这是 npm 自己的提示,同意它并不等于同意 REA 修改任何配置。
- REA 列出支持的 agent 让你多选。 已有的 REA 注册默认勾选;新检测到的客户端会列出来但不会默认勾选——检测到只是参考信息,不代表授权。
- REA 展示变更计划。 包括要改动的每个 agent 配置文件路径、skill 安装位置、涉及的外部软件;如果你选了 Hopper,还会单独列出它的安装计划。你批准之前不会写入任何文件。
- REA 执行计划。 写配置时保留无关条目和注释,创建
.rea.backup备份,原子替换文件并校验结果。 - 按完成提示重启对应的 agent。
对每个 agent,setup 做两件事:添加 REA 的 MCP server 条目,以及安装 REA 自带的工作流 skill(给 agent 用的调查步骤说明)。Claude Code 的 skill 装在 ~/.claude/skills(或 $CLAUDE_CONFIG_DIR/skills),大多数其他客户端用 ~/.agents/skills。只想要 MCP server、不想装 skill,就加 --skill=false。
setup 会把注册信息锁定到执行 setup 的那个 REA 版本。通过 npx 运行时,6.7.0 写入的是下面这样(dry run 输出为 Command: "npx" "-y" "[email protected]" "mcp"):
{
"mcpServers": {
"rea": {
"command": "npx",
"args": ["-y", "[email protected]", "mcp"]
}
}
}
如果是从全局或项目内安装的 rea 运行 setup,注册的是这个可执行文件的绝对路径加参数 mcp。无论哪种,agent 都不会悄悄换成新版 REA,升级由你主动决定(见第 3 步)。对 Codex 和 Grok Build,setup 还会加上 startup_timeout_sec = 30。
正确地重启
这里的“重启”是指彻底重启。终端类 agent(Claude Code、Codex、Gemini CLI)要退出会话再重新启动;桌面应用(Cursor、Claude Desktop、Windsurf、VS Code)要完全退出,macOS 上按 ⌘Q,只关窗口不够。setup 运行时已经开着的 agent,在重新连接之前看不到新的 server。
让 agent 帮你运行 setup
也可以把下面这段话贴给 agent,这是 REA 官网建议的提示词:
Install REA and connect it to this coding agent using npx rea-agents@latest setup.
Show me the setup plan for approval, then verify the installation.
agent 会执行同样的命令,并且应当先把计划给你看。计划请自己读、自己批准,不要让 agent 代你点同意。
第 2 步:指定 agent(Claude Code、Cursor、Codex)
在自己电脑上用交互式选择就够了。如果是写脚本、管理 dotfiles 或者要在多台机器上复现,就用可重复的 --client 参数显式指定客户端,指定后会跳过交互式选择。
先为 Codex 和 Cursor 生成计划,但不写入任何东西:
npx rea-agents@latest setup --client codex --client cursor --dry-run
--dry-run 返回状态 planned,退出码为 0,并列出它会改动的每个文件;在 macOS 上是 ~/.codex/config.toml、~/.cursor/mcp.json 和 skill 目录 ~/.agents/skills/reverse-engineer-anything。去掉 --dry-run 才会真正执行。常用的客户端 ID 如下(6.7.0 一共认识 25 个,还包括 devin、kimi、trae、dsh 等,见支持的 agent 列表):
| 客户端 | --client 取值 |
|---|---|
| Claude Code | claude_code |
| Claude Desktop | claude_desktop |
| Codex | codex |
| Cursor | cursor |
| Gemini CLI | gemini_cli |
| Windsurf | windsurf |
| VS Code | vscode |
| GitHub Copilot CLI | copilot_cli |
| OpenCode | opencode |
| Qwen Code | qwen_code |
| Grok Build | grok_build |
无人值守时可以用 --yes 自动批准,但它只在明确的范围内生效:要和 --client 搭配(或者你确实想覆盖所有检测到的客户端时用 --all-detected)。不带范围参数时,--yes 只会刷新已有的 REA 注册。加 --json 可以得到机器可读的输出:
npx rea-agents@latest setup --client claude_code --yes --json
setup 不认识的客户端
只要客户端能启动本地 stdio MCP server,就能用 REA:把上面那段带版本号的配置加进它的 MCP 配置即可。REA 也登记在 MCP Registry 中,名称是 io.github.morluto/rea,支持 Registry 发现的客户端可以直接搜到。
第 3 步:可选的全局 CLI 与更新方式
给 agent 用的话,npx 就够了。如果还想在 shell 里直接敲 rea,就全局安装:
npm install --global rea-agents
rea --help
注意:不带 --global 的 npm install rea-agents 只会把 rea 放进当前项目的 node_modules/.bin,不会出现在 PATH 里。这是 “rea: command not found” 最常见的原因。
REA 修 bug 很频繁,建议经常更新。全局 npm(或 Bun)安装的更新命令:
rea update
rea update 只更新当前运行的 CLI 所属的那份全局安装,并在完成后校验新版本号。它不会改写 agent 的注册信息——注册仍然锁定在旧版本。更新结束时它会打印一条限定范围的 setup 命令,运行它、审阅并批准注册刷新,再重启 agent。
如果从来没全局安装、一直用 npx,刷新方式是:
npx rea-agents@latest setup
不安装任何东西、只查最新发布版本:npm view rea-agents dist-tags.latest。
Bun 用户可以把 npx rea-agents@latest 换成 bunx rea-agents@latest。Bun 全局更新要求 Bun 1.2.17 或更高。
以后想卸载:rea uninstall 只移除 REA 自己的注册和 skill 文件;rea uninstall --purge-data 还会清掉 ~/.rea 下的缓存和状态。Hopper、Node.js、你的 Evidence 文件和其他 MCP server 都不受影响。
第 4 步:用 rea providers 和 rea capabilities 看清能分析什么
在把原生二进制交给 REA 之前,先问问它这台机器上到底有哪些引擎可用:
rea providers --json
rea capabilities --json
(没有全局安装时:npx -y rea-agents@latest providers --json。)
providers 列出二进制会话的 provider(Hopper、Ghidra、IDA)以及每个 provider 支持的操作;capabilities 补充辅助能力。两者合起来回答的问题是:“我把这个可执行文件交给 REA,谁来分析它?“它们反映的是 CLI 的视角;在 agent 里,以已连接 server 实际提供的工具列表为准。
provider 的选择规则很简单:
- 只有一个可用 provider 支持该目标时,REA 自动使用它。
- 有多个时,REA 返回
ambiguous错误,并在details.candidate_ids里列出候选。CLI 用--provider ghidra指定,MCP 在open_binary里传provider_id。 - 想长期偏好某个引擎,就设置
REA_ANALYSIS_PROVIDER=ghidra;显式的--provider优先级更高。
如果一个引擎都没有:Ghidra 免费,参见本站的 REA + Ghidra 分析原生二进制;Hopper 是商业软件但有演示模式,setup 可以在你单独批准后安装它;IDA 通过已有的 IDA MCP 注册接入,见 IDA 指南。
第 5 步:第一次分析
先从不需要原生引擎的任务开始:对 JavaScript 或 Electron 应用做静态分析。REA 只读文件,不会运行应用;但 agent 会把结果发给它的模型服务商,所以只分析你自己拥有或已获授权的软件。
REA 官网正好提供了一个练习目标:一个只有六个文件的 Electron 笔记应用,带一个 Export notes 按钮(见 first investigation 教程)。下载 https://rea.tools/examples/notes-example.zip 并解压,然后运行:
rea analyze-javascript-application /absolute/path/to/notes-example --json > notes-evidence.json
为什么要重定向到文件:应用的 Evidence 可能非常大(REA 文档里提到过一个真实 Electron 应用的 Evidence 文件有 334 MB)。存成文件后,你或 agent 可以按需读取其中的投影视图,而不是把终端刷屏。对目录或 .asar 目标,直接用 rea analyze PATH 也会走同一个工作流。
接着在 agent 里做同样的事。在 Claude Code、Cursor 或 Codex 中提问:
Use REA to inspect /absolute/path/to/notes-example and find what happens when
I click Export notes. Show where notes.csv is written, which fields it contains,
and the relevant files and lines.
(用中文提问也可以,比如:“用 REA 分析 /absolute/path/to/notes-example,告诉我点击 Export notes 之后发生了什么,notes.csv 写到哪里、包含哪些字段,并给出相关文件和行号。”)
好的回答会从 renderer.js 里的按钮出发,经过 preload.js 中的 notes:export 消息,追到 main.js 里把 notes.csv 写进下载目录的处理函数。REA 官网展示的处理函数是:
ipcMain.handle("notes:export", () => {
const destination = path.join(app.getPath("downloads"), "notes.csv");
writeFileSync(destination, toCsv(notes), "utf8");
return destination;
});
如果 agent 的回答没有文件名和行号,就追问它要。REA 的价值就在于有证据支撑的结论,agent 也应该把“观察到的事实”和“推断”分开说。
这一步跑通,就说明整条链路都正常:Node 运行时、MCP 注册、skill 以及 REA 的分析工作流。
写出结论可核对的提示词
工具路由已经交给 skill,提示词里不需要列工具。把字数花在目标、一个具体问题和“什么算完成”上:
Use REA to analyze <absolute path to target>.
Question: <one concrete question about behaviour>.
For each conclusion, cite the REA Evidence ID it relies on, and label it as
an observation, an inference, or an unknown.
List what you could not determine and why.
Done means: <a check I can run myself>.
要求 Evidence ID 和标注,会逼 agent 把 REA 返回的内容和模型自己的结论分开;“unknown”那一行允许它说“没查清”,而不是去猜;可以自己运行的“完成”标准,把最终判断交回给你。
确认 agent 真的调用了 REA
一个听起来像逆向分析的回答,并不能证明 REA 跑过:
- 看对话记录里的工具调用。 Claude Code 把 MCP 工具命名为
mcp__<server>__<tool>,所以 REA 的调用会显示为mcp__rea__analyze_javascript_application、mcp__rea__open_binary等。如果记录里只有调用strings、objdump、xxd的命令,这个回答就不是来自 REA。 - 核对引用的 Evidence ID 是否存在。 让 agent 对当前会话调用
get_evidence_bundle(detail: "summary")并列出来。不在会话账本里的 ID 就是编的。 - 自己跑一遍“完成”标准,比如打开被引用的文件和行号读一读。
排错
agent 里看不到任何 REA 工具。 几乎都是没重启干净。彻底退出并重开客户端,然后检查它的注册:
npx -y rea-agents@latest doctor --client codex --json
把 codex 换成 claude_code、cursor 等即可。doctor 检查的是文件和前置条件,不是实时连接。不带参数的 rea doctor 还会检查可选引擎(Ghidra、IDA、JADX、Kuna),没装就报不健康;用 --client、--provider 或 --skill 限定范围,退出码就只反映你实际用到的部分。
GUI 客户端用了错误的 Node 版本。 fnm、nvm 这类版本管理器可能让桌面应用拿到和终端不同的 PATH,它启动的 npx 就会跑旧版 Node。把受支持的版本设为默认(例如 fnm default 24),再重启客户端。
PowerShell 提示“在此系统上禁止运行脚本”。 执行一次 Set-ExecutionPolicy -Scope CurrentUser RemoteSigned,再重试 npx。
agent 里的 Ghidra 查询超时。 第一次 Ghidra 查询要导入并自动分析二进制,可能要几分钟。REA 默认允许 330,000 ms(REA_GHIDRA_STARTUP_TIMEOUT_MS),但 MCP 客户端自己的单次调用超时可能更短。
还是不行?先更新再重试,然后到 issue 提交 REA 版本、目标类型、操作步骤和报错输出。REA 跑通之后,可以接着用免费的 Ghidra 引擎分析原生程序:REA + Ghidra 分析原生二进制。