关于 🪟 Windows-MCP
Windows-MCP 是连接 AI Agent 与 Windows 10、11 的开源 MCP 服务。它提供应用、窗口、键盘、鼠标和界面状态控制,并支持获取浏览器页面内容的 DOM 模式。
主要功能
- 01打开应用并控制窗口
- 02提供键盘与鼠标工具
- 03捕获窗口和界面状态
- 04支持浏览器 DOM 模式
- 05提供 stdio 与网络传输
适用场景
- 01自动执行 Windows 应用任务
- 02测试桌面界面
- 03操作浏览器页面内容
MCP 相关
Windows-MCP 向连接的 MCP 客户端提供 Windows 界面自动化工具,支持 stdio、SSE 和 streamable HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Windows-MCP 是一个轻量级开源项目,可实现 AI Agent 与 Windows 操作系统的无缝集成。它作为 MCP 服务,连接大模型与 Windows 操作系统,使 Agent 能够执行文件导航、应用控制、界面交互、QA 测试等任务。
mcp-name: io.github.CursorTouch/Windows-MCP
更新
- Windows-MCP 在 Claude Desktop Extensiosn 中的用户数已达
2M+ Users。 - 试试使用 Windows-MCP 构建的 Agent 🪟Windows-Use。
- Windows-MCP 现已在 PyPI 上发布(因此支持
uvx windows-mcp)。 - Windows-MCP 已加入 MCP Registry。
支持的操作系统
- Windows 10
- Windows 11
当前软件包需要 Python 3.14+,该版本支持 Windows 10 及更新版本。当前安装方式不支持更早的 Windows 版本。
🎥 演示
https://github.com/user-attachments/assets/d0e7ed1d-6189-4de6-838a-5ef8e1cad54e
https://github.com/user-attachments/assets/d2b372dc-8d00-4d71-9677-4c64f5987485
✨ 主要功能
-
与 Windows 无缝集成
原生操作 Windows UI 元素、打开应用、控制窗口、模拟用户输入等。 -
使用任意大模型(可选视觉能力) 与许多自动化工具不同,Windows-MCP 不依赖传统计算机视觉技术或特定的微调模型;它适用于任意大模型,降低了复杂性并缩短了设置时间。
-
丰富的 UI 自动化工具集
包含用于基本键盘和鼠标操作以及捕获窗口/UI 状态的工具。 -
轻量且开源
依赖项少,易于设置,完整源代码根据 MIT 许可证提供。 -
可定制且可扩展
轻松调整或扩展工具,以满足独特的自动化或 AI 集成需求。 -
实时交互
操作之间的典型延迟(例如,从一次鼠标点击到下一次点击)为 0.2 至 0.5 秒,具体时间可能因活动应用数量、系统负载以及大模型的推理速度而略有不同。 -
用于浏览器自动化的 DOM 模式
State-Tool 提供特殊的use_dom=True模式,仅聚焦于网页内容,过滤掉浏览器 UI 元素,让网页自动化更简洁高效。支持 Chrome、Edge 和 Firefox(Firefox 使用 IAccessible2 回退方案,因为它不会通过 UIA 暴露RootWebArea)。
🛠️安装
注意: 首次安装此 MCP 服务时,由于需要安装 pyproject.toml 中的依赖项,可能需要一两分钟。首次运行时,服务可能会超时;忽略此情况并重新启动服务即可。
前置条件
- Python 3.14+
- UV(包管理器),由 Astra 提供,可通过
pip install uv或curl -LsSf https://astral.sh/uv/install.sh | sh安装 App工具会解析本地化的“开始”菜单显示名称以及应用内部名称;无需将 Windows 显示语言设置为英语。
登录时运行
需要时直接运行服务:
uvx windows-mcp serve
uvx windows-mcp serve --transport sse --host localhost --port 8000
uvx windows-mcp serve --transport streamable-http --host localhost --port 8000
将其安装为后台任务,使其立即启动并在每次登录时启动:
windows-mcp install
# Or choose the HTTP transport and bind address explicitly
windows-mcp install --transport sse --host 127.0.0.1 --port 8000
这会创建一个名为 windows-mcp-server 的用户级计划任务,以及位于
~/.windows-mcp/start-server.cmd 的包装脚本。使用 windows-mcp uninstall 将其移除。日志写入
~/.windows-mcp/server.log 和 ~/.windows-mcp/server.error.log。
在 Claude Desktop 中安装
- 安装 Claude Desktop。
npm install -g @anthropic-ai/mcpb
- 配置 MCP 服务。
选项 A:从 PyPI 安装(推荐)
使用 uvx 直接从 PyPI 运行最新版本。
将以下内容添加到 claude_desktop_config.json:
{
"mcpServers": {
"windows-mcp": {
"command": "uvx",
"args": [
"windows-mcp",
"serve"
]
}
}
}
选项 B:从源代码安装
- 克隆仓库:
git clone https://github.com/CursorTouch/Windows-MCP.git
cd Windows-MCP
- 将以下内容添加到
claude_desktop_config.json:
{
"mcpServers": {
"windows-mcp": {
"command": "uv",
"args": [
"--directory",
"<path to the windows-mcp directory>",
"run",
"windows-mcp",
"serve"
]
}
}
}
- 完全重启 Claude Desktop,并确认 MCP 工具列表中出现该服务。
Claude Desktop MSIX(Microsoft Store)
采用 MSIX 打包的 Claude Desktop(Microsoft Store 版本)会虚拟化 %APPDATA%。这会导致两个主要问题:
- 配置文件位于:
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json(而非%APPDATA%\Claude\)。 - 从“Claude Directory”自动安装会失败,因为
${__dirname}变量会解析到错误的(未虚拟化)路径。
在 Windows Store 版本的 Claude 中配置 Windows-MCP:
你必须手动编辑配置文件。请注意,MSIX 沙盒中的 Electron 应用不会继承系统 PATH,因此必须使用 uvx.exe(或 uv.exe)的完整绝对路径。
选项 A:使用预安装的可执行文件
- 在终端中运行
uv tool install windows-mcp。 - 在配置中使用生成的可执行文件:
{
"mcpServers": {
"windows-mcp": {
"command": "C:\\Users\\<user>\\.local\\bin\\windows-mcp.exe",
"args": ["serve"]
}
}
}
选项 B:使用 uvx
{
"mcpServers": {
"windows-mcp": {
"command": "C:\\Users\\<user>\\.local\\bin\\uvx.exe",
"args": ["windows-mcp", "serve"]
}
}
}
选项 C:从源代码安装
{
"mcpServers": {
"windows-mcp": {
"command": "C:\\Users\\<user>\\.local\\bin\\uv.exe",
"args": [
"--directory",
"C:\\path\\to\\Windows-MCP",
"run",
"windows-mcp",
"serve"
]
}
}
}
如需排查 Claude Desktop 集成问题,请参阅 MCP 文档。
在 Perplexity Desktop 中安装
- 安装 Perplexity Desktop。
- 打开 Perplexity Desktop,然后前往
Settings -> Connectors -> Add Connector -> Advanced。 - 将名称设为
Windows-MCP,然后粘贴以下配置之一。
选项 A:从 PyPI 安装(推荐)
{
"command": "uvx",
"args": [
"windows-mcp",
"serve"
]
}
选项 B:从源代码安装
{
"command": "uv",
"args": [
"--directory",
"<path to the windows-mcp directory>",
"run",
"windows-mcp",
"serve"
]
}
- 点击
Save,然后视需要重启 Perplexity Desktop。
如需排查 Claude Desktop 集成问题,请参阅 Perplexity MCP 支持。文档中包含检查日志和解决常见问题的实用提示。
在 Gemini CLI 中安装
- 安装 Gemini CLI。
npm install -g @google/gemini-cli
- 打开
%USERPROFILE%/.gemini/settings.json。 - 添加
windows-mcp配置并保存。
{
"theme": "Default",
...
"mcpServers": {
"windows-mcp": {
"command": "uvx",
"args": [
"windows-mcp",
"serve"
]
}
}
}
注意:若要从源代码运行,请将命令替换为 uv,并将 args 替换为 ["--directory", "<path>", "run", "windows-mcp", "serve"]。
- 重启 Gemini CLI。
在 Qwen Code 中安装
1. 安装 Qwen Code。npm install -g @qwen-code/qwen-code@latest
- 打开
%USERPROFILE%/.qwen/settings.json。 - 添加
windows-mcp配置并保存。
{
"mcpServers": {
"windows-mcp": {
"command": "uvx",
"args": [
"windows-mcp",
"serve"
]
}
}
}
注意:若要从源代码运行,请将命令替换为 uv,并将 args 替换为 ["--directory", "<path>", "run", "windows-mcp", "serve"]。
- 重启 Qwen Code。
在 Codex CLI 中安装
1. 安装 Codex CLI。npm install -g @openai/codex
- 打开
%USERPROFILE%/.codex/config.toml。 - 添加
windows-mcp配置并保存。
[mcp_servers.windows-mcp]
command="uvx"
args=[
"windows-mcp",
"serve"
]
注意:若要从源代码运行,请将命令替换为 uv,并将 args 替换为 ["--directory", "<path>", "run", "windows-mcp", "serve"]。
- 重启 Codex CLI。
在 Autohand Code 中安装
在 Windows 终端中添加已发布的 stdio 服务:
autohand mcp add windows-mcp uvx windows-mcp serve
在 add 后添加 --scope project,即可将服务配置保存在当前项目中。请参阅 Autohand Code,了解最新的安装和 CLI 详情。
在 Claude Code 中安装
- 安装 Claude Code:
npm install -g @anthropic-ai/claude-code
- 配置服务:
选项 A:从 PyPI 安装(推荐)
使用 uvx 直接从 PyPI 运行最新版本。
claude mcp add --transport stdio windows-mcp -- uvx windows-mcp serve
选项 B:从源代码安装
- 克隆代码库:
git clone https://github.com/CursorTouch/Windows-MCP.git
cd Windows-MCP
- 在终端中运行以下命令:
claude mcp add --transport stdio windows-mcp -- uv --directory "<path>" run windows-mcp serve
注意:若要让所有项目都能使用此服务,请在命令中添加 --scope user。
- 在终端中重新运行 Claude Code。尽情使用吧 🥳
**注意:**在 Windows 上,如果遇到“Connection closed”错误,请使用 uvx.exe 的完整路径:
claude mcp add --transport stdio windows-mcp -- C:\Users\<user>\.local\bin\uvx.exe windows-mcp serve
若要确认服务已注册,请运行 claude mcp list。在 Claude Code 中,使用 /mcp 检查服务状态。
WSL(Windows Subsystem for Linux)
如果你从 WSL 运行 Claude Code,MCP 服务仍必须在 Windows 端运行(它需要 Windows API 才能实现 UI 自动化)。使用 powershell.exe 作为命令,以连接 WSL 和 Windows:
- 在 Windows 上安装
uv(在 PowerShell 终端中运行):
irm https://astral.sh/uv/install.ps1 | iex
- 在 WSL 终端中注册服务:
claude mcp add windows-mcp --transport stdio -s user -- powershell.exe -Command "C:\Users\<user>\.local\bin\uvx.exe windows-mcp serve"
将 <user> 替换为你的 Windows 用户名。-s user 标志可让所有项目都能使用此服务。
- 重启 Claude Code,并使用
/mcp验证。
🖥️ 运行 Windows-MCP
Windows-MCP 可直接在 Windows 计算机上运行,并向已连接的 MCP 客户端提供其工具。
# Runs with stdio transport (default)
uvx windows-mcp serve
# Or with SSE/Streamable HTTP for network access
uvx windows-mcp serve --transport sse --host localhost --port 8000
uvx windows-mcp serve --transport streamable-http --host localhost --port 8000
可设置可选环境变量来自定义行为,详见下文的环境变量。
远程访问的安全性
如需通过网络访问,请启用身份验证和 TLS:
windows-mcp serve --transport sse --host 0.0.0.0 \
--auth-key "your_secret_token" \
--ip-allowlist "203.0.113.0/24" \
--ssl-certfile cert.pem --ssl-keyfile key.pem
所有选项请参阅🔐 安全与访问控制。
传输选项
| 传输方式 | 命令 | 用途 |
|---|---|---|
stdio(默认) | serve --transport stdio | 从 Claude Desktop、Cursor 等 MCP 客户端直接连接。 |
sse | serve --transport sse --host HOST --port PORT | 通过服务器发送事件实现网络访问 |
streamable-http | serve --transport streamable-http --host HOST --port PORT | 通过 HTTP 流式传输实现网络访问(推荐用于生产环境) |
🔐 安全与访问控制
身份验证
windows-mcp serve --transport sse --host 0.0.0.0 --auth-key "your_token"
所有请求都必须包含 Authorization: Bearer your_token 标头。
IP 允许列表
windows-mcp serve --auth-key "token" --ip-allowlist "203.0.113.0/24,198.51.100.5"
将连接限制为指定的 CIDR 范围。默认阻止私有 IP 和环回 IP。
CORS 来源
默认情况下,不会发送任何 CORS 标头。浏览器会根据自身的同源策略阻止跨源请求,这意味着即使 MCP 服务运行在 localhost 上,任意网站也无法访问 MCP 控制平面。系统还会根据绑定地址自动应用主机标头验证(DNS 重绑定保护)。
如果需要让基于浏览器的 MCP 客户端访问服务,请通过显式的来源允许列表启用:
windows-mcp serve --cors-origins "https://my-client.example.com,https://other.example.com"
只有列表中的来源会收到 Access-Control-Allow-Origin 标头;浏览器会拒绝所有其他跨源请求。对应的环境变量为 WINDOWS_MCP_CORS_ORIGINS。
工具选择
默认启用所有工具。使用 --tools 将特定工具列入允许列表,或使用 --exclude-tools 禁用特定工具。
windows-mcp serve --tools "Screenshot,Click,Snapshot" # Enable only these tools
windows-mcp serve --exclude-tools "PowerShell,Registry" # Disable specific tools
TLS/HTTPS
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
windows-mcp serve --ssl-certfile cert.pem --ssl-keyfile key.pem
OAuth 2.0 + PKCE
对于使用 OAuth(例如 Claude Desktop)而非静态 API 密钥的 MCP 客户端:
windows-mcp serve --transport streamable-http --host 0.0.0.0 \
--ssl-certfile ~/.windows-mcp/cert.pem \
--ssl-keyfile ~/.windows-mcp/key.pem \
--oauth-client-id my-client \
--oauth-client-secret my-secret
Claude Desktop 配置:
{
"mcpServers": {
"windows-mcp": {
"type": "http",
"url": "https://<host>:8000/mcp/",
"oauth": {
"clientId": "my-client",
"clientSecret": "my-secret"
}
}
}
}
OAuth 服务提供以下端点:
GET /.well-known/oauth-authorization-server— 服务元数据(RFC 8414)GET /oauth/authorize— 授权码 + PKCE(必须使用S256)POST /oauth/token— 令牌交换(必须提供客户端密钥)POST /oauth/register— 已禁用;客户端必须预先配置
动态客户端注册已禁用。重定向 URI 必须仅使用环回 http(s) 地址。
身份验证密钥和 OAuth 可以同时使用,两者都可作为有效的 Bearer 令牌。
配置文件(~/.windows-mcp/config.toml)
无需每次都传入标志,可将配置保存在 ~/.windows-mcp/config.toml 中。CLI 标志始终会覆盖配置文件中的值。
搜索顺序:
--config /path/to/config.toml~/.windows-mcp/config.toml
stdio — 仅限本地,无需安全配置:
[server]
transport = "stdio"
SSE — 启用身份验证和 IP 限制的网络访问:
[server]
transport = "sse"
host = "0.0.0.0"
port = 8000
auth_key = "your-secret-key"
[security]
ip_allowlist = ["192.168.1.0/24"]
Streamable HTTP — 启用身份验证、TLS 并排除指定工具:
[server]
transport = "streamable-http"
host = "0.0.0.0"
port = 8000
auth_key = "your-secret-key"
ssl_certfile = "cert.pem" # resolved relative to ~/.windows-mcp/
ssl_keyfile = "key.pem"
[security]
ip_allowlist = ["192.168.1.0/24"]
cors_origins = ["https://my-client.example.com"] # optional — browser CORS opt-in
oauth_client_id = "my-client" # optional — enables OAuth 2.0 + PKCE
oauth_client_secret = "my-secret"
[tools]
exclude = ["PowerShell", "Registry"] # disable specific tools
将证书和密钥文件放在同一目录中:
~/.windows-mcp/
├── config.toml
├── cert.pem
└── key.pem
直接在该目录中生成自签名证书:
mkdir -p ~/.windows-mcp
openssl req -x509 -newkey rsa:4096 \
-keyout ~/.windows-mcp/key.pem \
-out ~/.windows-mcp/cert.pem \
-days 365 -nodes
桌面控制
默认情况下,桌面控制采用 宽松 策略启用:直接桌面操作需要经过授权,而后台工具可在你使用计算机时运行。
在 ~/.windows-mcp/config.toml 中配置(或使用 enabled = false 完全禁用):
[control]
enabled = true
policy = "relaxed"
idle_timeout_seconds = 10.0
也可以在启动单个 MCP 服务时覆盖此设置:
windows-mcp serve --no-control
windows-mcp serve --control --control-idle-timeout 3
windows-mcp serve --control-policy strict
在 MCP 客户端的启动参数中,将这些选项放在 serve 之后。
优先级为 CLI > 环境变量 > TOML > 默认值。--control 可以显式覆盖 enabled = false。超时必须是有限的正数秒数
(包括小数);零不会禁用控制。默认值仍为 10 秒。
更改这些设置后,请重启 Windows-MCP 服务进程。没有热重载功能,也没有 AI 配置工具。ControlStatus 会报告生效的 enabled
policy 和 idle_timeout_seconds 值;关闭控制时,状态为 disabled。
禁用控制会关闭所有权授权、物理输入保护、接管监控和控制指示器。工具仍然可用且会串行执行,并保留注入按键/按钮的清理功能。此时,AI 桌面操作可能会干扰你自己的输入;PowerShell 脚本也可以操作 UI。单独的屏幕截图闪烁设置不受影响。启用控制时,空闲计时器会在有物理输入时重新计时,因此缩短超时时间并不能让你在持续使用计算机时调用受控操作。
AI 控制期间,小幅鼠标移动仍会被拦截,但不会暂停当前工具。鼠标接管会累计每次相对原始输入移动的距离,包括来回移动,默认达到 500 个设备单位时触发。间隔 0.5 秒没有移动后,会开始新的计量段;切换设备或开始新的控制时段也会清除累计值。在 TOML 中设置 control.mouse_takeover_units 可更改阈值(40–2000),然后重启服务。这些是设备单位,不是屏幕像素。无法提供可识别相对原始输入的设备(包括部分触摸板和远程输入设备)必须使用
Ctrl+Alt+Shift+Backspace 进行接管。旧版 mouse_takeover_pixels 设置仍可接受以保持兼容,但不再影响接管。
桌面门控策略
| 策略 | 需要桌面所有权的操作 |
|---|---|
relaxed(A,默认) | 直接输入:Click、Type、Scroll、Move、Shortcut、MultiSelect、MultiEdit;App switch 和 resize。 |
balanced(B) | A 中的所有操作,外加 PowerShell、Notification、App launch/launch_executable、Process kill 和 Clipboard set。 |
strict(C) | 除 ControlStatus 外的所有工具,与此前的门控行为一致。 |
在 A 和 B 模式下,FileSystem、Registry、Snapshot、Screenshot、Scrape、Wait、WaitFor、DisplayInventory、Process list 和 Clipboard get 不受所有权门控。此分类针对的是对桌面的干扰,而非权限或数据安全。PowerShell 仍可操作 UI,文件和注册表操作也可能产生其他副作用。
未受门控的调用不会获取或延长桌面租约、激活指示器,也不会等待工具锁。现有资源约束仍然适用:UI Automation 操作共用专用工作线程,因此较长的 WaitFor 可能会延迟其他 UIA 工作。单独的截图闪光效果不变。--no-control 保留现有的全工具串行化行为,并覆盖策略中的所有权检查。
在 relaxed 模式下,Agent 应优先选择后台工作,并与用户协调已知的桌面干扰。若明确知道某项操作会中断用户的进程或抢占焦点,应先征得许可,并沿用已有授权。这些是工具使用指南,不是由服务强制执行的审批或进程所有权跟踪机制。剪贴板仍使用真实的 Windows 剪贴板;不会引入虚拟剪贴板。
面向贡献者:工具类别及少数特定模式的例外位于 src/windows_mcp/tools/control_policy.py。添加工具或模式时,请更新该表;注册覆盖测试会检测遗漏。对于未知扩展,默认采用门控。策略决策应集中处理,不要放入各个工具的实现中。
auth 助手
生成身份验证密钥,并将可用配置保存到 ~/.windows-mcp/config.toml:
windows-mcp auth
生成身份验证信息和自签名 TLS 证书:
windows-mcp auth --transport streamable-http --host 0.0.0.0 --port 8000 --with-tls
此命令会将身份验证密钥写入配置文件,可生成 cert.pem 和 key.pem,并输出适用于所选传输方式的 MCP 客户端配置示例。
SSRF 防护
Scrape 工具会拦截:私有 IP、环回地址、链路本地地址、URL 中的凭据、非 HTTP 协议。
⚙️ 环境变量
除非另有说明,所有变量均为可选项。通过 claude_desktop_config.json 中的 env 键设置(或使用 MCP 客户端对应的配置)。
截图与快照
| 变量 | 默认值 | 描述 |
|---|---|---|
WINDOWS_MCP_SCREENSHOT_SCALE | 1.0 | 编码前应用于截图的缩放系数。接受范围为 0.1–1.0 的浮点数。适用于高分辨率显示器(1440p、4K);在这些显示器上,默认设置生成的图像可能超过 Claude Desktop 的 1 MB 工具结果限制。设为 0.5 可将宽高各缩小一半(文件大小缩小至四分之一)。 |
WINDOWS_MCP_SCREENSHOT_BACKEND | auto | 截图捕获后端。可选值:auto(依次尝试 dxcam → mss → pillow)、dxcam、mss、pillow。如果 dxcam 不可用或在你的 GPU 上导致问题,请使用 mss 或 pillow。 |
WINDOWS_MCP_PROFILE_SNAPSHOT | (已禁用) | 设为 1、true、yes 或 on,即可为 Screenshot/Snapshot 调用输出各阶段的计时日志。适用于排查捕获速度缓慢的问题。 |
WINDOWS_MCP_DISABLE_FLASH | (已禁用) | 设为 1、true、yes 或 on,即可关闭截图后短暂高亮捕获区域的橙红色发光边框。闪光效果会在捕获完成后显示于透明的置顶窗口上,因此不会出现在捕获的图像中。 |
从 UI Automation 遍历中排除进程
| 变量 | 默认值 | 说明 |
|---|---|---|
WINDOWS_MCP_EXCLUDE_PROCESSES | (none) | 用逗号分隔的进程基名称;这些进程的窗口不会参与 UI Automation 树遍历,例如 Code.exe,Cursor.exe。匹配不区分大小写且必须完全一致——不支持通配符或正则表达式。未设置或为空时,保持当前行为。 |
某些应用会提供无障碍树,在 UI Automation 遍历期间可能变慢或无响应。Snapshot 和 WaitFor 可能会遍历活动窗口以及选中用于捕获树的其他顶层句柄,因此,某个异常的无障碍提供程序可能导致捕获卡住。
设置:
WINDOWS_MCP_EXCLUDE_PROCESSES=Code.exe,Cursor.exe
进程名称是以逗号分隔的可执行文件基名称。去除首尾空白后进行不区分大小写的匹配;空条目会被忽略,重复项不会造成问题。
窗口会在对其进行任何 UI Automation 调用之前被排除,因此不会进入其无障碍提供程序。被排除的应用仍可能出现在窗口列表中,但 Windows-MCP 不会遍历其无障碍树,也不会将其报告为捕获失败。如果无法确定窗口所属的进程,则会照常遍历该窗口。
这是一种排除机制——是缓解措施,并非解决 #383 中所有情况的完整方案。它只会跳过你指定的进程;未列出的异常窗口仍可能导致捕获卡住。
UI Automation 超时
| 变量 | 默认值 | 说明 |
|---|---|---|
WINDOWS_MCP_UIA_CONNECTION_TIMEOUT_MS | 2000 | UI Automation 等待连接窗口无障碍提供程序的毫秒数,超时后将该窗口标记为失败。必须是正整数;其他值将使用默认值。 |
WINDOWS_MCP_UIA_TRANSACTION_TIMEOUT_MS | 5000 | 单次 UI Automation 提供程序调用允许耗时的毫秒数,超时后调用将失败。必须是正整数;其他值将使用默认值。 |
当窗口不再响应 UI Automation(其 UI 线程正忙、死锁或仍在启动)时,Snapshot、WaitFor 和其他 UI 树工具现在会在超时一次后跳过该窗口。该窗口会被报告为捕获失败,但仍会返回桌面的其余部分。此前,调用会一直等待窗口恢复,之后的每次工具调用也都会排队等待。只有在应用确实需要更长时间才能完成单次无障碍调用时,才应提高这些值。若要完全停止遍历某个应用,请使用 WINDOWS_MCP_EXCLUDE_PROCESSES。
桌面控制设置
如果错过了物理按键/按钮的释放事件,输入监视器会在配置的空闲等待时间后检查是否存在残留按住状态。连续五次采样均确认全部释放,且采样间隔至少为 100 ms 时,会清除过时记录。新的物理输入或报告的按住按键/按钮状态会重置确认过程。此机制尽力而为:即使 Windows 无法提供状态,GetAsyncKeyState 返回零也会被视为已释放;重复采样可以过滤瞬时读数,但无法区分持续的查询失败。
| 变量 | 默认值 | 说明 |
|---|---|---|
WINDOWS_MCP_CONTROL | true | 启用桌面控制协调。设置为 false 可禁用。等同于 --control/--no-control;需要重启。 |
WINDOWS_MCP_CONTROL_POLICY | relaxed | 门控策略:relaxed、balanced 或 strict。等同于 --control-policy;需要重启。 |
WINDOWS_MCP_CONTROL_IDLE_TIMEOUT | 10.0 | 有限且为正值的空闲等待时间,单位为秒。等同于 --control-idle-timeout;需要重启。 |
安全
| 变量 | 默认值 | 描述 |
|---|---|---|
WINDOWS_MCP_AUTH_KEY | (none) | 所有 HTTP 请求都必须提供的 Bearer 令牌。可替代 --auth-key CLI 标志。 |
WINDOWS_MCP_IP_ALLOWLIST | (none) | 允许的客户端 IP 或 CIDR 范围列表,以逗号分隔(例如,203.0.113.0/24,198.51.100.5)。可替代 --ip-allowlist CLI 标志。 |
WINDOWS_MCP_CORS_ORIGINS | (none) | 允许发起跨域浏览器请求的来源列表,以逗号分隔(例如,https://my-client.example.com)。未设置时不会发送 CORS 标头。可替代 --cors-origins CLI 标志。 |
WINDOWS_MCP_TOOLS | (all enabled) | 要启用的工具明确列表,以逗号分隔(例如,Screenshot,Click,Snapshot)。可替代 --tools CLI 标志。 |
WINDOWS_MCP_EXCLUDE_TOOLS | (none) | 要禁用的工具列表,以逗号分隔(例如,PowerShell,Registry)。可替代 --exclude-tools CLI 标志。 |
WINDOWS_MCP_SSL_CERTFILE | (none) | 用于 HTTPS 的 TLS 证书文件路径(.pem)。必须与 WINDOWS_MCP_SSL_KEYFILE 一起提供。 |
WINDOWS_MCP_SSL_KEYFILE | (none) | 用于 HTTPS 的 TLS 私钥文件路径(.pem)。必须与 WINDOWS_MCP_SSL_CERTFILE 一起提供。 |
WINDOWS_MCP_OAUTH_CLIENT_ID | (none) | HTTP 传输使用的 OAuth 客户端 ID。必须与 WINDOWS_MCP_OAUTH_CLIENT_SECRET 一起提供。 |
WINDOWS_MCP_OAUTH_CLIENT_SECRET | (none) | HTTP 传输使用的 OAuth 客户端密钥。必须与 WINDOWS_MCP_OAUTH_CLIENT_ID 一起提供。 |
WINDOWS_MCP_STATELESS_HTTP | false | 设置为 1、true、yes 或 on,即可在运行 streamable-http 时不使用 Mcp-Session-Id 连接状态。适用于重启后的重新连接以及水平扩展部署。 |
遥测
| 变量 | 默认值 | 描述 |
|---|---|---|
ANONYMIZED_TELEMETRY | true | 设置为 false 可禁用匿名使用情况遥测。无论此设置如何,都不会收集个人数据、工具参数或输出。 |
POSTHOG_API_KEY | Project default | 覆盖用于匿名遥测的 PostHog 项目写入密钥。设置为空字符串可跳过 PostHog 客户端初始化。 |
POSTHOG_HOST | https://us.i.posthog.com | 覆盖匿名遥测使用的 PostHog 主机,例如用于自托管 PostHog 部署。 |
调试
| 变量 | 默认值 | 描述 |
|---|---|---|
WINDOWS_MCP_DEBUG | false | 设置为 1、true、yes 或 on 可启用调试模式,将日志级别设为 DEBUG 以输出详细信息。也可使用 --debug CLI 标志。 |
看门狗
| 变量 | 默认值 | 描述 |
|---|---|---|
WINDOWS_MCP_WATCHDOG | false | 设置为 on、1、true、yes 或 enabled(不区分大小写)可运行 UIA 焦点看门狗。默认关闭,因为它目前唯一的作用是记录焦点变化的调试日志,但会占用一个后台线程,并建立长期运行的 UIA 事件订阅;在不稳定的 UIA 环境中长时间运行后(例如,休眠/恢复或会话变更时),这可能导致服务崩溃。无论是否启用,都会按需为每次工具调用构建辅助功能树,因此不会影响工具行为。 |
示例 claude_desktop_config.json:
本地(无安全设置):
{
"mcpServers": {
"windows-mcp": {
"command": "uvx",
"args": ["windows-mcp", "serve"],
"env": { "WINDOWS_MCP_SCREENSHOT_SCALE": "0.5" }
}
}
}
远程(启用身份验证 + IP 允许列表 + TLS):
{
"mcpServers": {
"windows-mcp": {
"command": "uvx",
"args": ["windows-mcp", "serve", "--transport", "sse", "--host", "0.0.0.0"],
"env": {
"WINDOWS_MCP_AUTH_KEY": "your_token",
"WINDOWS_MCP_IP_ALLOWLIST": "203.0.113.0/24",
"WINDOWS_MCP_SSL_CERTFILE": "/path/to/cert.pem",
"WINDOWS_MCP_SSL_KEYFILE": "/path/to/key.pem"
}
}
}
}
🔨MCP 工具
MCP 客户端可使用以下工具与 Windows 交互:
Click:在给定坐标处单击屏幕。Type:在某个元素上输入文本(可选择清除现有文本)。Scroll:在窗口或特定区域中垂直或水平滚动。Move:移动鼠标指针或拖动(设置drag=True)到指定坐标。要进行确定性拖动,请设置from_loc=[x, y]和drag=True,即可在一次工具调用中从明确的起点按下,并在loc处松开。可选的duration参数会增加有界的中间移动。Shortcut:按下键盘快捷键(Ctrl+c、Alt+Tab等)。Wait:暂停指定时长。WaitFor:在一次工具调用中轮询 UI 状态,直到文本、活动窗口、元素或焦点元素出现。ControlStatus:读取桌面控制权所有者以及剩余的用户空闲等待时间。当用户接管阻止新的工具调用时,此工具仍可用。在 AI 控制期间,可见边框和光标光晕表示控制权归属;大幅移动实体鼠标或按下Ctrl+Alt+Shift+Backspace,会将控制权交还给用户,直到用户空闲 10 秒。截取屏幕截图期间,指示器会暂时隐藏,并释放实体输入;在此期间发生的任何实体输入都会抢占 AI 控制权,但在该事件得到处理前,ControlStatus可能会短暂报告ai。分步桌面输入会在下一个检查点停止,但已经运行的外部命令(例如PowerShell或App启动)在用户接管后可能仍会继续;此控制门不会取消进程,也不会撤销已完成的副作用。检测到挂钩故障时,注入的按键和鼠标按钮会异步释放,因此实体输入可能会短暂地与仍处于按下状态的 AI 按键或鼠标按钮重叠。Windows 也可能在不通知此进程的情况下静默移除低级挂钩;定期替换挂钩可以缩短但无法消除这段未检测到的时间。因此,用户接管仅尽力而为,并非安全边界,也不保证控制权专属。 无会话 MCP 2026-07-28 客户端无法接收未经请求的控制状态日志;需要了解当前控制权所有者时,应查询ControlStatus。DisplayInventory:读取显示器布局、工作区域、有效 DPI 和缩放元数据。Screenshot:快速优先截图的桌面捕获工具,提供光标位置、活动/打开的窗口和图像。为提高速度,会跳过 UI 树提取;当你主要需要视觉上下文时,它应作为默认的首次调用。支持使用从零开始编号的活动 Windows 显示器索引设置display=[0]或display=[0,1],也支持设置region=[left, top, right, bottom](虚拟桌面像素坐标),以仅捕获指定矩形区域,而非整个屏幕——如果已知需要关注的区域,这样更节省令牌。如果同时提供region和display,则以region为准;无效或超出边界的区域会引发错误。捕获完成后,会在捕获区域内部绘制短暂的橙红色发光边框作为视觉确认(设置WINDOWS_MCP_DISABLE_FLASH=1可禁用)。Snapshot:捕获完整桌面状态,适用于需要交互元素 ID、可滚动区域或use_dom=True浏览器提取的工作流。支持设置use_vision=True以包含屏幕截图;支持使用从零开始编号的活动 Windows 显示器索引设置display=[0]或display=[0,1];也支持设置region=[left, top, right, bottom](虚拟桌面像素坐标),以仅检查指定矩形区域,而非整个屏幕。如果同时提供region和display,则以region为准;无效或超出边界的区域会引发错误。App:通过“开始”菜单名称或严格使用可执行文件路径(并分开提供 argv 和可选的 cwd)启动应用程序;调整窗口大小、移动窗口以及在窗口之间切换。PowerShell:执行 PowerShell 命令。FileSystem:读取、写入、复制、移动、删除、列出和搜索文件及目录,也可检查文件和目录。Scrape:抓取整个网页以获取信息。MultiSelect:选择多个项目(文件、文件夹、复选框),可选使用 Ctrl 键。提供标签时,会批量将标签解析为坐标。MultiEdit:在指定坐标处的多个输入框中输入文本。提供标签时,会批量将标签解析为坐标。Clipboard:读取或设置 Windows 剪贴板内容。Process:列出正在运行的进程,或通过 PID 或名称终止进程。Notification:发送 Windows Toast 通知,需提供title、message和必需的app_id(已注册的 Windows AppUserModelID)。请参阅下方示例。Registry:读取、写入、删除或列出 Windows 注册表值和项。
Toast 通知
Notification 除了需要 title 和 message,还要求在 app_id 中提供已注册的 Windows AppUserModelID。Windows 会将 Toast 归属到该应用。要查找目标计算机上已注册的 ID,请在 PowerShell 中运行以下命令(或使用 PowerShell 工具):
Get-StartApps | Select-Object Name, AppID
请使用 AppID 值,而不是应用的显示名称。例如,如果列表中包含
Microsoft.Windows.Explorer,则 MCP 工具调用如下:
{
"name": "Notification",
"arguments": {
"title": "Windows-MCP",
"message": "Task complete",
"app_id": "Microsoft.Windows.Explorer"
}
}
🤝 与我们联系
关注最新动态并加入我们的社区:
-
📢 在 X 上关注我们,获取最新消息和动态
-
💬 加入我们的 Discord 社区
Star 历史
👥 贡献者
感谢所有为 Windows-MCP 做出贡献的优秀人士!🎉
无论是代码、文档、错误报告还是功能建议,我们都感谢每一份贡献。想要参与贡献?请查看我们的贡献指南!
🔒 安全
重要提示:Windows-MCP 拥有完整的系统访问权限,并且可以执行不可逆操作。部署前请仔细阅读我们的全面安全指南。
如需了解详细的安全信息,包括:
- 工具特定风险评估
- 部署建议
- 漏洞报告流程
- 合规与审计指南
请阅读我们的安全策略。
📊 遥测
Windows-MCP 会收集使用数据,以帮助改进 MCP 服务。不会跟踪个人信息、工具参数或输出。
若要停用遥测,请在 MCP 客户端配置中将 ANONYMIZED_TELEMETRY 设为 false:
{
"mcpServers": {
"windows-mcp": {
"command": "uvx",
"args": [
"windows-mcp",
"serve"
],
"env": {
"ANONYMIZED_TELEMETRY": "false"
}
}
}
}
有关可配置选项的完整列表,请参阅环境变量部分。
有关收集哪些数据及其处理方式的详细信息,请参阅安全策略中的遥测与数据隐私部分。
📝 限制
- 由于 MCP 依赖 a11y 树,因此无法选中段落中的特定文本部分。(⌛ 正在处理。)
Type-Tool用于输入文本,不适合在 IDE 中编程,因为它会将整个程序作为一个整体输入到文件中。(⌛ 正在处理。)- 此 MCP 服务无法用于玩电子游戏 🎮。
🪪 许可证
本项目采用 MIT 许可证授权,详情请参阅 LICENSE 文件。
🙏 致谢
Windows-MCP 使用了多个优秀的开源项目,为其 Windows 自动化功能提供支持:
衷心感谢这些库的维护者和贡献者所做的出色工作,以及他们秉持的开源精神。
🤝参与贡献
欢迎贡献!请参阅 CONTRIBUTING,了解设置说明和开发指南。
由 CursorTouch 倾心打造 ❤️
引用
@software{
author = {CursorTouch},
title = {Windows-MCP: Lightweight open-source project for integrating LLM agents with Windows},
year = {2024},
publisher = {GitHub},
url={https://github.com/CursorTouch/Windows-MCP}
}
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
