dsh-mcp-status:在聊天頂欄查看 MCP 服務器是否「此刻可用」

前言

DeepSeek Harness(DSH)在啓動時連接配置裏的 MCP 服務器。某個服務掛掉時,症狀往往不直觀:模型工具列表裏少了某個工具,或調用時出現傳輸錯誤。配置文件只能說明「應當連上誰」,不能說明「現在誰真的在應答」。

用端口探測判斷「在線」也不夠:TCP 端口開着但從未完成 MCP 握手,對 Harness 來說仍等於不可用。下面介紹社區插件 dsh-mcp-status(維護者 lobichshev-ops,MIT 許可,Node ≥ 20),它在會話頂欄增加 MCP 狀態按鈕,用與 Harness 相同的握手邏輯回答:當前能否完成 initialize + tools/list,各服務器暴露多少工具。

這是什麼

dsh-mcp-status 是 DSH 客戶端側插件:在聊天頭部 conversation.session.header.utilities 區域(與語言、Markdown 等控件同一行)放置 MCP 按鈕。點開彈層可查看各 MCP 服務器的名稱、端點、狀態、響應時間和工具數量;並可選展示從各 1C:EDT 項目 .mcp.json 發現的 EDT 服務塊。結果有緩存,打開面板即可讀上次探測數據;完整探測約需 15 秒量級。

倉庫:lobichshev-ops/dsh-mcp-status
目錄頁:SkillHub 插件頁

核心功能

元素 位置 作用
狀態圓點 聊天頂欄 全部應答爲綠點;有不可用項爲紅點
服務器列表 彈層內 名稱、endpoint、state、響應時間、工具數
EDT 塊 彈層內 當前通過項目 .mcp.json 發現的在服 EDT MCP
刷新 彈層標題欄 強制重新探測;時間戳在新結果落地後更新

主機側在啓動時及默認每 5 分鐘調用 Python 腳本 scripts/mcp_status.py(僅標準庫)做探測,結果寫入緩存文件並由 GET /plugin/mcp-status 提供;瀏覽器側約每 20 秒拉取該路由,探測進行中(refreshing: true)時改爲約 1.5 秒輪詢。

探測對每個已配置服務器做真實 MCP 握手,而非端口檢查:

  1. POST initialize(Accept: application/json, text/event-stream),必要時跟隨 /mcp 到 /mcp/ 的 307。
  2. 記錄 Mcp-Session-Id 併發送 notifications/initialized(部分 FastMCP 服務缺少此步會在 tools/list 報錯)。
  3. POST tools/list,解析 JSON 或 SSE data: 塊。
  4. 對 stdio 傳輸:按配置 spawn 子進程,經 stdin/stdout 交換換行分隔的 JSON-RPC,各階段有獨立超時。

狀態含義(資料原文):

state 含義
ok 握手成功,tools 爲服務器返回數量
warn initialize 成功但 tools/list 失敗
dead 拒絕連接、超時、HTTP 錯誤或非 MCP 響應
off 配置行 disabled: true
skipped 未探測(例如 EDT 項目無 URL)

可選配置寫在 loader 行的 config 中(均可省略):

鍵 默認 含義
pythonPath DSH 運行時 Python 探測腳本解釋器
scriptPath 包內 scripts/mcp_status.py 自定義探測腳本路徑
intervalMs 300000(5 分鐘) 後臺刷新週期,最小 15 秒

示例:

- insert:
    - id: mcp-status
      name: '@local/dsh-mcp-status'
      config:
        intervalMs: 60000

手動刷新:GET /plugin/mcp-status?refresh=1 會在後臺啓動探測並立即返回舊緩存且 refreshing: true,直至新結果寫入。

安裝與啓用

包自帶 dsh.bundle.patch,會向 profile 插入 loader 行。官方 README 步驟如下。

  1. 在 profile 目錄用 link 方式安裝本地包(路徑改爲你本機克隆或解壓後的絕對路徑):
cd ~\.dsh\profiles\desktop
pnpm add "link:<absolute path to this package>"
  1. 在 ~/.dsh/profiles/desktop/package.json 的 bundle 列表中加入插件名:
"dsh": {
  "profile": {
    "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "@local/dsh-mcp-status"]
  }
}
  1. 重啓 DSH。主機側隨 profile 加載並註冊路由;客戶端通過 window.__ModuleLoader__ 注入頂欄按鈕。

當前 package 版本爲 0.1.0,包名 @local/dsh-mcp-status。

典型用法

日常使用:打開任意會話,看頂欄 MCP 按鈕旁圓點顏色;點擊打開列表,確認各服務器 state 與 tools 是否符合預期。某工具突然從模型側消失時,先在此面板區分是 dead / warn 還是配置裏被註釋(響應 JSON 中 commentedOut 字段會列出被註釋的服務器 id)。

需要即時結果時,在彈層點刷新;UI 會在 refreshing 期間加快輪詢,新 fetchedAt 出現即表示緩存已更新。

開發與排錯時可直接請求 API(需 DSH Web 已運行且插件已加載):

GET /plugin/mcp-status
GET /plugin/mcp-status?refresh=1

返回體包含 ok、fetchedAt、durationMs、refreshing、error 及 data.servers 等字段,格式見倉庫 README「Wire format」一節。

README 另提到可單獨運行 scripts/mcp_status.py 做 standalone probe(細節見倉庫「Standalone probe」),適合在不啓動完整 UI 時驗證握手邏輯。

適用場景與注意

適合:本地或團隊維護多路 MCP(HTTP 與 stdio 混合)、依賴 EDT 項目內 MCP、需要區分「配置寫了」與「此刻能 list tools」的 DSH 用戶。

限制(資料原文要點):完整探測耗時可達約 15 秒;stdio 路由類服務在 tools/list 階段可能更久;探測以 當前 DSH 進程權限與環境 運行,與你在終端手動測 MCP 的路徑、網絡、沙箱可能不一致。

安裝前請自行閱讀 GitHub 源碼 與 MIT 許可證。插件來自社區目錄 SkillHub,與 DeepSeek / 幻方無官方從屬關係;DSH 生態主張「一切皆插件」,是否啓用由你自行評估。

結尾

dsh-mcp-status 把 MCP 連通性從「間接猜」變成頂欄一鍵可見:握手級探測、工具數量、緩存與手動刷新,與 Harness 實際加載工具的條件對齊。

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

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

小夜