前言¶
在 DeepSeek Harness(DSH)里接入 REA 后,宿主会通过 MCP 注册大约 229 个 mcp__rea__* 工具。工具定义会进入每次请求的系统提示,即使用户当前对话与逆向无关,也要承担这部分上下文开销。README 在 rea-agents@6.8.0 上实测:tools/list 返回 229 个工具,name 与 description 合计约 139,502 字符,粗算约 4 万 token(完整 JSON Schema 还会更多)。做逆向时这笔成本通常可接受;写脚本、改文档等无关任务里,则像关不掉的死重。
REA 侧没有运行时注销或按工具过滤的能力;DSH 的 @deepseek-ai/dsh-mcp-client 配置里也没有「只加载部分工具」的字段。要在不卸 REA、不改二进制的前提下按需启停,只能动 profile 里决定是否启动那一行 MCP 客户端的配置。社区插件 phoushen/dsh-rea-toggle(维护者 phoushen,分类:客户端)就是在 DSH 输入区提供一个开关,翻转 cordis.patch.yml 里目标行的 disabled,并在本地 Web 端口暴露状态与设置接口。
这是什么¶
dsh-rea-toggle 是给 DSH 里 REA MCP 服务器用的 GUI 开关:打开时注册约 229 个 mcp__rea__* 工具;关闭时一个都不注册,无关对话不再为这批工具付上下文成本。它不包装 REA、不做工具子集过滤(要么 229 个要么 0 个)、不负责安装 REA 或 Ghidra 等依赖。插件以 MIT 许可发布,版本 1.0.0;与 REA、DeepSeek Harness 均无官方隶属关系。
REA 占用的上下文从哪来¶
MCP 工具是否存在,取决于宿主是否启动对应服务器并拉取 tools/list。REA 的 rea mcp 子命令在 README 实测中只有 add 与 doctor,没有 remove、disable 或工具过滤;rea mcp add 只是在客户端配置里写一行。结构上 MCP 服务器无法在运行时自行注销工具,只有宿主能决定「这一行别启动」。
dsh-mcp-client 常见字段为 transport、serverName、command、args、env、cwd、toolCallTimeoutMs 等,不含包含性过滤。本插件因此只改 profile patch 里一行上的 disabled 键,例如:
# <DSH_HOME>/profiles/<profile>/cordis.patch.yml
- insert:
- id: rea-mcp
disabled: true # 插件只动这一标志
name: "@deepseek-ai/dsh-mcp-client"
config: { … }
除该文件外不读别的配置;写盘也仅针对目标行的 disabled。再点一次开关可还原。不修改 ~/.dsh/plugins/rea-agents,不卸载 REA。
核心功能¶
- 输入框旁开关:直观显示 REA 已开 / 已关(或异常时的
REA ?),悬停可看提示。 - 本地 HTTP 端点(默认前缀
/rea-toggle):GET /rea-toggle/status查状态;POST /rea-toggle/set,body 如{"enabled":false}或{"enabled":true}切换。只监听宿主回环 Web 端口;POST时 Origin 与 Host 不一致返回 403;body 上限 64 KiB。 - 可选配置:在插件自身 insert 行上可设
targetId(默认对应 REA 那行的 id,如rea-mcp)和routePrefix。多 MCP 服务器时可各装一行插件并区分routePrefix。
标志位会立刻写盘;工具集合在下次启动 DSH 时才变化。关掉开关后若工具仍在,需完全退出宿主(含托盘)再启动。
安装与启用¶
前提:REA 已在 DSH 里跑通,且 profile 里有一行能拉起 REA 的 mcp-client(例如 id: rea-mcp)。本插件不负责安装 REA。
环境要求(README 实测):
| 组件 | 版本 |
|---|---|
| DeepSeek Harness | 0.2.1-rc.3(桌面版) |
| REA(rea-agents) | 6.8.0 |
| Node.js | ≥ 20 |
方式 A:从 GitHub 安装¶
命令行可用 dsh 时:
dsh plugin --profile "$env:DSH_PROFILE" add github:phoushen/dsh-rea-toggle
方式 B:手动复制¶
将插件目录复制到 <DSH_HOME>/plugins/dsh-rea-toggle 与 profile 的 node_modules,并在该 profile 的 package.json 中同时加入 dependencies 与 dsh.profile.bundles 两处引用。完全退出 DeepSeek Harness(含托盘)后再启动。
验证¶
输入框左侧应出现小开关。也可请求:
Invoke-RestMethod http://127.0.0.1:<WEB_PORT>/rea-toggle/status
# 示例:{"ok":true,"path":"…\\cordis.patch.yml","rowLine":75,"disabled":false,"enabled":true}
插件以当前 DSH 进程权限运行;安装前建议在 GitHub 阅读源码与 MIT 许可证,确认只写 cordis.patch.yml 中目标行的行为符合预期。
典型用法¶
| 动作 | 做法 |
|---|---|
| 关闭 REA 工具面 | 点开关,或 POST /rea-toggle/set 且 {"enabled":false} |
| 开启 | 点开关,或 POST /rea-toggle/set 且 {"enabled":true} |
| 查看状态 | 悬停开关,或 GET /rea-toggle/status |
不走 GUI 时,PowerShell 示例:
Invoke-RestMethod http://127.0.0.1:<PORT>/rea-toggle/set -Method POST `
-ContentType 'application/json' -Body '{"enabled":false}'
与手动把目标行 disabled: true 效果相同;改完后仍需重启宿主,上下文里的工具定义才会消失或重新出现。
可选插件配置示例:
- insert:
- id: dsh-rea-toggle
name: dsh-rea-toggle
config:
targetId: rea-mcp
routePrefix: /rea-toggle
若 REA 行的 id 不是 rea-mcp,将 targetId 改成实际 id。
适用场景与注意¶
适合:已在 DSH 中常驻 REA,且经常在「逆向分析」与「普通对话 / 写作 / 脚本」之间切换的用户;希望少改 YAML、用一点即停整包 REA MCP 工具的人。
不适合:需要「只保留部分 REA 工具」的场景——当前 dsh-mcp-client 与 REA 都不支持部分注册,本插件只能全关或全开。
排错摘要:
| 现象 | 处理方向 |
|---|---|
| 没有开关 | 完全退出宿主(含托盘)再开 |
REA ? |
查 /rea-toggle/status 与悬停提示 |
row "rea-mcp" not found |
配置 targetId |
| 关了仍有工具 | 重启宿主 |
改 disabled 无 REA 行 |
先确认 profile 里已配置 REA 的 mcp-client |
README 提供 B 站演示(BV1cqxu6FEh1),覆盖安装、开关效果与排错。
结尾¶
dsh-rea-toggle 把「是否启动 REA 这一行 MCP」收成输入框旁一个开关和本地 REST 端点,解决无关对话为 229 个 mcp__rea__* 工具持续付上下文成本的问题。DSH 生态强调「一切皆插件」;社区目录 SkillHub 插件页 与源码仓库 github.com/phoushen/dsh-rea-toggle 相互独立,均非 DeepSeek / 幻方官方应用商店。需要时再开 REA、做完再关并重启,是 README 给出的可复现路径。