dsh-windows-mcp

toolstested: passnpmMIT

Bridges the CursorTouch/Windows-MCP desktop automation server into DSH through the official MCP client bridge, registering its screenshot, UI tree snapshot, mouse and keyboard input, clipboard, process and registry tools as mcp__windows__* tools for the model, and adds a windows_mcp_doctor diagnosti

下载量 / Downloads
32,539
依赖体积 / node_modules
0.26 MB
测试时间 / Tested
2026-11-06

Install

dsh plugin --profile web add dsh-windows-mcp

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount—
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

dsh-windows-mcp

English · 中文

![npm version](https://www.npmjs.com/package/dsh-windows-mcp)

![CI](https://github.com/helloHub1212/dsh-windows-mcp/actions/workflows/ci.yml)

给 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 独占 desktop profile,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)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::6,最后更新 2026-11-03

Links

GitHub · Homepage · npm

Same category