前言¶
在 DSH 裏讓智能體幫你看服務是否在線,常見做法是臨時 curl 或寫一次性腳本:每次對話都要重新描述目標,結果格式也不統一。若你維護的是小規模自託管環境,更穩妥的做法是把「要盯什麼」寫進固定清單,由工具按同一套規則做 HTTP、TCP、SSL 與 Docker 探測,且只讀、不重啓、不修復。社區插件 lowspecai/dsh-home-monitor(維護者 lowspecai,分類:聯網工具)就是按這個思路實現的:同一套檢查既可註冊爲 DSH 工具,也可單獨作爲 MCP stdio 服務運行。
這是什麼¶
home-monitor 面向 dsh 0.2.0-rc.2 及以上(package.json 中 engines.dsh 爲 >=0.2.0-rc.2),許可證 MIT,當前版本 0.1.0。它只做只讀健康檢查:打開連接、讀取、關閉,不寫配置、不重啓進程、不執行修復命令。
兩種打包方式共用 server/config.json:
- DSH 插件:向智能體註冊五個工具——
monitor_http、monitor_tcp、monitor_ssl、monitor_docker、monitor_targets。 - 獨立 MCP stdio 服務:同一套邏輯,工具名爲
check_http、check_tcp、check_ssl、check_docker、monitor_status,任意 MCP 客戶端均可調用。
插件層 lib/index.js 直接引用 server/monitors/ 下的模塊;MCP 子包 server/ 單獨依賴 @modelcontextprotocol/sdk,MCP 鏈路異常時不會拖垮 DSH 側五個工具。
核心功能¶
HTTP¶
對 config.json 裏 http.targets[] 中的 { name, url, expect?, headers? } 發起請求,返回狀態碼、延遲與 body 大小。expect 可爲單個狀態碼或數組;例如 [200, 302, 401] 表示任一碼即視爲健康——受保護端點返回 401 仍可能是「服務在線且鑑權生效」,而非故障。
TCP¶
對 tcp.targets[] 中的 { name, host, port } 做連接探測,默認連接超時 8000 ms(HTTP)/ 5000 ms(TCP),可在對應節調整 timeoutMs。
SSL¶
對 ssl.targets[] 檢查證書過期時間、剩餘天數、簽發者與鏈信任;全局 ssl.warnDays 默認 21 天。單目標可設 warnDays、servername、allowSelfSigned 等。
Docker¶
默認 關閉(docker.enabled: false 時工具返回 status: "unavailable")。開啓後通過 docker.socket(默認 /var/run/docker.sock)做 engine ping,並按 docker.expectRunning[] 校驗容器是否處於 running。掛載 Docker 套接字等於高權限,需顯式 opt-in。
調用約定¶
targets[].name 即工具參數 { "target": "name" };省略 target 則檢查該協議下的全部目標。批量結果統一爲 JSON:ok、checked、failed(失敗名稱列表)、results[](含 name、ok、ms 及協議細節);未知 target 返回 ok: false 與 known 列表。失敗以字段表達,不拋異常。
安裝與啓用¶
以下步驟假設容器內源碼路徑爲 /workspace/home-monitor(宿主機常見爲掛載的 ./workspace)。官方 README 亦提供 git clone 獲取源碼;若你已有目錄,可用 docker cp 拷入容器。
1. 安裝 MCP 子包依賴¶
在 DSH 容器內執行:
docker exec dsh sh -c 'cd /workspace/home-monitor/server && npm i'
容器內 npm i 需能訪問 registry;鏡像默認常用 npmmirror,可用 npm config get registry 確認。
2. 解析 @deepseek-ai/dsh-tools¶
lib/index.js 通過 bare name 引用 @deepseek-ai/dsh-tools,peer 爲 optional,npm i 不會自動安裝。在 stock 鏡像中需手動鏈到 DSH 自帶副本:
docker exec dsh sh -c 'mkdir -p /workspace/home-monitor/node_modules/@deepseek-ai && ln -sfn /usr/local/lib/node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai/dsh-tools /workspace/home-monitor/node_modules/@deepseek-ai/dsh-tools'
@deepseek-ai/dsh-mcp-client 由 dsh 包自帶,patch 行加載時從 DSH 的 node_modules 解析,一般無需額外鏈接。
3. 接入 profile(任選一種)¶
方式 A:安裝到 profile 並在 patch 中引用包名:
docker exec dsh sh -c 'cd /data/profiles/web && corepack enable pnpm && pnpm add /workspace/home-monitor'
在 /data/profiles/web/cordis.patch.yml 增加:
- insert:
- id: home-monitor
name: home-monitor
方式 C:不裝 pnpm,直接指向插件入口:
- insert:
- id: home-monitor
name: '/workspace/home-monitor/lib/index.js'
編輯 cordis.patch.yml 前建議備份;無效 patch 可能導致容器重啓循環。改完後可用 overlay 先驗證再重啓生產:
docker exec dsh sh -c 'cd /workspace && dsh --profile headless --patch /tmp/ol.yml --dump-config' | grep -n home-monitor
其中 /tmp/ol.yml 內容與方式 C 的 insert 相同。
4. 確認並重載¶
docker exec dsh dsh --profile web --dump-config | grep -n 'home-monitor\|mcp-client'
docker restart dsh && docker logs --tail 40 dsh
stock 配置下 HMR root 爲空,改 patch 後需重啓容器。合併配置末尾會列出已應用的 patch 層;成功後 harness 可出現 MCP 側工具(如文檔中的 mcp__home_monitor__check_http)。
插件還通過 package.json 的 dsh.bundle.patch 指向 cordis.patch.yml,用於把 MCP 服務行寫入 bundle patch;與 profile 行的疊加順序見 README「Patch layering」。
配置 server/config.json¶
整份監控清單放在 server/config.json(純 JSON,JSON.parse 解析;以下劃線 _ 開頭的鍵僅作文檔,代碼忽略)。
| 鍵 | 含義 |
|---|---|
http.timeoutMs |
單次請求超時,默認 8000 |
http.targets[] |
{ name, url, expect?, headers? } |
tcp.timeoutMs |
連接超時,默認 5000 |
tcp.targets[] |
{ name, host, port } |
ssl.timeoutMs |
握手超時,默認 10000 |
ssl.warnDays |
過期預警天數,默認 21 |
ssl.targets[] |
{ name, host, port?, warnDays?, servername?, allowSelfSigned? } |
docker.enabled |
默認 false |
docker.socket |
默認 /var/run/docker.sock |
docker.expectRunning[] |
必須爲 running 的容器名 |
修改 config.json 後需重啓相關進程;工具發現列表在啓動時快照。
典型用法¶
在 DSH 對話中¶
配置好 target 名稱後,讓智能體調用 monitor_http 等工具,傳入 { "target": "dsh" } 或省略以掃描整組。README 截圖說明:對需鑑權的 / 返回 401 可判定爲探測成功(鑑權門仍在響應)。
獨立 MCP 服務¶
cd server && npm i
node index.js
在 MCP 客戶端中註冊(路徑按實際安裝調整):
{
"mcpServers": {
"home_monitor": {
"command": "node",
"args": ["/workspace/home-monitor/server/index.js"],
"env": { "PATH": "/usr/local/bin:/usr/bin:/bin" }
}
}
}
經 @deepseek-ai/dsh-mcp-client 接入時,未顯式傳入的 env 會被清理,需保留 PATH 以便找到 node。serverName 須匹配 [A-Za-z0-9_-]{1,32}。
無客戶端時可管道 smoke test:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"t","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
| node index.js
適用場景與注意¶
適合:家庭實驗室、少量自託管服務(Web、端口、證書、可選 Docker)需要統一清單、只讀探測,並希望在 DSH 對話或 MCP 客戶端裏複用同一配置。
不適合:需要自動修復、告警推送、歷史存儲或出站地址白名單的場景——本插件故意不做寫入與過濾,且將 config.json 視爲受信輸入;勿把 MCP 服務或 Docker 套接字暴露給不可信網絡。
權限與安全:插件與 MCP 進程以當前 DSH 容器權限運行;安裝前請閱讀 GitHub 源碼 與 MIT 許可證。SSL 檢查使用 rejectUnauthorized: false 以便報告鏈信任結果,是否算失敗由 authorized 與 allowSelfSigned 決定。無出站地址過濾,可探測內網私有地址。
其他限制:MCP 子進程異常退出需手動重啓;DSH 內工具調用另有約 20 秒硬超時;容器內無 ps,排查 MCP 子進程可參考 README 中的 /proc 與 docker top 說明。
結尾¶
dsh-home-monitor 把自託管監控清單收斂到單一 server/config.json,以只讀探測方式接入 DSH 五個工具或獨立 MCP,適合「先列清單、再讓智能體查狀態」的工作流。目錄頁:https://www.skillhub.cn/plugins/lowspecai/dsh-home-monitor;源碼與完整接線說明:https://github.com/lowspecai/dsh-home-monitor。DSH 社區目錄爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;生態上 DSH 仍遵循「一切皆插件」的擴展方式。