前言¶
在 DeepSeek Harness(DSH)裏給智能體接桌面自動化,常見做法是掛一個 MCP server,讓模型通過工具讀 UI 樹、點按、輸入。若底層是 cc-computer-use,其設計假定「一個 MCP 子進程 = 一塊 Xephyr 沙箱屏 + 一條私有 AT-SPI 總線」。DSH 自帶的 @deepseek-ai/dsh-mcp-client 若掛在 profile 全局作用域,整個 dsh 進程只會起一份 server,多會話會共用同一塊屏、同一套窗口與 ref,出現互相「搶沙箱」的症狀。
dsh-cc-computer-use-mcp(npm 包名 @local/dsh-cc-computer-use-mcp)是一條純配置的 DSH bundle:不寫入口業務代碼,只在每個 root agent 會話 上單獨掛載 stdio 形態的 cc-computer-use MCP,並與工作區 MCP 開關對齊。下文介紹它是什麼、加了哪些工具、爲何要「一會話一進程」,以及在新環境中的安裝與自檢步驟。
這是什麼¶
- 維護者:liufeicc
- 分類:工作流(SkillHub 目錄歸類)
- 定位:把本機 cc-computer-use MCP server 接入 DSH;每個 root 會話獨立進程,各自擁有 Xephyr 隔離屏與私有 AT-SPI 總線。
- 實現形態:通過
cordis.patch.yml等在 profileweb增加一條 Host 插件配置,監聽agent/created,在對應 agent 的agent.ctx上掛載@deepseek-ai/dsh-mcp-client。 - 版本(package.json):
2.0.0 - 許可證:MIT
目錄頁:SkillHub — liufeicc/dsh-cc-computer-use-mcp
源碼:GitHub — liufeicc/dsh-cc-computer-use-mcp
核心功能¶
Host 配置與工具表¶
在 profile web 中增加一行 Host 插件(README 示例):
id: cc-cu-per-agent
name: '@local/dsh-cc-computer-use-mcp'
掛載成功後,模型工具表會增加 17 個工具,命名形如 mcp__cc-computer-use__<rawName>,主要包括:
| 工具名(後綴) | 用途 |
|---|---|
get_ui_tree |
讀無障礙樹(結構化文本,主感知通道) |
get_screen_text |
帶座標的 OCR 文本(灰區應用感知) |
find_element / element_info |
按文本 / 角色 / 應用查找元素 |
click / double_click / type_text / press_key / scroll / drag |
以元素爲主的三層動作 |
get_last_click_image |
回看上次座標點擊實際落點 |
act_sequence |
一次調用提交一批動作 |
get_screen_layout / screenshot |
佈局 / 截圖 |
list_windows / wait_window / launch_app |
枚舉窗口 / 等待窗口 / 在目標顯示器啓動應用 |
工具在 各 agent 自己的作用域層 註冊(scope-local),全局 lens 看不到它們;多個 root 會話可共用同一 serverName 而不會觸發 DSH 的重複工具名衝突(須在對應 agent.ctx 上註冊)。
與工作區 MCP 開關聯動(2026-10-23 起)¶
自 2026-10-23 起,掛載行爲跟隨 @local/dsh-mcp-workspace-policy 的工作區 MCP 菜單:
- 本插件對 policy 服務調用
declarePerAgent({ name }),菜單中會列出cc-computer-use,並顯示與其他 server 一致的工具數量提示。 - 未勾選 = 不掛載:無 MCP 子進程、無 Xephyr、無 AT-SPI 總線(默認關閉,與全局 MCP 行爲一致)。
- 勾選 / 取消會觸發
mcp-workspace/changed;本插件在同工作區的 live session 上掛載或fiber.dispose(),子進程退出後 cc-computer-use 的atexit回收屏幕。 - 若未安裝 policy,或舊版無聲明 API,則 fail open,仍按升級前方式掛載,避免誤刪用戶已有工具。
升級後需在需要桌面控制的每個工作區裏,於 MCP 菜單中勾選 cc-computer-use;未選中的工作區默認不再有上述工具。
熱重載時,舊 fiber 會掛在 agent[Symbol.for('dsh-cc-computer-use-mcp/mounted-fiber')],新實例接管後再按最新勾選狀態保留或 dispose,避免重複掛載觸發 mcp-client 的 serverName 保留錯誤。
爲何一會話一進程、且只掛 root agent¶
共享單進程時的問題:cc-computer-use 沙箱 = 一個 MCP 進程 + 一塊 Xephyr + 一條私有 AT-SPI 總線。若全局只起一個 server,多會話會共享同一 Xephyr 焦點、同一 i3 窗口樹、同一 RefTable 與 ScreenLock、同一 AT-SPI 總線,並行使用時會互相干擾。
爲何不能在一個進程裏多塊屏:atspi_init() 在進程內全局且一次性;一進程只能綁一條 AT-SPI 總線,在兩總線間 exit 再 init 已知會破壞內部狀態(cc-computer-use backend/linux/atspi.py 中的 _BUS_STALE_ERROR)。兩塊屏需要兩個進程,這也是上游 cc-computer-use 的設計前提。
子 agent 不單獨掛載:子 agent 與父任務共用同一屏幕(由 cc-computer-use 的 screen lock 串行化);工具視圖沿 scope 祖先鏈繼承,子 agent 已能看到父級掛載的工具。滿足以下任一條件則跳過掛載:agent.parentAgent、session.header.origin === 'subagent'、session.header.delegationDepth > 0。
生命週期:agent.ctx 上的貢獻在 agent 銷燬時 unwind;關閉會話會斷開 MCP 子進程並回收 Xephyr,避免孤兒屏。
安裝與啓用¶
資料中的安裝說明面向「本地 bundle + 已有 DSH 安裝」,未給出 dsh plugin add github:... 一類一鍵命令。按 README 的 Installation / new-environment notes 操作:
-
準備 cc-computer-use 可執行文件
凍結產物須位於配置中的config.command路徑,一般爲 cc-computer-use 倉庫下的dist/computer-use-mcp。修改上游源碼後需重新執行其build.sh。 -
解析
@deepseek-ai/dsh-mcp-client
本包package.json未聲明該依賴(profile 側通常無@deepseek-ai/*),需在本包目錄下建立符號鏈接:
mkdir -p node_modules/@deepseek-ai
ln -sfn <dsh install dir>/node_modules/@deepseek-ai/dsh-mcp-client \
node_modules/@deepseek-ai/dsh-mcp-client
node_modules/ 被 git 忽略;換新機器或 DSH 升級導致安裝目錄變化時需重建鏈接。
-
在 profile
web引用本 bundle
與其他本地 bundle 一樣,在 profileweb中鏈接@local/dsh-cc-computer-use-mcp(具體寫法以你環境中的 DSH profile 配置爲準)。 -
工作區勾選
升級本插件並安裝 workspace policy 後,在每個需要桌面控制的工作區 MCP 菜單中勾選cc-computer-use。
本插件以當前 dsh 進程的用戶與權限運行桌面控制;安裝前請閱讀 cc-computer-use 與本倉庫源碼及 MIT 許可證,確認符合你的安全與合規要求。
典型用法與驗證¶
驗證兩個會話各自一塊屏¶
- 在兩個會話中各調用一次
mcp__cc-computer-use__get_ui_tree(沙箱在首次使用時懶啓動)。 - 檢查進程與顯示號:
ps -ef | grep -E "computer-use-mcp|Xephyr" | grep -v grep
ls -d /tmp/cc-cu-at-spi-d* 2>/dev/null
預期:兩個 computer-use-mcp 進程、兩個不同 display 的 Xephyr、兩個不同的 /tmp/cc-cu-at-spi-d<num>-* 目錄。
3. 在會話 A 用 launch_app 啓動應用,在會話 B 執行 list_windows — B 不應看到 A 的窗口。
離線邏輯測試¶
無需起 MCP 或 Host,可運行門控邏輯單元測試:
node test/gating.mjs
覆蓋:僅在勾選時掛載、取消時 dispose、跳過子 agent、無 policy 時 fail open、熱重載時接管舊 fiber 等。
適用場景與注意¶
適合誰:在 DSH web profile 下做 Linux 桌面 UI 自動化、需要與 Claude Code 側 cc-computer-use 模型一致(一會話一沙箱)的智能體與工作流開發者。
注意:
- 依賴本機 cc-computer-use 構建產物與 Xephyr / AT-SPI 環境;非 Linux 或未構建上游時無法使用。
- 默認與工作區 MCP 開關綁定後爲 默認關閉,舊環境升級後需主動勾選。
- 多 root 會話並行是設計目標;同一 root 下的子 agent 共享父級沙箱,不應再啓第二進程。
- SkillHub 爲社區插件目錄,與 DeepSeek / 幻方無官方從屬關係;星標與熱度以各站點實時數據爲準(SkillHub 線索爲 0 star)。
結尾¶
dsh-cc-computer-use-mcp 把 cc-computer-use 的 stdio MCP 按 root 會話注入 DSH,用配置解決「全局單 MCP 多會話搶沙箱」的問題,並與工作區 MCP 菜單對齊。進一步細節見 GitHub README(含 中文 README)與 SkillHub 目錄頁。