前言¶
在 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 桌面自動化的人減少上下文佔用與誤選工具。