dsh-cc-computer-use-mcp:按會話掛載 cc-computer-use 桌面控制 MCP

前言

在 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 等在 profile web 增加一條 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 菜單:

  1. 本插件對 policy 服務調用 declarePerAgent({ name }),菜單中會列出 cc-computer-use,並顯示與其他 server 一致的工具數量提示。
  2. 未勾選 = 不掛載:無 MCP 子進程、無 Xephyr、無 AT-SPI 總線(默認關閉,與全局 MCP 行爲一致)。
  3. 勾選 / 取消會觸發 mcp-workspace/changed;本插件在同工作區的 live session 上掛載或 fiber.dispose(),子進程退出後 cc-computer-use 的 atexit 回收屏幕。
  4. 若未安裝 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 操作:

  1. 準備 cc-computer-use 可執行文件
    凍結產物須位於配置中的 config.command 路徑,一般爲 cc-computer-use 倉庫下的 dist/computer-use-mcp。修改上游源碼後需重新執行其 build.sh。

  2. 解析 @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 升級導致安裝目錄變化時需重建鏈接。

  1. 在 profile web 引用本 bundle
    與其他本地 bundle 一樣,在 profile web 中鏈接 @local/dsh-cc-computer-use-mcp(具體寫法以你環境中的 DSH profile 配置爲準)。

  2. 工作區勾選
    升級本插件並安裝 workspace policy 後,在每個需要桌面控制的工作區 MCP 菜單中勾選 cc-computer-use。

本插件以當前 dsh 進程的用戶與權限運行桌面控制;安裝前請閱讀 cc-computer-use 與本倉庫源碼及 MIT 許可證,確認符合你的安全與合規要求。

典型用法與驗證

驗證兩個會話各自一塊屏

  1. 在兩個會話中各調用一次 mcp__cc-computer-use__get_ui_tree(沙箱在首次使用時懶啓動)。
  2. 檢查進程與顯示號:
   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 目錄頁。

羽毛球分组比赛记分
小程序二维码

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

小夜