跳过主要内容
K

dsh-mcp-rea

kkk-yoyo/dsh-mcp-rea

把 REA(逆向一切)的 MCP 服务收成两个网关工具,而不是每次请求都注册它的 200 多个工具 schema:rea_list 按名字/描述搜索工具目录、或取单个工具的完整 input schema,rea_call 按原始工具名调用,每次调用启动一个短命 rea mcp 子进程,每步请求的工具定义由约 780 KB(REA 6.5.0 实测 207 个工具)降到约 1-2 KB。找不到 rea 入口时,用 DSH 自带的 pnpm 把 rea-agents 装进插件私有目录(跳过依赖构建脚本),并把 reverse-engineer-anything 与 rea-gateway 两个技能链接进技能目录,已存在的同名技能不会被覆盖。

安装

dsh plugin --profile web add github:kkk-yoyo/dsh-mcp-rea

README

dsh-mcp-rea

把 rea 接入 DeepSeek Harness:默认只挂 2 个网关工具,按需代理全部 REA 工具,不把约 20 万 token 的工具定义塞进每一步请求。装好即用,机器上没有 rea 也能自己补。

License: MIT version node DeepSeek Harness gateway tools tool defs tested on

为什么需要它

rea 的 MCP server 一次会暴露两百多个工具(6.5.0 是 207 个,6.8.0 已是 229 个)。Harness 每一轮请求都要把这些工具定义完整发给模型。实测 6.5.0 那 207 个工具的 name + description + inputSchema 约 780 KB,按常见分词估算约 20 万 token:

状态工具数每步请求的工具定义
直接挂载 rea MCP200+(+ Harness 自带)约 780 KB / 20 万 token
本插件的网关模式2约 1–2 KB / 几百 token
关掉本插件00

也就是说,哪怕这次只是在改一个 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 按以下顺序解析:

  1. REA_ENTRY 环境变量;
  2. Windows:%APPDATA%\npm\node_modules\rea-agents\scripts\rea.mjs、%USERPROFILE%\AppData\Roaming\npm\...;
  3. POSIX:npm_config_prefix、NVM、~/.npm-global、/usr/local、/opt/homebrew、/usr/lib 下的全局 node_modules;
  4. 兜底:插件私有安装 $DSH_HOME/cache/dsh-mcp-rea/rea/node_modules/...;
  5. 插件 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):

  1. reverse-engineer-anything:rea 包自带的完整技能,创建目录链接(Windows 用 junction),失败时回退为复制。
  2. 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。

配置

字段默认说明
gatewaytrue是否注册 rea_list / rea_call
gatewayTimeoutMs120000单次 MCP 调用超时
gatewayMaxOutputBytes200000单次返回文本上限,超出会截断
entry—显式 rea 入口;严格使用,不回退
autoInstalltrue入口缺失时用内置 pnpm 私有安装(不碰全局 npm、不需要 PATH)。设 false 则只报错
packageSpecrea-agents安装用的 npm spec,可写成 rea-agents@6.5.0 固定版本
installDir$DSH_HOME/cache/dsh-mcp-rea/rea私有安装目录,可换到别的盘
installTimeoutMs300000安装超时
installSkilltrue是否安装 reverse-engineer-anything 和 rea-gateway 技能
copySkillFallbacktrue链接失败时是否回退为复制
skillsRoot$DSH_HOME/skills技能安装根目录
verbosefalse打印入口、技能、网关和安装诊断

示例(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_callbundle 没进 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 + @local scope,适合本地/私有安装;要上架 npm 或插件市场,需要改 name、去掉 private,并补发布元数据。

许可

MIT,见 LICENSE。

本仓库不包含 rea 的源码。rea 由 morluto 开发,MIT 许可,版权归原作者所有。

相关插件