前言¶
DeepSeek Harness (DSH) 允許在 profile 中添加 MCP 客戶端實例以調用瀏覽器能力。在多會話或多 profile 場景下,直接啓動多個瀏覽器實例通常會導致端口衝突、內存佔用過高以及進程間的互相干擾。dsh-browser-slotpool 插件通過引入“槽位池”機制,將併發瀏覽器會話的數量顯式化並加以隔離,解決上述衝突問題。
這是什麼¶
這是一個爲 DSH 提供的 patch 層 bundle。它本質上是一個瀏覽器啓動器,封裝了 @playwright/mcp 的 stdio 通信。插件維護一個固定數量的 CDP 端口池,每個 DSH mcp-client 實例獨佔一個槽位,確保會話之間互不破壞。插件本身沒有 TypeScript 源碼和構建步驟,安裝後即開箱即用。
核心功能¶
該插件主要提供以下能力:
* 槽位池管理:維護一組固定的 CDP 端口(默認 9222, 9223),先到先得,滿員時拒絕新連接。
* 原子加鎖與自愈:使用 fs.openSync 的獨佔標誌實現原子加鎖。通過檢查持有者的 PID 活性,自動回收異常退出的進程鎖,避免“槽全忙”的死鎖狀態。
* 冪等就緒探測:在啓動 Chrome 前先探測端口是否已開啓,避免重複啓動;不主動殺死其他槽位的瀏覽器。
* 所有權隔離:嚴格限制每個 mcp-client 會話只能操作分配給它的槽位,不代理、不竊取。
* 全委託:將 stdio 通信完全委託給 @playwright/mcp,並將診斷日誌輸出到 stderr 以保證 MCP 協議通道的暢通。
安裝與配置¶
安裝插件需要從 GitHub 倉庫添加依賴到當前 DSH profile。
- 在 DSH 的 checkout 目錄(與 GUI 所在 profile 一致)執行:
pnpm dsh plugin --profile web add github:bluechips-zhao/dsh-browser-slotpool
- 安裝完成後,重啓目標 profile 以加載依賴。
關鍵配置步驟¶
由於 !!js 在 DSH 中求值時沒有模塊作用域,啓動器路徑必須通過環境變量顯式指定。
- 找到插件安裝後的啓動器路徑:
<DSH_HOME>/profiles/<name>/node_modules/@deepseek-ai/dsh-browser-slotpool/bin/browser-slotpool.mjs
- 將該絕對路徑設置到環境變量
DSH_BROWSER_LAUNCHER(臨時或寫入啓動腳本):
$env:DSH_BROWSER_LAUNCHER = "<DSH_HOME>/profiles/<name>/node_modules/@deepseek-ai/dsh-browser-slotpool/bin/browser-slotpool.mjs"
可選環境變量¶
啓動器會讀取以下環境變量來控制行爲:
| 變量名 | 默認值 | 說明 |
|---|---|---|
DSH_BROWSER_PORTS |
9222,9223 |
槽位池包含的 CDP 端口列表,逗號分隔。 |
DSH_BROWSER_BASE_DIR |
LOCALAPPDATA/mcp-shared-browsers |
共享瀏覽器數據目錄和鎖文件的根路徑。 |
DSH_PLAYWRIGHT_MCP_ENTRY |
(空) | @playwright/mcp 的 cli.js 絕對路徑。設置後可直接調用 node,避免 npx 網絡開銷。 |
DSH_PLAYWRIGHT_MCP_CMD |
npx |
調用 Playwright MCP 的命令(僅在 entry 未設置時使用)。 |
CHROME_PATH |
(系統探測) | Chrome/Chromium 可執行文件的絕對路徑。 |
使用示例¶
在 profile 的配置中添加 @deepseek-ai/dsh-mcp-client 實例:
- 在配置文件中添加該實例。
- 設置
command指向bin/browser-slotpool.mjs,設置args爲空數組。 - 確保
DSH_BROWSER_LAUNCHER環境變量已正確指向上述啓動器路徑。
完成配置後,瀏覽器工具會以 mcp__browser__<rawName> 的形式出現在模型可用工具列表中。
本地驗證¶
運行倉庫自帶的冒煙測試腳本來驗證全鏈路:
node test/mcp-client-smoke.mjs
該腳本會啓動本地服務器、創建槽位、連接 Playwright MCP 並執行截圖操作,確認渲染真實頁面。
適用場景與注意¶
- 適用場景:需要在一個 DSH profile 中同時運行多個瀏覽器實例,且希望嚴格隔離資源和端口的場景。
- 運行前提:
- 需要本地安裝 Chrome/Chromium 瀏覽器。
- 需要依賴 DSH 自帶的
@deepseek-ai/dsh-mcp-client。 - 需要依賴
@playwright/mcp(若未設置DSH_PLAYWRIGHT_MCP_ENTRY,首次調用需聯網拉取)。
- 注意事項:
- 這是一個純
.mjs文件,無 TypeScript 源碼,修改需直接編輯源文件。 - 若修改倉庫命名空間,需同步更新
dsh plugin add中的 GitHub 地址。 - 外網訪問能力取決於部署環境(若使用
npx調用 Playwright MCP)。
- 這是一個純
結尾¶
dsh-browser-slotpool 通過顯式的槽位管理和 PID 活性檢查,爲 DSH 提供了一個健壯的併發瀏覽器解決方案。它解決了多實例環境下的資源競爭問題,適合需要穩定多會話協作的開發者使用。
更多詳情及源碼,請訪問:GitHub 倉庫