前言¶
在 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 个桌面自动化工具,带策略守卫。
- 仓库:nalikip/dsh-unified-desktop(MIT,Node ≥ 22,仅
win32) - 社区目录:skillhub 插件页(分类 admin-security)
- 上架说明:DSH 设置 → 插件市场 搜索
dsh-unified-desktop,或在 awesome-dsh-plugin 条目页 查看
合并的两个后端在 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 分组为:
- 观察:
snapshotscreenshotread_treeelement_infofindocrlist_windowsread_webpagedisplay_infocontrol_statushealth - 鼠标键盘:
clickdouble_clicktype_textkeypressscrollmove_mousedragset_valueinvokefocus - 窗口:
activate_windowclose_windowmove_windowlaunch_app - 等待:
waitwait_for - 系统:
notifyclipboard
安装与启用¶
前置(命令来自仓库 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 桌面自动化的人减少上下文占用与误选工具。