dsh-windows-mcp
通过官方 MCP 客户端桥接层把 CursorTouch/Windows-MCP 桌面自动化服务器接入 DSH,把截屏、UI 树快照、鼠标键盘输入、剪贴板、进程与注册表等工具注册成 mcp__windows__* 供模型调用,并附带 windows_mcp_doctor 诊断工具;Computer Use 默认关闭,需在插件面板里打开。
安装
dsh plugin --profile web add dsh-windows-mcp
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | — |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
dsh-windows-mcp
English · 中文


给 DeepSeek Harness 接上 Windows 桌面自动化 —— 让 DSH 的 agent 能"看见"你的屏幕并操作你的电脑。
本插件把 CursorTouch/Windows-MCP 接到 DSH 上,做法是挂载 DSH 本体自带的那座 MCP 客户端桥:不重新实现协议客户端,也不重复打包 MCP SDK。插件本身是一个 carrier bundle(只有补丁、没有自己的服务),agent 能用的一切能力都来自官方那座桥。
DSH agent
└─ 工具调用 mcp__windows__Screenshot
└─ @deepseek-ai/dsh-mcp-client (DSH 内置,由本插件的补丁行挂载)
└─ uvx windows-mcp@0.8.8 serve (stdio 子进程)
└─ 你的桌面:UIA 树 / Win32 输入 / 屏幕采集
agent 能拿到什么
装好插件且 Windows-MCP 可启动后,工具列表里会出现:
工具 · 作用
mcp__windows__Screenshot · 截屏;图片会作为真正的图片附件进入对话
mcp__windows__Snapshot · 抓取无障碍树(纯文本,不花图片 token)
mcp__windows__DisplayInventory · 枚举显示器及其几何信息
mcp__windows__Click / Move / Scroll · 鼠标输入
mcp__windows__Type / Shortcut · 键盘输入
mcp__windows__Wait / WaitFor · 等待固定时长,或等到某个界面条件成立
mcp__windows__Scrape · 从窗口里抽取文本
mcp__windows__MultiSelect / MultiEdit · 批量选中元素 / 批量编辑
mcp__windows__Clipboard · 读写剪贴板
mcp__windows__Process · 枚举、启动、结束进程
mcp__windows__Notification · 读取通知
mcp__windows__Registry · 读写注册表
mcp__windows__ControlStatus · 控制环状态。无法关闭——上游强制保留
mcp__windows__App · 启动/切换应用。默认排除(上游只在英文版 Windows 上稳定支持)
mcp__windows__PowerShell / FileSystem · 默认排除——DSH 已有 shell 与文件工具
另外本插件自带一个工具 windows_mcp_doctor:当 mcp__windows__* 工具缺失时,用它查原因。
输入框工具行里还会多出一颗 Computer Use 胶囊(就在"访问模式"旁边):显示当前真正注册了几个桌面工具,并在重启后记住你的选择(状态文件:~/.dsh/dsh-windows-mcp.state.json)。它默认是关闭的——全新安装不会把桌面交给 agent,直到你亲手点亮这颗胶囊。
关掉它是一道硬约束,不是提示:桥本身照常运行,但从下一步开始,每个 mcp__windows__* 工具都会从模型的工具表里消失;模型即便仍然报得出名字,调用也会在分发时被拒绝——对所有会话和子智能体同时生效,无需重启。重新打开后立即恢复;windows_mcp_doctor 始终报告当前开关状态。
已实测:Windows 11 + DSH 桌面版 0.2.0-rc.2 下,桥那侧的服务公布 18 个工具
(上游 21 个减去这里排除的 3 个),启动后约 1.5 秒就绪;每个工具都以
mcp__windows__<工具名> 出现在模型的工具表里。
前置条件
- Windows 10/11。
- DeepSeek Harness 桌面版,且内置
@deepseek-ai/dsh-mcp-client桥(0.2.0-rc.2 及以上)。 - 运行 DSH 的那个进程能在他自己的
PATH上找到 uv(插件用它在面板里装 Windows-MCP;DSH 本身启动不需要它)。即使没在PATH上,插件也会额外搜索%USERPROFILE%\.local\bin。 - 想让 agent 真正看到截图,需要支持图片输入的模型。
启动永远不会被依赖卡住
桥那一行出厂就是 disabled,这是刻意的。uvx 式的首次启动会去包索引解析并下载
Windows-MCP 的 Python 依赖,慢网或被墙时这个解析能在 DSH 启动过程里挂几分钟——窗口一直停在
“Loading plugins…”。插件不应该有能力对宿主做这种事,所以:
- 装完 bundle 第一次启动: DSH 照常秒开,暂时没有 Windows 工具,依赖状态显示为未安装(插件页和 设置 → 桌面控制 都这么说)。
- 在 设置 → 桌面控制 里安装依赖(见下一节):它会先探测 PyPI 镜像,把依赖装进插件自己的 toolchain 目录,
然后把桥那一行重写成 disabled: false + command: 指向装好的可执行文件。
- 重启一次 DSH。 之后桥直接拉起那个 exe —— 本机实测(Windows 11)约 1.5 秒就绪,不走网络。
uv 只由安装器用到。网络受限时,给 uv 配一次镜像(%APPDATA%\uv\uv.toml),手动/CLI
路径也能同样提速:
default-index = "https://mirrors.aliyun.com/pypi/simple"
安装
1. 打开 DSH 桌面版 → 设置 → 插件。
2. 添加本 bundle,目标可以是包名、仓库地址(github:helloHub1212/dsh-windows-mcp)或本仓库的本地目录。
3. 重启 DSH,让新的补丁层在启动时合成。
非 Electron 的 profile 也可以用 CLI 完成同样的事:
dsh plugin --profile <profile> add github:helloHub1212/dsh-windows-mcp
Electron 独占desktopprofile,CLI 对它任何命令都会被拒绝(连只读 dump 也不行)。desktop请走图形界面。
在应用里直接装依赖
Windows-MCP 本身是个 Python 程序,所以 设置 → 桌面控制 里的 依赖 卡片会显示它的状态并直接帮你装:
- 依赖 ——
已安装 0.8.8/ 未安装 / 未找到 uv; - 下载并安装 —— 跑一次
uv tool install windows-mcp@<锁定版本>(走实测最快的镜像),安装输出实时显示在页面上,过程中可以取消; - 装完之后,插件会自己把桥那一行写进你 profile 的
cordis.patch.yml(先做带时间戳的备份,并用成对标记包住,可重复执行),写的是disabled: false+command:指向装好的可执行文件。重启 DSH 生效;之后桥直接拉起 exe,启动时不再解析任何包索引。
它写进去的就是 [换成固定的解释器](#换成固定的解释器不用-uvx) 里那条行;把标记之间的块删掉就回到出厂那条禁用的 uvx 行。设置 → 插件 里本插件的那一页只留一行状态并指向这里;启用 bundle 之后弹的提示则直接提供同一个安装按钮。
面板上还会显示 写入目标:手动写入会落到哪个 cordis.patch.yml,也就是这个宿主启动的那个 profile(dsh --profile web 启动的 web 宿主同样适用)。如果本插件装在多个 profile 里、而宿主没有报告自己启动的是哪一个,插件不会猜:它什么都不写并直接说明——给运行 DSH 的进程设 DSH_WINDOWS_MCP_PROFILE=<profile 名>(或 profile 的绝对路径)再重试。
更新 Windows-MCP,以及回退
同一个面板也管上游版本,所以升级不用再手动重装依赖:
- 自己检查。 宿主启动时(以及页面要求时)插件会探测各 PyPI 镜像,取响应最快的那个读它的
windows-mcp索引;结果在$DSH_HOME/dsh-windows-mcp.versions.json里缓存 6 小时,重启不会反复打网络。 - 版本各装各的。 每个版本通过
UV_TOOL_DIR装进自己的目录:$DSH_HOME/dsh-windows-mcp/toolchain/<版本>/windows-mcp。激活一个版本只是重写桥那一行(同样先备份),不需要重装,上一版原样留在磁盘上。 - 一键更新。 更新到 vX 会从能用的最快镜像下载该版本(失败自动换下一个镜像),校验可执行文件和
dist-info之后再激活;面板会显示当前运行版本和它来自哪个镜像。 - 回退同样一键。 回退到 vPrev 把桥指回“当前版本替换掉的那个版本”,不下载任何东西。
只动插件自己管理的安装:在你安装第一个托管版本之前,桥仍然用全局 uv tool 装的那份;面板会标明当前生效的是 uv-tool 还是 managed。
Python 依赖的镜像加速
检查阶段会用 96 KiB 的 range 读取量一遍七个候选——PyPI 官方,加上中科大、阿里云、腾讯云、华为云、南京大学、清华 TUNA——按实测吞吐量排序。安装时用最快且能用的镜像,失败就回退到下一个;同时固定 UV_CONCURRENT_DOWNLOADS=4、UV_HTTP_RETRIES=3、UV_HTTP_TIMEOUT=600,因为镜像会限流 uv 默认的 8 并发(HTTP 429)。对当前网络直接封锁的镜像(本机 TUNA 现在返回 403)会被排到后面而不是让安装失败;每个镜像的实测速度都显示在面板上。
设置页与 Star 按钮
除了插件卡片上的这些,还有几个不属于卡片的小开关,集中在 设置 → 桌面控制 —— 设置界面左边栏里新增的一页,和别的插件页并列:
- 依赖 —— 安装、重装、更新、回退,以及「指向桥」按钮;带实时安装日志和写入目标。插件页只留一行指向这里。
- 桥接 ——
toolCallTimeoutMs、截图缩放、截图后端、上游的闪光提示层,以及桥允许排除的三个工具(App、PowerShell、FileSystem)。这些会写进你 profile 的cordis.patch.yml桥行(先做时间戳备份),所以 重启 DSH 后才生效;页面上会写明当前生效的是哪一行。 - 更新 —— 是否在启动时自动检查新版 Windows-MCP,以及镜像策略:
auto用实测排序,指定镜像则固定用它(官方源始终留作最后的兜底)。 - 工具暴露 —— 惰性工具(默认开):模型只看到一个
windows_desktop入口,调用它之后,下一步才会把已揭示的桌面工具放进工具表。关掉则每一步都发送全部 schema。 - 关于 —— 插件版本、仓库链接,以及一个「点个 Star」按钮,点开在新标签页打开 GitHub 仓库。
保存是原子的($DSH_HOME/dsh-windows-mcp.settings.json)。越界的值会被夹到默认值并告知,而不是悄悄写坏;只改插件参数、不涉及桥行时不会重写补丁层。还原 把表单恢复成默认值。
惰性工具
十八个工具 schema 在每一步都要占上下文,包括根本没碰桌面的那些步骤。惰性工具打开时(默认),模型只会被提供一个入口:
windows_desktop ——
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:6,最后更新 2026-11-03