dsh-mcp-auto-permission:Workspace Write + MCP 预设与 MCP 审批自动认领

前言

在 DeepSeek Harness(DSH)里,除非当前权限预设另有说明,Harness 会对每次工具调用请求用户审批。接入 MCP 后,mcp__* 类工具同样会弹出审批卡片。若你已经在 workspace-write 沙箱边界内工作,又希望 MCP 调用不再反复打断会话,需要在不改动策略插件、也不去 tools/execute 钩子里和后续策略监听器抢优先级的前提下,专门处理「审批请求」这一层。

下面介绍社区插件 dsh-mcp-auto-permission(维护者 ThomasTZh,目录分类 admin-security)。它通过一个 bundle 增加名为 Workspace Write + MCP 的权限预设,并在该预设生效时,把 MCP 相关的审批请求认领为 allowed-once。

这是什么

dsh-mcp-auto-permission 是一个 DSH bundle:注册权限预设键 workspace-write-mcp(展示名 Workspace Write + MCP),并在 profile 根挂载 mcp-auto-permission 插件。它不修改任何工具定义、不更换沙箱、也不覆盖策略层的 hard deny,只参与回答 ctx.approval.request 触发的审批瀑布流。

Harness 本体与审批、权限服务来自 DeepSeek Harness 项目;本插件为社区维护,SkillHub 目录页与 DeepSeek / 幻方无官方从属关系。

核心功能

权限预设 workspace-write-mcp

项 值
Sandbox workspace-write
Approval policy ask
非 MCP 工具 行为不变,含沙箱升级提示
MCP 工具 审批请求被认领为 allowed-once
Preset key workspace-write-mcp
Display label Workspace Write + MCP

预设仍遵守 workspace-write 的文件与 shell 边界。若策略在询问用户之前已对某工具 hard deny,本 bundle 不会推翻该拒绝。

审批钩子如何工作

本地策略可通过 ctx.approval.request 发起审批。本插件在 approval/request 瀑布流上认领匹配 mcp__* 的请求并返回 allowed-once,用户通常看不到审批卡片。这样无需改 policy 插件,也避免在 tools/execute 上竞争——后者仍可能被更晚的策略监听器拦截。

钩子与当前会话的 permission preset 绑定:若 preset 不是 workspace-write-mcp,插件调用 next(),由常规定答逻辑处理。请求信号已 abort 时返回 cancelled;权限服务或 projection 不可用时回退到常规定答。

插件暴露 mcpAutoPermission.autoApproves(session, toolName)。通知类插件可据此跳过「仍需审批」的误报;审批仍会记录,工具仍会执行。

在该预设下会附加一段简短的 system-prompt 说明:告知模型 mcp__* 调用已预批准,避免通用「浏览器审批」措辞让模型无谓停顿。

仓库内文件

  • cordis.patch.yml:声明权限预设表,并在 profile 根插入 mcp-auto-permission 插件。
  • lib/index.js:审批钩子、自动审批服务、system-prompt 附注。
  • test/index.test.mjs:覆盖认领、回退、取消、autoApproves 谓词与附注等(6 个测试)。

安装与启用

安装前请自行阅读仓库源码与许可证;插件以当前 DSH 进程权限运行,clone 与 link 路径需你确认可信。

1、将仓库 clone 到本地插件目录(命令来自官方 README):

DSH_HOME=${DSH_HOME:-$HOME/.dsh}
git clone https://github.com/ThomasTZh/dsh-mcp-auto-permission \
  "$DSH_HOME/local-plugins/dsh-mcp-auto-permission"

2、在 $DSH_HOME/profiles/web/package.json 中增加本地 link 依赖,并在 dsh.profile.bundles 中列出 @local/dsh-mcp-auto-permission:

"@local/dsh-mcp-auto-permission": "link:<absolute path to $DSH_HOME>/local-plugins/dsh-mcp-auto-permission"

3、安装 profile 依赖并重启 DSH:

cd "$DSH_HOME/profiles/web" && pnpm install

bundle patch 会先于 profile patch 应用。若之后你在设置里改「新会话默认」预设,settings 服务会把完整的 permission 条目写入 profile patch,从而用相同预设定义覆盖 bundle 里的副本——这是 DSH 常规的设置持久化行为。

典型用法

启用 bundle 并在会话中选择(或设为默认)Workspace Write + MCP(workspace-write-mcp)后,在该 preset 下发起的 MCP 工具审批由插件自动认领为单次允许,非 MCP 工具仍按原有 ask 与沙箱规则走。

若你编写通知插件,可在展示「需要审批」提示前调用 mcpAutoPermission.autoApproves(session, toolName),避免对已自动认领的 MCP 调用重复告警。

仓库 README 注明:仅凭本仓库无法完整复现线上审批路径的全链路 live 测试;作者在编写环境中已跑通该 preset,但未为本 release 单独再做一次 live 检查。

适用场景与注意

适合: 已在 DSH web profile 中使用 MCP、希望保留 workspace-write 边界、又希望减少 MCP 审批卡片打断的开发者。

不适合或无效的情况(README Limitations):

  • MCP 工具若被策略 hard deny,本插件不会覆盖。
  • 委派子 agent 在上游将 approval policy 固定为 never,不会继承本模式。
  • headless profile 不加载此 bundle。

验证(仓库内已记录):

检查 命令 结果
单元测试 node --test test/index.test.mjs pass,6 tests
模块语法 node --check lib/index.js pass
安装布局 临时 DSH_HOME clone 后检查 package 与 patch pass;未在此流程中执行 pnpm install 与 harness 重启

结尾

dsh-mcp-auto-permission 在 DSH「一切皆插件」的模型里,用独立的审批认领层补上「Workspace Write + MCP」预设:文件与 shell 仍受 workspace-write 约束,MCP 则在当前 preset 下以 allowed-once 静默通过审批请求。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜