dsh-unified-desktop: Unifying Two Windows Desktop MCPs into a Single Interface with 29 Tools

前言

在 Windows 上给 DSH 配桌面自动化,常见做法是同时挂上 dsh-computer-use-win(UI Automation、OCR、元素级操作)和 Windows-MCP(浏览器 DOM、区域截图、应用启动)。两个 MCP 各自独立时,模型会看到 44 个工具、两套互相打架的说明:同名能力重复、工具 schema 合计实测约 61,599 tokens(2026-10-22 从两个后端拉 tools/list 统计,见仓库 docs/tool-footprint.json),还有 PowerShell / Registry / FileSystem / Process 等高风险工具默认暴露。

dsh-unified-desktop(维护者 nalikip)不是简单把两个 server 代理在一起,而是按能力归属表做语义级去重与路由,合成 1 个 MCP server、29 个工具、统一命名空间 mcp__desk__*,并在转发前内建危险调用拦截。下面介绍它解决什么问题、怎么装、使用时要注意什么。

这是什么

一句话:在 Windows 10/11 上,把 wincu 与 windows-mcp 合并成单一 DSH 插件,去重后暴露 29 个桌面自动化工具,带策略守卫。

合并的两个后端在 README 中写得很清楚:dsh-computer-use-win 与 Windows-MCP。每一项取舍的推导见仓库 docs/capability-matrix.md。

它具体改了什么

分开装两个插件 dsh-unified-desktop
MCP server 数 2 1
工具数 44 29
重复能力 10 组(如 click / Click) 已去重
危险工具 默认暴露 内建守卫拦截
命名空间 分裂 统一 mcp__desk__*

工具数与排除列表由 lib/catalog.mjs 的 CATALOG / EXCLUDED 定义;node test/catalog-test.mjs 含 43 项断言校验一致性。

和通用多 MCP 网关(如 1MCP、IBM mcp-context-forge)不同:那些方案横向接任意 N 个 server,靠配置 filter 按名字裁剪。本项目纵向只服务上述两个后端——例如知道 Snapshot 该拆成「树模式走 wincu、DOM 模式并入 read_webpage」,而不是仅按工具名过滤。

架构上,DSH 经 stdio 连到 aggregate.mjs,再分别 stdio 连 wincu 的 server.mjs 与 windows-mcp.exe。聚合层负责:合并 tools/list、按目录路由 tools/call、危险参数转发前拦截。

能力分工(摘要)

README 的概括是:交互类偏 wincu,系统与浏览器类偏 windows-mcp。

选 wincu 的典型原因:snapshot / read_tree / find(UIA 树与 RuntimeId)、仅 wincu 有的 ocr / invoke / set_value、click / double_click(优先 UIA Invoke、不抢焦点)、type_text(剪贴板路径支持中文并恢复原剪贴板)、窗口 activate / close / move。

选 windows-mcp 的典型原因:仅它有的 read_webpage(浏览器 DOM)、screenshot(区域与多屏)、launch_app、notify、clipboard、display_info / control_status。

不暴露的工具包括:PowerShell、Registry、FileSystem、Process(风险类,且 README 说明 DSH 原生工具已覆盖部分能力);以及 Click、Type、Move 等重复类(由 wincu 更强实现替代)。完整清单见 lib/catalog.mjs 的 EXCLUDED。

合并后 29 个工具按 README 分组为:

  • 观察:snapshot screenshot read_tree element_info find ocr list_windows read_webpage display_info control_status health
  • 鼠标键盘:click double_click type_text keypress scroll move_mouse drag set_value invoke focus
  • 窗口:activate_window close_window move_window launch_app
  • 等待:wait wait_for
  • 系统:notify clipboard

安装与启用

前置(命令来自仓库 README):

# 1. wincu(UIA + OCR)
dsh plugin --profile web add dsh-computer-use-win

# 2. windows-mcp(DOM + 应用启动)
uv tool install windows-mcp --python 3.14

安装本插件(本地路径安装示例;市场安装见上文「设置 → 插件市场」):

dsh plugin --profile web add <本目录路径>

打后端补丁(重要):

node scripts/patch-backend.mjs

不打补丁时,windows-mcp 会要求连续空闲 10 秒 才允许操作,否则 screenshot / read_webpage / launch_app 等可能返回 USER_CONTROL。补丁会改写 uv tool 安装目录下的 windows_mcp/desktop/control.py 与 control_hooks.py;撤销可用 node scripts/patch-backend.mjs --revert,或 uv tool install --force windows-mcp --python 3.14 重装。升级 windows-mcp 后需重新执行补丁;状态检查:node scripts/patch-backend.mjs --check。细节见 docs/backend-patch.md。

避免工具重复:本插件已聚合 wincu,需在 profile 的 cordis.patch.yml 禁用独立 wincu MCP:

- id: mcp-dsh-computer-use-win
  disabled: true

重启 DSH 后,工具应以 mcp__desk__* 出现。MCP 初始化约需 30–40 秒,loader 显示 still waiting for 1 plugin entries 在就绪前属正常现象。

实现细节:wincu 须用 .generations/live/ 下的真实路径启动,不能用 profiles/web/node_modules 软链接,否则 server 可能静默 exit 0;插件内 resolveWcuServer() 会优先选 .generations 路径。

配置项

项 默认 说明
enabledTools 全部 29 个 暴露哪些工具
guardEnabled true 策略守卫开关
auditLog true 写审计日志
idleThresholdSeconds 0.5 windows-mcp 桌面控制门的空闲阈值(秒)
wcuServerPath 自动探测 wincu server.mjs 路径
wmExePath 自动探测 windows-mcp.exe 路径
toolCallTimeoutMs 180000 工具超时

典型用法与诊断

安装完成后,在对话里通过 mcp__desk__* 调用上述工具即可;具体参数以各工具 schema 为准。若要在本机估算合并后工具面的字符数与 token,可运行:

node test/aggregate-e2e.mjs

遇到 windows-mcp 工具被拒(USER_CONTROL)时:

node scripts/diagnose-gate.mjs

完整排查见 docs/diagnosis-user-control.md。

工具未出现时,可查 %APPDATA%\dsh-desktop\logs\harness.log 搜 [aggregate];正常应类似:

[aggregate] unified-desktop 0.1.0 ready (wcu=true wm=true guard=true)
[wcu] windows-computer-use MCP server 0.5.0 ready
[wm] Starting MCP server 'windows-mcp'

若仍同时出现 mcp__wincu__* 与 mcp__desk__*,说明独立 wincu 未禁用,需补上文的 cordis.patch.yml 条目。

仓库内测试(节选):

npm test
node test/catalog-test.mjs

适用场景与注意

适合谁:已在 Windows 上同时使用 dsh-computer-use-win 与 windows-mcp,希望模型只面对一套去重后的桌面工具面,并默认挡掉 PowerShell / 注册表等高危 MCP 工具的智能体开发者。

务必知晓:

  • 插件与 DSH 同进程权限运行;安装前请阅读源码与 MIT 许可证,自行评估补丁对本机 windows-mcp 安装的影响。
  • 平台限制:Windows 10/11,Node ≥ 22;不是 Windows 环境不要用本插件。
  • 若你要接的是别的 MCP server,通用聚合网关更合适;本插件只为上述两个后端写了能力归属表。
  • DeepSeek Harness 生态是「一切皆插件」;社区目录(如 skillhub、awesome-dsh-plugin)为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-unified-desktop 把 44 个重复、分散且含高危项的 Windows 桌面 MCP 工具面,收成 29 个 mcp__desk__* 工具 + 内建守卫 + 语义路由,适合在 DSH 里长期做 Windows 桌面自动化的人减少上下文占用与误选工具。

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

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

Xiaoye