- Home
- Plugin
- Strumenti e capacità
- dsh-mcp-rea
dsh-mcp-rea
kkk-yoyo/dsh-mcp-rea
Mounts the REA (Reverse Engineer Anything) MCP server through two gateway tools instead of registering its 200+ tool schemas on every request: rea_list searches the catalog or returns one tool's input schema, and rea_call invokes that tool, each call spawning a short-lived rea mcp process, so the tool definitions sent per step drop from about 780 KB (207 tools as measured in REA 6.5.0) to about 1-2 KB. When no rea entry point is found it installs rea-agents into a plugin-private directory with the pnpm bundled in DSH (dependency build scripts skipped) and links the reverse-engineer-anything and rea-gateway skills into the skills directory without overwriting existing ones.
Installazione
dsh plugin --profile web add github:kkk-yoyo/dsh-mcp-reaREADME
dsh-mcp-rea
把 rea 接入 DeepSeek Harness:默认只挂 2 个网关工具,按需代理全部 REA 工具,不把约 20 万 token 的工具定义塞进每一步请求。装好即用,机器上没有 rea 也能自己补。
为什么需要它
rea 的 MCP server 一次会暴露两百多个工具(6.5.0 是 207 个,6.8.0 已是 229 个)。Harness 每一轮请求都要把这些工具定义完整发给模型。实测 6.5.0 那 207 个工具的 name + description + inputSchema 约 780 KB,按常见分词估算约 20 万 token:
| 状态 | 工具数 | 每步请求的工具定义 |
|---|---|---|
| 直接挂载 rea MCP | 200+(+ Harness 自带) | 约 780 KB / 20 万 token |
| 本插件的网关模式 | 2 | 约 1–2 KB / 几百 token |
| 关掉本插件 | 0 | 0 |
也就是说,哪怕这次只是在改一个 CSS,你也要为整套逆向工具定义付钱。更麻烦的是,直接挂 MCP 通常没有开关,卸载也不方便。
这个 bundle 做四件事:
- 默认只挂 2 个网关工具:
rea_list查工具/schema,rea_call调工具;全部能力都在,token 成本只在真正调用时产生。 - 零路径配置:不用写死 node / rea.mjs 路径,入口自动解析。
- 开箱即用:机器上没有 rea 时,用 DSH 运行时自带的 pnpm 把它装到插件私有目录——不需要 npm,也不需要 PATH 里有 node。
- 自动安装技能 + 一个开关:关掉后工具归零;打开后只多 2 个工具。
快速开始(3 步)
1. 安装
在 Harness 侧边栏「插件」页安装本目录(选它的绝对路径),或者:
dsh plugin --profile <profile> add "link:<本目录绝对路径>"
dsh plugin add 会把声明了 dsh.bundle 的包加入 <profile>/package.json 的 dsh.profile.bundles。如果你是用 pnpm add link: 手工装的,bundle 可能没进列表,重跑上面的命令即可。
2. 重启 DSH
dsh.profile.bundles 在启动时读取,所以需要重启。插件会出现在侧边栏「插件」页。
3. 打开开关
侧边栏 「插件」 → 「rea MCP 服务器」 → 拨动开关。
打开后,模型侧只会看到两个工具:
rea_list— 搜索 REA 工具,或取某个工具的完整 input schema;rea_call— 按原始工具名和参数调用。
如果本机还没有 rea,不用管:第一次调用时会自动用内置 pnpm 装到 $DSH_HOME/cache/dsh-mcp-rea/rea(实测 8–13 秒),装完当场可用。日志里会打印安装进度。
注意:Web 端「设置」里的插件列表是只读的,开关在侧边栏「插件」页。
开箱即用的边界
“开箱即用”在这里指接入即用,别理解过头:
| 能力 | 是否开箱 |
|---|---|
| 插件装载、入口解析、技能安装 | ✅ 全自动 |
| 机器上没装 rea | ✅ 用内置 pnpm 自动私有安装,不需要 npm/PATH |
| 网关调用、取 schema、跑静态分析工具 | ✅ server 能启动、229/229 工具能列出 |
| 依赖 Ghidra / IDA / JEB / apktool / frida / adb 的深层能力 | ❌ 这些外部引擎不在本仓库,需按 rea 文档自备 |
| frida 的原生构建 | ⚠️ 安装时刻意跳过依赖构建脚本(静态分析用不到);动态 instrumentation 需要你自行批准构建 |
| 从 npm / 插件市场一键安装 | ❌ 本包目前是 private: true + @local scope,只适合本地 link 安装 |
网关怎么用
模型不需要一次看到全部 schema。典型流程:
1. rea_list({ query: "artifact" })
→ 返回名字/描述匹配的工具,例如 inspect_artifact、extract_artifact
2. rea_list({ tool: "inspect_artifact" })
→ 返回 inspect_artifact 的完整 input schema
3. rea_call({ tool: "inspect_artifact", arguments: { path: "C:\\target.exe" } })
→ 返回该工具的结果(Evidence 文本)
也可以直接调已知工具:
{ "tool": "open_binary", "arguments": { "path": "C:\\target.exe" } }
参数说明:
rea_list:query(按名字/描述搜索)、tool(精确名字,取完整 schema)、limit(默认 15,最大 50)。rea_call:tool(必填,原始工具名)、arguments(对象)、timeoutMs(可选,默认 120 秒,最大 600 秒)。- 输出超过
gatewayMaxOutputBytes(默认 200 KB)会截断;优先用工具自己的detail: "summary"/ 分页参数。
网关通过 stdio 启动 rea mcp,每次调用一个短命子进程,调用结束就关闭;不在 Harness 进程里保留分析状态。需要跨调用保留状态时,用 REA 自己的 Evidence 导出/导入工具(evidence_export / evidence_import)。
零路径配置
不需要改任何绝对路径。入口由 lib/rea.js 按以下顺序解析:
REA_ENTRY环境变量;- Windows:
%APPDATA%\npm\node_modules\rea-agents\scripts\rea.mjs、%USERPROFILE%\AppData\Roaming\npm\...; - POSIX:
npm_config_prefix、NVM、~/.npm-global、/usr/local、/opt/homebrew、/usr/lib下的全局node_modules; - 兜底:插件私有安装
$DSH_HOME/cache/dsh-mcp-rea/rea/node_modules/...; - 插件 config 的
entry(显式指定时严格使用该路径,不会静默回退)。
- 全局优先:你自己全局装的 rea 优先于插件缓存,插件那份只做兜底。
- node:网关用 Harness 自己的
process.execPath启动,Windows Desktop 下配合ELECTRON_RUN_AS_NODE=1就是 Node;纯 Node 环境该变量无副作用。 - 安装器:用 DSH 打包的
pnpm.cjs(从process.resourcesPath或process.execPath反推),因此不需要 npm 在 PATH 上。用REA_PNPM可覆盖。 - rea 版本:默认装
rea-agents@latest(当前 6.8.0)。rea-agents需要 Node^22.19.0 || ^24.11.0 || >=26.0.0;Harness Desktop 自带 Node 24.x,满足要求。
技能
只挂工具是不够的:模型还需要知道何时用 REA、怎么读 Evidence、缺 provider 时怎么恢复。本插件会安装两个技能到 $DSH_HOME/skills(默认 ~/.dsh/skills):
reverse-engineer-anything:rea 包自带的完整技能,创建目录链接(Windows 用 junction),失败时回退为复制。rea-gateway:本插件生成的小技能,说明如何通过rea_list/rea_call调用完整工具集;随插件版本更新。
- 目标位置已有同名技能时绝不覆盖,只报告
occupied;网关技能只覆盖带本插件版本标记的目录。 - 不想自动装:
installSkill: false;想手动装:npm run install-skill(可加--dry-run)。 - 技能在下一次会话/重启后进入 DSH 的技能目录。
@deepseek-ai/dsh-mcp-client目前只桥接 tools,不桥接 MCP prompts。rea 的 6 个 prompts 不会出现在 Harness 里,但技能会覆盖主要的使用与恢复路径。本插件默认不加载dsh-mcp-client,prompts 的缺失不影响网关。
自检
npm test -- --gateway --doctor --install --provision # 39 项,含真实安装与网关调用
npm test -- --install --provision # 真装一遍到临时目录,验证“缺失即自动安装”
会检查:
package.json/cordis.patch.yml的 bundle 声明;- 默认只插入 preflight,不再插入全量 MCP;
- 两个网关工具的定义 < 20 KB;
- 内置 pnpm 可解析、私有安装目录与候选顺序正确;
- 技能链接与网关技能的幂等、“不覆盖用户同名技能”;
apply()在“已安装/缺失”两种情况下的行为,并注册两个网关工具;--gateway:真实调用rea_list和rea_call;--doctor:真实跑rea mcp doctor;--install:用内置 pnpm 装到临时目录并跑 doctor(实测 8–13 秒);--provision:入口故意写错,网关自动安装后仍能返回 schema。
这些 CLI 脚本需要 Node 22+。如果普通 shell 里没有
node,可以直接用 DSH 自带的 Node 运行:<DSH 安装目录>\resources\runtime\primary-runtime\dependencies\node\bin\node.exe scripts\selftest.mjs。
配置
| 字段 | 默认 | 说明 |
|---|---|---|
gateway | true | 是否注册 rea_list / rea_call |
gatewayTimeoutMs | 120000 | 单次 MCP 调用超时 |
gatewayMaxOutputBytes | 200000 | 单次返回文本上限,超出会截断 |
entry | — | 显式 rea 入口;严格使用,不回退 |
autoInstall | true | 入口缺失时用内置 pnpm 私有安装(不碰全局 npm、不需要 PATH)。设 false 则只报错 |
packageSpec | rea-agents | 安装用的 npm spec,可写成 rea-agents@6.5.0 固定版本 |
installDir | $DSH_HOME/cache/dsh-mcp-rea/rea | 私有安装目录,可换到别的盘 |
installTimeoutMs | 300000 | 安装超时 |
installSkill | true | 是否安装 reverse-engineer-anything 和 rea-gateway 技能 |
copySkillFallback | true | 链接失败时是否回退为复制 |
skillsRoot | $DSH_HOME/skills | 技能安装根目录 |
verbose | false | 打印入口、技能、网关和安装诊断 |
示例(profile 的 cordis.patch.yml,覆盖 bundle 里的同 id 条目):
- id: rea-preflight
config:
installSkill: true
autoInstall: true
gateway: true
gatewayTimeoutMs: 120000
gatewayMaxOutputBytes: 200000
# installDir: 'D:\rea-cache'
# packageSpec: rea-agents@6.5.0
想完全手动管理 rea:
# 私有安装到 $DSH_HOME/cache/dsh-mcp-rea/rea(默认,不需要 npm)
node scripts/install-rea.mjs
# 回退到全局安装(需要 npm 在 PATH 上)
node scripts/install-rea.mjs --global
可选:全量 MCP 工具
如果你确实需要模型直接看到全部 mcp__rea__* 工具(例如依赖客户端的工具级权限、并行调度或自动补全),可以关掉网关、手工插入 dsh-mcp-client。这会恢复每步约 20 万 token 的成本:
# 1) 关掉网关,避免重复注册
- id: rea-preflight
config:
gateway: false
# 2) 手工挂全量 MCP
- insert:
- id: rea-mcp
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: rea
transport: stdio
command: !!js process.execPath
env:
ELECTRON_RUN_AS_NODE: '1'
args:
- 'C:\Users\<you>\AppData\Roaming\npm\node_modules\rea-agents\scripts\rea.mjs'
- mcp
failOnStartupError: false
args[0] 请换成实际的 rea.mjs 路径(或用 !!js 写一段解析逻辑)。只想减少一点 token 时,也可以给 rea 设置 REA_MCP_INPUT_SCHEMA_PROFILE=compact 和 REA_MCP_OUTPUT_SCHEMA_PROFILE=off,但两百多个工具的基数仍然很大。
没装 rea 会怎样
不会把 Harness 弄坏,也不需要你动手。
- 两个网关工具照常注册;第一次调用会触发自动私有安装,装完直接返回结果。
- 没有内置 pnpm(很老的 DSH)或网络不通时,返回明确的错误 + 尝试过的路径 + 手动安装命令,而不是让整个会话失败。
- 预检日志会说明当前走的是哪条路径。
- 装好 rea(或把
REA_ENTRY指对)后,下一次工具调用即可生效,不需要重启(网关每次调用都会重新解析入口)。
故障排查
| 现象 | 原因 | 处理 |
|---|---|---|
插件页能看到开关,但没有 rea_list / rea_call | bundle 没进 dsh.profile.bundles,或插件没打开 | 检查 <profile>/package.json 的 bundles;重启后拨开关 |
调用返回 REA entry not found 或安装失败 | 没有 pnpm、没有网络,或 autoInstall: false | 把 autoInstall 打开,或 node scripts/install-rea.mjs,或设 REA_ENTRY |
安装报 ERR_PNPM_* | 网络/磁盘问题 | 看日志里的 pnpm 输出;可换 installDir 到有空间的盘 |
rea_list 很慢 | 每次调用都会启动一个 rea mcp 子进程 | 正常现象;批量操作时尽量一次 rea_call 传完整参数 |
| 输出被截断 | 超过 gatewayMaxOutputBytes | 用工具的 detail: "summary"、分页参数,或调大 gatewayMaxOutputBytes |
| 工具调用报缺 provider | 需要 Ghidra/IDA/JEB/apktool/frida/adb 等外部引擎 | 按 rea 文档准备;纯静态能力不需要这些引擎 |
| frida 相关工具报原生模块缺失 | 安装时刻意跳过了依赖的构建脚本 | 在安装目录执行 pnpm approve-builds,或自行安装 frida |
| 技能没出现 | 目标已存在但被禁用,或本次会话还没重启 | 检查 $DSH_HOME/skills/reverse-engineer-anything/SKILL.md;新开会话 |
| 想完全不加载 | — | 插件页把开关拨到关,比卸载更省事 |
安全说明
- 本仓库包含可执行 JS:
index.js(注册/预检)、lib/rea.js(路径/安装/技能)、lib/mcp-gateway.js(MCP 网关)、scripts/*.mjs(CLI)。不是“只有配置”。 - 首次使用会联网:入口缺失时会用内置 pnpm 从 npm registry 下载
rea-agents到私有目录。这是“开箱即用”的代价;不想要就把autoInstall设成false,改为自己npm i -g rea-agents或REA_ENTRY指定。 - 安装不执行第三方构建脚本(
strict-dep-builds=false),只装包本身;因此 frida 的原生二进制不会被构建。 - 安装落在
$DSH_HOME/cache/dsh-mcp-rea/rea,不动全局 npm 前缀,删目录即卸载。 - 网关会在你调用工具时启动
rea-agents,并按rea_call的参数执行 REA 工具。REA 的能力边界(仅限合法授权的分析场景)见上游 DISCLAIMER。 - 技能安装会在
$DSH_HOME/skills下创建目录链接/文件;不会覆盖已有同名技能。 - DSH 的 bundle 生效于 Host 进程,安装任何第三方 bundle 都属于信任行为;装之前请先读一遍
cordis.patch.yml。
已知限制
- 只在 Windows + DSH Desktop 0.2.x 上实测;macOS/Linux 的路径与 pnpm 定位逻辑已写进
lib/rea.js(含process.resourcesPath与.app/Contents/Resources),但未实机验证。 - 网关每次调用启动一个短命子进程,单次有 1–3 秒启动开销;跨调用状态需用 REA 的 Evidence 导出/导入。
- 全量 MCP 工具的 token 成本仍然存在(约 20 万 token/步),所以默认不挂;需要时按上面的“可选”手工开启。
- 两百多个工具里有不少依赖 Ghidra、IDA、JEB、apktool、frida、adb 等外部引擎/工具。这里的“开箱即用”指接入即用:server 能启动、工具能列出、纯静态能力可用;外部引擎仍需按 rea 的文档单独准备。
dsh-mcp-client不桥接 MCP prompts;rea 的 6 个 prompts 不会出现在 Harness 里,使用引导由技能承担。- 本包目前是
private: true+@localscope,适合本地/私有安装;要上架 npm 或插件市场,需要改name、去掉private,并补发布元数据。
许可
MIT,见 LICENSE。
本仓库不包含 rea 的源码。rea 由 morluto 开发,MIT 许可,版权归原作者所有。
Plugin correlati
archify (deepseek-harness)
tt-a1i/archify
WeKnora (dsh-weknora)
tencent/weknora
weknora
tencent/weknora
BrowserSkill (dsh-plugin-browserskill)
tencent/browserskill