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 目录页。

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

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

小夜