用 dsh-mcp-panel 管理 DeepSeek Harness 的 MCP 服務器

前言

DeepSeek Harness(簡稱 dsh)把「一切皆插件」寫進了運行時:模型、工具、會話、沙箱和界面都掛在 Cordis 內核上,改配置就能換能力,不必改核心源碼。MCP(Model Context Protocol)也走同一條路——官方包 @deepseek-ai/dsh-mcp-client 負責連外部 MCP 服務器,並把工具註冊成模型能直接調用的 mcp__服務器名__工具名

這條橋很好用,配置卻偏「手寫 YAML」:每個服務器一行 cordis.yml / cordis.patch.yml,傳輸方式、命令、URL、環境變量都寫在配置裏。連不上的時候,常見做法是翻日誌、猜重連次數、再讓模型試一次工具調用。服務器一多,狀態、工具清單和最近錯誤就散在各處,密鑰還容易在排障時被原樣打出來。

本文介紹社區插件 dsh-mcp-panel。它不替代官方 MCP 客戶端,而是疊在上面的管理控制檯:用 /mcp 命令和設置頁裏的 MCP 標籤頁看狀態、工具、錯誤和重連次數;需要改服務器時,生成可預覽的 patch 片段,審批通過後再追加寫入,並自動備份。本文依據社區插件目錄頁、GitHub 倉庫 README、package.json、CHANGELOG、npm 頁面以及官方 @deepseek-ai/dsh-mcp-client 說明交叉覈對,當前倉庫版本爲 0.4.0。社區插件目錄是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。

這是什麼

dsh-mcp-panel 是一款界面增強插件,由 PerryLink 維護,許可證爲 Apache-2.0,主要語言是 TypeScript。GitHub 倉庫當前顯示 9 星(社區目錄頁收錄時顯示爲 4 星,星標以倉庫頁面爲準)。npm 上的發佈名爲 dsh-mcp-panel,與 GitHub 倉庫同名。

它面向 DeepSeek Harness 官方 MCP 客戶端,定位可以分成兩層:

  1. 只讀運行時視圖:通過官方客戶端已經提供的 mcp/status 可觀測接口、工具註冊表和 loader,列出各服務器的傳輸、目標、工具數、連接狀態、最近錯誤和重連次數。沒有觀測到的字段如實顯示 unknown / ,不編造連通狀態。
  2. 受控的 profile 寫入:在設置頁用表單增刪改服務器,輸出的是 cordis.patch.yml 裏那一套 insert / set / set disabled 操作。可以只複製片段自己貼,也可以走審批後追加寫入;寫入前會備份,默認保留最近 5 份。傳輸、OAuth 和 MCP 協議本身它都不改。

官方客戶端仍然是唯一橋接層:每個 MCP 服務器對應一行 @deepseek-ai/dsh-mcp-client,負責連接、同步工具、註冊 mcp__* 名稱。面板只是體驗層。README 把它概括成一句話:官方 client 是橋,本插件是控制檯。

兼容範圍以倉庫說明爲準:DeepSeek Harness 0.1.0-rc.50.1.0-rc.6,Node.js ^22.19.0 || >=24.0.0,平臺是 Web GUI(Host + 瀏覽器雙面)。面板本身對模型只讀,只有 /mcp 命令的輸出會對模型可見。

官方客戶端在做什麼

先看官方客戶端自己怎麼配,能更清楚面板補的是哪一塊。@deepseek-ai/dsh-mcp-client 的 README 寫明:每個 MCP 服務器一個插件實例,寫在 cordis.yml 裏。下面是官方文檔裏的示例:

- id: mcp-github
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: github
    transport: stdio
    command: npx
    args: ['-y', '@modelcontextprotocol/server-github']
    env:
      GITHUB_TOKEN: !!js process.env.GITHUB_TOKEN

- id: mcp-web
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: web
    transport: streamable-http
    url: http://localhost:3000/mcp
    headers:
      Authorization: !!js '`Bearer ${process.env.MCP_TOKEN}`'

模型看到的是 mcp__github__create_issuemcp__web__search 這類帶命名空間的名字。傳輸支持 stdiostreamable-http。官方說明還寫了一條邊界:當前只橋接 Tools,Resources 和 Prompts 沒有 harness 側消費者,處於延期狀態。

面板不會改這些行的語義。它讀的是客戶端暴露出來的狀態,寫的是 profile 的 patch 層。裝上面板之後,配置裏會多出一行類似:

- id: mcp-panel
  name: dsh-mcp-panel
  config:
    probeEnabled: true

核心功能

倉庫 README 和 CHANGELOG 0.4.0 把能力分成命令面和設置頁兩塊,下面按已覈實內容說明。

/mcp 命令族

在會話裏可以直接打命令,輸出對模型可見,也可以從會話日誌重建。

  1. /mcp:每個服務器一行,包含 transport、目標、工具數、連接狀態、最近錯誤、重連計數。連接狀態來自上游 mcp/status seam;沒有觀測時顯示 unknown。輸出語言由配置項 outputLanguage 控制,可選 enzhespthi
  2. /mcp tools:列出模型可見的 mcp__* 工具名和描述。
  3. /mcp health:根據脫敏後的錯誤文本給出派生建議,例如 ENOENT 對應依賴缺失、ECONNREFUSED、超時、401/403/404、DNS、限流、重連耗盡等。子進程退出碼和 stderr 尾部如果官方客戶端還沒暴露,會標明「待官方支持」,不會假裝已經有數據。
  4. /mcp call [json]:走官方工具管線 ctx.tools.execute() 做試用調用。pre-execute 權限策略、審批、guard、post-execute 全部生效,不是面板自己另開一條旁路。
  5. /mcp disable / /mcp enable:給出精確的 set patch 行,用來禁用或重新啓用某一行。

README 裏的快速示例(假設已經配了名爲 everything 的演示服務器):

/mcp
/mcp everything tools
/mcp everything health
/mcp everything call echo '{"message": "hi"}'

設置頁:MCP 標籤

打開 設置 → 插件 → MCP,同一份快照會以狀態卡片形式展示:徽章、診斷、探測結果,以及下面三塊控制檯。

  1. Server CRUD:表單添加、修改服務器;「刪除」在 patch 詞彙表裏沒有 remove,實際是追加 set disabled: true,以後還能重新啓用。表單會預填當前行;未改動的密鑰在 Host 側保留原值,編輯器只看見 key。生成的片段可以複製,也可以審批寫入。
  2. 工具試用臺:選服務器 → 選已註冊的 mcp__* 工具 → 填 JSON 參數 → 調用。結果同時給出規範 JSON 和渲染內容,按 trialMaxResultChars(默認 60000 字符)截斷。試用結果只留在面板,不進入模型上下文。
  3. 探測與能力一覽:可對 Streamable HTTP 服務器做一鍵或被動連通性探測,結果只在面板裏看。Resources / Prompts 用特徵探測判斷上游 catalog 是否就緒;目前二者都標「待官方支持」。

另外還有一個可選工具 mcp_probe,用後臺任務做一次性 Streamable HTTP 探測,結果同樣只給面板。

脫敏與寫入邊界

排障面板最容易把 token 打到界面上。倉庫把這條寫進了安全邊界:

  • URL 查詢憑據、userinfo 密碼、header 值、Bearer token、JWT 在渲染前打碼。
  • 配置裏的 headers 不進入任何快照;env / header 的不出 Host,編輯器只見 key。
  • 寫入只追加、走審批、先備份。存在審批服務且當前會話的 agent 處於開啓輪次時,寫入走 ctx.approval(僅 allowed-once 放行);否則用界面上的顯式確認。writeEnabled: false 是硬開關,關掉後拒絕一切 profile 寫入,複製片段仍然可用。
  • 插件不註冊任何提示詞段落;對模型可見的文本主要是命令/工具描述。

權限方面,dshWorkshop 清單聲明瞭 network:outboundnative-code:none

安裝與啓用

社區目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端裏運行即可:

dsh plugin add github:PerryLink/dsh-mcp-panel

倉庫 README 針對 Web profile 寫得更具體,並提供 git 通道和 npm 通道。git 通道會跑包裏的 prepare 腳本做構建;npm 通道用已發佈的 tarball,不必再走構建審批:

# git 通道,跟最新 main
dsh plugin --profile web add "github:PerryLink/dsh-mcp-panel#main"

# 固定到已發佈的 0.4.0 標籤(可復現安裝)
dsh plugin --profile web add github:PerryLink/dsh-mcp-panel#v0.4.0

# npm 通道
dsh plugin --profile web add dsh-mcp-panel

# 固定 npm 版本
dsh plugin --profile web add dsh-mcp-panel@0.4.0

目錄頁也提示:如需可復現安裝,可寫成 dsh plugin add github:PerryLink/dsh-mcp-panel#commit,把 commit 換成具體哈希。

安裝後重啓,或讓 Web 面板熱重載 cordis.patch.yml,再用下面命令確認出現了 mcp-panel 這一行:

dsh --profile web --dump-config | grep -A3 'id: mcp-panel'

然後打開 設置 → 插件 → MCP,或在會話裏執行 /mcp

卸載按 README:從 cordis.patch.yml 去掉 mcp-panel 行(Web 面熱重載),從 profile 的 node_modules 刪掉這個包,再用 dsh web --dump-config 確認沒有殘留行。

目錄頁和倉庫都提醒:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。 安裝前請檢查源代碼倉庫和許可證。

配置項

可調項都是 Schemastery Config 字段,可以在 cordis.yml / cordis.patch.yml 裏覆蓋。倉庫文檔列出的鍵如下(默認值來自 README):

默認值 含義
probeEnabled true 是否註冊 mcp_probe 後臺任務工具
probeTimeoutMs 10000 單次探測超時(毫秒)
maxProbes 10 面板展示的探測記錄數
refreshIntervalMs 0 建議的面板刷新間隔;0 表示按需
outputLanguage en /mcp 輸出語言:en / zh / es / pt / hi
passiveProbeEnabled false 是否週期性探測 streamable-http 服務器
passiveProbeIntervalMs 60000 被動探測間隔(毫秒)
trialEnabled true 是否啓用工具試用臺和 /mcp call
trialTimeoutMs 120000 每次試用調用的面板側截止時間
trialMaxResultChars 60000 試用結果載荷上限(字符)
writeEnabled true 寫入總開關;false 時仍可複製片段
backupCount 5 每次寫入保留的 cordis.patch.yml 備份數

如果只想看狀態、不想讓面板改配置,把 writeEnabled 設成 false 即可。中文界面可以把 outputLanguage 改成 zh

適用場景與注意事項

比較適合下面幾類用法:

  1. 已經在 profile 裏掛了若干 @deepseek-ai/dsh-mcp-client 行,想一眼看到誰連上了、誰在重連、最近一次錯誤是什麼。
  2. 不想爲了加一臺 stdio 或 HTTP MCP 服務器去手改 YAML 縮進和引號,希望用表單生成 patch,複製或審批後再落地。
  3. 調用模型之前,先在試用臺用官方管線跑一遍 mcp__* 工具,確認參數和權限策略。
  4. 對外分享截圖或日誌前,需要面板先把 token、header、JWT 打碼。

使用時有幾條邊界需要提前知道:

  • 它不是另一個 MCP 客戶端。 不會自己建傳輸、做 OAuth、改協議。沒有官方客戶端那一行,面板沒有橋可看。
  • 平臺目前是 Web GUI。 倉庫兼容表寫的是 Host + 瀏覽器雙面,不是所有 dsh 運行面都有這塊設置頁。
  • Harness 版本要對上。 聲明兼容 0.1.0-rc.50.1.0-rc.6。dsh 仍處於 developer preview,核心插件和 API 還會變,升級 Harness 後應再覈對插件版本。
  • Resources / Prompts、退出碼 / stderr 尾部 在官方客戶端補齊之前,面板會標「待官方支持」,不要把這些空字段理解成「服務器沒開這項能力」。
  • 「刪除」其實是禁用。 patch 沒有 remove 操作,禁用後行還在,可以再 enable。
  • 插件權限等於當前 dsh 進程。 安裝社區插件前應閱讀源碼和 Apache-2.0 許可證;生產環境更建議固定 commit 或 npm 版本,而不是一直追 main

小結

dsh-mcp-panel 解決的是官方 MCP 客戶端「能連、但不好看、不好改」這一段:狀態從 mcp/status 讀,配置改動落成可預覽、可審批、可回滾的 patch,工具試用走同一條 ctx.tools.execute() 管線。它把控制檯和橋接層拆開,官方客戶端繼續負責傳輸和工具註冊,面板負責觀察和受控修改。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-mcp-panel/

GitHub:https://github.com/PerryLink/dsh-mcp-panel

npm:https://www.npmjs.com/package/dsh-mcp-panel

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

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

小夜