前言¶
在 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 靜默通過審批請求。