rea-reverse

REA MCP 安装指南:接入 Claude Code、Cursor 与 Codex

基于 REA 6.4.0更新于 约 10 分钟读完
本页目录

REA(Reverse Engineer Anything)是 morluto 维护的开源项目,它通过 MCP 给 AI 编程 agent 提供逆向分析工具。你向 agent 提一个关于本地程序或二进制文件的问题,REA 负责检查目标,返回的结论都附带证据(Evidence):源码位置、地址、引用关系,以及它没能确定的未知项。同样的工作流也可以在终端里通过 rea 命令行直接运行。

这篇文章适合想把 REA 接入 Claude Code、Cursor、Codex 或其他 MCP 客户端的开发者,也适合想先搞清楚“setup 到底会改我电脑上哪些东西”的人。读完后你会:

  • 准备好受支持的 Node.js 版本;
  • 用 npx rea-agents setup 把 REA 注册到自己的 agent;
  • (可选)装好全局 rea 命令,并知道怎么更新;
  • 用 rea providers 和 rea capabilities 弄清本机有哪些分析引擎(provider)可用;
  • 完成第一次不需要任何反汇编器的分析。

本文基于 REA 6.4.0,也就是项目安装文档中记录的 npm 版本。REA 迭代很快,如果本文的参数和你本机 rea --help 的输出不一致,以 --help 为准。

前置条件

Node.js 22.19+、24.11+ 或 26+,以及 npm。 这是唯一的硬性要求。准确的支持范围是:Node.js 22.x(>=22.19)、24.x(>=24.11)和 26+。Node.js 23、25 以及各种预发布版本都不受支持。REA 直接使用 Node.js 自带的 npm,不会替你升级 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,而 REA 只支持上面列出的版本线。先把运行时搞对,后面就不会遇到莫名其妙的报错。

一个支持本地 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

整个过程分几步,每一步都需要你确认,所以可以放心运行:

  1. npm 先询问是否下载包。 这是 npm 自己的提示,同意它并不等于同意 REA 修改任何配置。
  2. REA 列出支持的 agent 让你多选。 已有的 REA 注册默认勾选;新检测到的客户端会列出来但不会默认勾选——检测到只是参考信息,不代表授权。
  3. REA 展示变更计划。 包括要改动的每个 agent 配置文件路径、skill 安装位置、涉及的外部软件;如果你选了 Hopper,还会单独列出它的安装计划。你批准之前不会写入任何文件。
  4. REA 执行计划。 写配置时保留无关条目和注释,创建 .rea.backup 备份,原子替换文件并校验结果。
  5. 按完成提示重启对应的 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 版本。6.4.0 写入的配置长这样:

{
  "mcpServers": {
    "rea": {
      "command": "npx",
      "args": ["-y", "rea-agents@6.4.0", "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;去掉它就会真正执行。支持的 agent 列表中常用的客户端 ID:

客户端 --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 只读文件,不会运行应用。

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 的分析工作流。

常见安装问题与排错

agent 里看不到 REA 的工具。 绝大多数是没有彻底重启。完全退出客户端再打开,然后检查它的注册:

npx -y rea-agents@latest doctor --client codex --json

把 codex 换成 claude_code、cursor 等即可。doctor 检查的是配置文件和前置条件,不检查实时连接;如果注册正常但工具仍然缺失,说明客户端需要重新连接。

rea doctor 报告不健康,可我只想做 JavaScript 分析。 不带参数的 rea doctor 会审计所有内容,包括你可能根本没装的可选引擎。按任务限定范围:rea doctor --provider ghidra --json、rea doctor --client cursor --json 或 rea doctor --skill --json,限定后退出状态只反映该范围。静态 JavaScript 分析直接运行 analyze-javascript-application 就行。

Node 版本不对或运行时不受支持。 再确认一遍 node -v。fnm、nvm 之类的版本管理器可能让 GUI 客户端拿到和终端不同的 PATH,于是它启动的 npx 跑在旧版 Node 上。把受支持的版本设为默认(例如 fnm default 24),再重启客户端。

rea: command not found。 安装时没加 --global,或者 npm 的全局 bin 目录不在 PATH 里。改用 npm install --global rea-agents,或者继续用 npx -y rea-agents@latest <command>。

PowerShell 提示 “running scripts is disabled on this system”。 执行一次 Set-ExecutionPolicy -Scope CurrentUser RemoteSigned,再重试 npx。

setup 拒绝写入。 已有客户端配置格式错误或路径不安全时,整个事务会在写入前中止。按提示修好对应文件(之前的运行会留下 .rea.backup),再重新运行。

文档里提到的新功能找不到。 仓库 main 分支可能领先于 npm 发布版。安装文档会注明哪些功能只在 main 上,例如 DeepSeek Harness(dsh)就不在 6.4.0 里。

agent 里的 Ghidra 查询超时。 第一次 Ghidra 查询要导入并自动分析二进制,可能要好几分钟。REA 默认给 330,000 ms(REA_GHIDRA_STARTUP_TIMEOUT_MS),但 MCP 客户端对单次工具调用的超时可能更短。详见 Ghidra 那篇文章。

Claude Code 配了第三方 ANTHROPIC_BASE_URL 后不停压缩上下文。 这种模式下 Claude Code 每次请求都会发送全部工具定义。客户端配置说明建议在 rea server 条目的 env 中加入 "REA_MCP_INPUT_SCHEMA_PROFILE": "compact",setup 会保留这项覆盖。

还是解决不了?先更新(rea update 或 npx rea-agents@latest setup)再重试;问题依旧就去提 issue,附上 REA 版本、目标类型、复现步骤和错误输出。

关于合规使用

REA 在本地分析目标,但 agent 会把工具结果发给它所用的模型服务商。只分析你拥有或已获授权的软件;在对应用、设备或网络做运行时采集之前,请先阅读项目的 DISCLAIMER.md。

下一步