前言¶
在 DeepSeek Harness(DSH)中,MCP 客戶端是以進程全局的方式註冊工具的。這意味着 @deepseek-ai/dsh-mcp-client 會將所有 MCP 服務器的工具列表注入到 ctx.tools,並以 mcp__<serverName>__<toolName> 的形式存在。因此,即使一個會話僅用於處理 Jira 任務,它也可能攜帶了三個數據庫服務器和一個瀏覽器驅動,不僅佔用了上下文窗口,還可能被誤調用。
dsh-mcp-workspace-scope 插件通過目錄維度對 MCP 工具注入進行限制。它允許你定義一個目錄白名單,子目錄自動繼承該規則,同時提供會話級別的臨時開關,在規則之外按需啓用服務。
插件簡介¶
- 名稱: dsh-mcp-workspace-scope
- 維護者: felix-lj-ct
- 類別: admin-security
- 許可: MIT
該插件通過隱藏工具和拒絕調用兩種機制,在保持 MCP 服務運行的同時,爲每個項目提供清晰的工具邊界。
核心功能¶
- 目錄級白名單: 定義每個目錄允許使用的 MCP 服務器列表,子目錄自動繼承父級規則。
- 雙重拒絕機制: 不僅隱藏工具,還在調用時進行拒絕(
guard),提供硬性邊界。 - 會話級臨時開關: 在 Composer 中提供 Pill 組件,允許在當前會話中臨時啓用或禁用特定服務器。
- 狀態誠實讀出: 顯示服務器的運行時狀態,能夠識別“已允許但已死”的服務器。
- 可視化編輯器: 提供設置頁面的規則編輯器,支持從已知工作區下拉選擇。
安裝與啓用¶
安裝插件需要指定 profile(例如 web)。安裝後需要重啓 profile 才能生效。
dsh plugin --profile web add dsh-mcp-workspace-scope
重啓 profile:
dsh --profile web
安裝後,插件會在 profile 的 cordis.patch.yml 中掛載 Host 層。默認配置文件路徑爲 ~/.dsh/mcp-workspace-scope.json。若不存在該文件,插件將不生效,所有會話仍將注入所有 MCP 服務器。
規則配置¶
規則文件採用 JSON 格式,包含 default 和 rules 兩個頂層字段。
- default: 控制未匹配到任何規則的目錄(即根目錄或未被顯式覆蓋的路徑)的行爲。可以是
"*"(注入全部)、[](注入全部禁用)或一個服務器名稱數組。 - rules: 數組,每一項包含
path(目錄)和servers(允許的服務器列表)。
配置示例 (~/.dsh/mcp-workspace-scope.json)
{
"default": "*",
"rules": [
{
"path": "D:/work/frontend",
"servers": ["playwright", "context7"]
},
{
"path": "D:/work/master-data-management",
"servers": ["atlassian", "bigquery"]
}
]
}
匹配規則
- 子目錄繼承父目錄規則。
- 採用最長路徑匹配優先原則。
- 相同長度的規則中,後定義的優先。
- 規則修改會立即應用於正在運行會話(可通過配置
applyToRunningSessions凍結此行爲)。
使用與交互¶
- 啓用/禁用: 在 Composer 中,會話旁邊會出現 MCP Scope Pill。點擊 Pill 可以在當前會話中臨時啓用或禁用特定服務器,無需修改全局規則。
- UI 編輯: 在設置頁面的 “MCP scope” 區域,可以直接通過 UI 編輯器添加規則、選擇目錄和服務器。
限制與注意¶
- 不可憑空啓用: 該插件僅支持“減法”操作,不能啓用在 profile 中已被禁用的服務器。
- 內存佔用: 被隱藏的服務器仍在運行並佔用內存。若需完全停止服務,應將其移至 Agent Preset。
- 子代理隔離: 子代理的範圍由其自身的工作目錄決定,不繼承父代理的限制。
- 運行時重載: 規則變更(無論是通過 UI 保存還是直接編輯文件)會立即重新計算並應用於當前會話。
總結¶
dsh-mcp-workspace-scope 解決了 DSH 環境中 MCP 工具污染上下文的問題。它通過目錄繼承和會話級開關,幫助開發者構建更乾淨的上下文邊界。
- GitHub 倉庫: https://github.com/felix-lj-ct/dsh-mcp-workspace-scope
- 插件目錄: https://www.skillhub.cn/plugins/felix-lj-ct/dsh-mcp-workspace-scope