前言¶
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 握手,而非端口檢查:
POST initialize(Accept: application/json, text/event-stream),必要時跟隨/mcp到/mcp/的 307。- 記錄
Mcp-Session-Id併發送notifications/initialized(部分 FastMCP 服務缺少此步會在tools/list報錯)。 POST tools/list,解析 JSON 或 SSEdata:塊。- 對
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 步驟如下。
- 在 profile 目錄用 link 方式安裝本地包(路徑改爲你本機克隆或解壓後的絕對路徑):
cd ~\.dsh\profiles\desktop
pnpm add "link:<absolute path to this package>"
- 在
~/.dsh/profiles/desktop/package.json的 bundle 列表中加入插件名:
"dsh": {
"profile": {
"bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "@local/dsh-mcp-status"]
}
}
- 重啓 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