dsh-mcp-manager:按工作區獨立開關 MCP 與 Skills

前言

在 DeepSeek Harness(DSH)裏,MCP 與 Skills 往往按 profile 全局生效:同一份 mcp: 配置會作用到所有工作區和會話。日常開發裏這會帶來幾類具體摩擦——例如 codebase 在兩個項目裏各自對應不同的 .codebase/codebase.db,全局只能指向其一;註冊了多個 MCP 時,當前工作區其實只需要其中一個,其餘進程仍佔用資源並把工具列表撐大,模型更容易選錯工具;~/.claude/skills 下的技能也會在每個會話裏出現,而多數工作區只需要其中少數幾個。

下面介紹社區插件 dsh-mcp-manager(維護者 gyp8735abc,npm 包 @gyp8735abc/dsh-mcp-manager,MIT 許可證)。它把開關粒度下沉到工作區:每一行工作區左側多一個插頭圖標,點開彈窗即可分別啓用或關閉該工作區下的項目 MCP、全局 MCP、手動 MCP 以及各類 Skills,且互不牽連。

這是什麼

dsh-mcp-manager 是面向 DSH Web 客戶端的插件(分類:客戶端)。一句話定位:Per-workspace MCP and skill switches for DeepSeek Harness — one popup per workspace row。

它不修改 DSH 核心安裝目錄,安裝或卸載隻影響 profile 與 $DSH_HOME(默認 ~/.dsh)。界面語言跟隨 DSH(英文 / 簡體中文)。

與全局配置的差異

DSH 自帶的 MCP 配置是 profile 級別的;本插件把可切換對象按來源拆開,並在工作區路徑上保存狀態:

對象 來源 切換粒度
Global MCP ~/.claude.json 中的 mcpServers 按工作區
Project MCP 工作區內的 .mcp.json 按工作區
Manual MCP profile 裏手寫的 dsh-mcp-client 行 按工作區
Skills .dsh/skills、.claude/skills、.agents/skills 及用戶目錄下對應路徑 按工作區

在 A 工作區關掉的 MCP,在 B 工作區仍可保持開啓。

核心功能

一行工作區一個彈窗

彈窗內按組展示:Project MCP / Global MCP / Manual MCP / Project skills / Global skills。每一行一個開關,並 inline 顯示 Enabled/Disabled 以及 MCP 的 Connected/Not connected。空組會隱藏;若該工作區沒有任何可配置項,會顯示空狀態提示。

真正的按工作區隔離與聯合掛載

狀態鍵是絕對工作區路徑。多個工作區若同時有活躍會話,各自 MCP 以 (工作區, 服務) 爲單位獨立進程掛載,帶各自的配置與 cwd;切換或聚焦會話不會停掉其它工作區的服務;某工作區最後一個會話結束時,該工作區的服務纔會卸載。

項目級 MCP 在運行時會帶工作區前綴:例如工作區 A 裏的 codebase 變爲 a__codebase,模型側工具名爲 mcp__a__codebase__search_code 這類形式,同名服務在不同工作區可並存,不會互相覆蓋。

會話級工具與技能過濾

當前會話只能看到本工作區的 mcp__<workspace>__* 工具,以及全局/手動 MCP 工具,其它仍在線工作區的工具不會泄漏進來。被關閉的 Skill 會從模型目錄和 /name 注入中消失;若直接調用 skill 工具會被拒絕並給出明確原因。

其它已文檔化的能力

  • 兼容 Claude Code 技能佈局,會掃描項目 .claude/skills 與用戶 ~/.claude/skills,包括無 YAML frontmatter 的 SKILL.md。
  • 每次打開彈窗會重新讀取工作區列表與各工作區 .mcp.json,新工作區或改過的配置無需重啓 DSH 即可反映。
  • 彈窗通過同源 HTTP API 拉取清單與切換狀態(例如 GET /api/dsh-mcp-manager/inventory?active=<workspace path>);需要自動化時可查閱倉庫 README 中的 API 表。

安裝與啓用

DSH 沒有中心化應用商店;通過「插件市場」添加的是你信任的 index URL,索引內容未經 DSH 簽名,安裝前請在確認對話框中核對來源爲 @gyp8735abc/dsh-mcp-manager。

方式一:插件市場(三步,只需做一次實驗性開關)

  1. 打開 Plugins → Experimental plugins,啓用 Custom plugin markets(Discover 標籤在該 bundle 啓用後才存在)。
  2. 在 Discover → Add index source 填入:
https://gyp8735abc.github.io/dsh-mcp-manager/index.json

也可額外添加社區目錄 https://cdn.jsdelivr.net/npm/dsh-plugin-catalog/index.json(Awesome DSH Plugin catalog),再搜索 MCP manager、mcp、workspace 或 gyp8735abc 安裝。

  1. 打開條目並點擊 Install。

方式二:一條命令

適用於已配置 web profile 的環境:

dsh plugin --profile web add @gyp8735abc/dsh-mcp-manager

包內帶 dsh.bundle.patch,profile 組合會自動插入插件行,無需手寫 cordis.patch.yml。

方式三:從源碼目錄安裝

在已 clone 的倉庫根目錄執行(資料中的官方寫法):

dsh plugin --profile web add .

驗證與生效

dsh --profile web --dump-config | grep -A 3 dsh-mcp-manager

輸出中出現 id: dsh-mcp-manager 表示已進入組合樹。隨後重啓 dsh web,並在瀏覽器硬刷新(Ctrl+Shift+R)——客戶端 bundle 僅在啓動時注入。之後每個工作區行左側會出現插頭圖標。

運行環境要求(來自 package.json):dsh 爲 >=0.2.0-rc.2 <0.3.0,Node >=22。

典型用法

  1. 在 Web UI 工作區列表中,點擊目標行左側插頭圖標,打開 MCP & skills 彈窗。
  2. 彈窗頂部會標註當前 Active 工作區路徑:
    - 若正是當前聚焦的工作區,切換開關會立即連接或斷開 MCP,並註冊/卸載工具。
    - 若不是當前活躍工作區,開關只寫入狀態;該工作區下次有會話時再按狀態掛載。
  3. 按需關閉本工作區不需要的全局 MCP 或 Skills,保留項目 .mcp.json 裏真正要用的條目。

彈窗佈局示意(來自 README):

┌ MCP & skills ───────────────────────────────┐
│ Workspace  D:\ai-workspace   Active          │
│                                              │
│ Project MCP (.mcp.json)                      │
│   ● codebase      stdio   Enabled  Connected │
│   ○ e2e-runner    stdio   Disabled —         │
│                                              │
│ Global MCP (~/.claude.json)                  │
│   ● everything-search  http  Enabled Connected│
│                                              │
│ Manual MCP (profile)                         │
│   ○ codegraph     stdio   Disabled —         │
│                                              │
│ Project skills (this workspace)              │
│   ● officecli  .dsh    Enabled               │
│   ○ probe      .claude Disabled              │
│                                              │
│ Global skills (all workspaces)               │
│   ● diagnose-windows-sandbox-acl  ~/.dsh     │
└──────────────────────────────────────────────┘

狀態持久化

開關狀態寫在 $DSH_HOME/mcp-manager/state.json,例如:

{
  "projects": [
    {
      "path": "D:\\ai-workspace",
      "disabled": ["dsh-mcp-manager__codebase"],
      "disabledSkills": ["office"]
    }
  ]
}
字段 含義
path 工作區絕對路徑(身份鍵)
disabled 在該工作區禁用的 MCP 運行時名;項目 MCP 爲 <slug>__<name>,全局/手動 MCP 爲 plain name
disabledSkills 在該工作區禁用的 skill 名

首次啓動時會一次性從 $DSH_HOME/settings.yaml 裏舊的 mcp: 段導入;disabled 同時認 qualified 名與 legacy 的 plain 名(如 codebase)。手改文件後,在重啓 DSH 或下次打開彈窗時生效。

適用場景與注意

適合誰: 同一 DSH profile 下並行維護多個代碼倉庫或工作區,且各工作區需要的 MCP 進程、Skills 集合差異很大;希望減少無關工具進入當前會話、降低誤調用概率的開發者。

權限與安全: 插件與當前 dsh 進程同權限運行,MCP 子進程也繼承該環境。安裝前請閱讀 GitHub 倉庫 源碼與 MIT 許可證;從市場安裝時只添加你信任的 index 源,並在安裝確認裏覈對包名。

生態說明: DSH 主張「一切皆插件」;SkillHub 目錄頁與社區 catalog 是獨立索引,與 DeepSeek / 幻方無官方從屬關係。

結尾

經過上面的步驟,你可以在不拆 profile、不改 DSH 核心的前提下,把 MCP 與 Skills 的啓用範圍精確到每一個工作區行。更多細節與 API 說明見項目 README。

  • 目錄頁:https://www.skillhub.cn/plugins/gyp8735abc/dsh-mcp-manager
  • GitHub:https://github.com/gyp8735abc/dsh-mcp-manager
羽毛球分组比赛记分
小程序二维码

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

小夜