mcpField
🪟
🪟 Windows-MCP

🪟 Windows-MCP

本地服务
github.com/CursorTouch生产力10.6k1 天前更新

关于 🪟 Windows-MCP

Windows-MCP 是连接 AI Agent 与 Windows 10、11 的开源 MCP 服务。它提供应用、窗口、键盘、鼠标和界面状态控制,并支持获取浏览器页面内容的 DOM 模式。

主要功能

  1. 01打开应用并控制窗口
  2. 02提供键盘与鼠标工具
  3. 03捕获窗口和界面状态
  4. 04支持浏览器 DOM 模式
  5. 05提供 stdio 与网络传输

适用场景

  1. 01自动执行 Windows 应用任务
  2. 02测试桌面界面
  3. 03操作浏览器页面内容

MCP 相关

Windows-MCP 向连接的 MCP 客户端提供 Windows 界面自动化工具,支持 stdio、SSE 和 streamable HTTP 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"Windows-MCP": {
"command": "uvx",
"args": [
"windows-mcp"
]
}
}
}
启动命令uvx windows-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiwindows-mcp0.8.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

🪟 Windows-MCP

许可证 Python 平台:Windows 10 和 11 最近提交 PyPI 下载量
在 Twitter 上关注 加入我们的 Discord

CursorTouch%2FWindows-MCP | Trendshift

Windows-MCP 是一个轻量级开源项目,可实现 AI Agent 与 Windows 操作系统的无缝集成。它作为 MCP 服务,连接大模型与 Windows 操作系统,使 Agent 能够执行文件导航、应用控制、界面交互、QA 测试等任务。

mcp-name: io.github.CursorTouch/Windows-MCP

更新

支持的操作系统
  • 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 中安装
  1. 安装 Claude Desktop。
npm install -g @anthropic-ai/mcpb
  1. 配置 MCP 服务。

选项 A:从 PyPI 安装(推荐)

使用 uvx 直接从 PyPI 运行最新版本。

将以下内容添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "windows-mcp": {
      "command": "uvx",
      "args": [
        "windows-mcp",
        "serve"
      ]
    }
  }
}

选项 B:从源代码安装

  1. 克隆仓库:
git clone https://github.com/CursorTouch/Windows-MCP.git
cd Windows-MCP
  1. 将以下内容添加到 claude_desktop_config.json:
{
  "mcpServers": {
    "windows-mcp": {
      "command": "uv",
      "args": [
        "--directory",
        "<path to the windows-mcp directory>",
        "run",
        "windows-mcp",
        "serve"
      ]
    }
  }
}
  1. 完全重启 Claude Desktop,并确认 MCP 工具列表中出现该服务。

Claude Desktop MSIX(Microsoft Store)

采用 MSIX 打包的 Claude Desktop(Microsoft Store 版本)会虚拟化 %APPDATA%。这会导致两个主要问题:

  1. 配置文件位于:%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json(而非 %APPDATA%\Claude\)。
  2. 从“Claude Directory”自动安装会失败,因为 ${__dirname} 变量会解析到错误的(未虚拟化)路径。

在 Windows Store 版本的 Claude 中配置 Windows-MCP:

你必须手动编辑配置文件。请注意,MSIX 沙盒中的 Electron 应用不会继承系统 PATH,因此必须使用 uvx.exe(或 uv.exe)的完整绝对路径。

选项 A:使用预安装的可执行文件

  1. 在终端中运行 uv tool install windows-mcp。
  2. 在配置中使用生成的可执行文件:
{
  "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"
      ]
    }
  }
}
将 `` 替换为你的 Windows 用户名。若要查找正确的路径,请运行 `where uvx`、`where windows-mcp` 或 `where uv`。保存配置后,完全退出 Claude Desktop(系统托盘 → 退出),然后重新打开。

如需排查 Claude Desktop 集成问题,请参阅 MCP 文档。

在 Perplexity Desktop 中安装
  1. 安装 Perplexity Desktop。
  2. 打开 Perplexity Desktop,然后前往 Settings -> Connectors -> Add Connector -> Advanced。
  3. 将名称设为 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"
  ]
}
  1. 点击 Save,然后视需要重启 Perplexity Desktop。

如需排查 Claude Desktop 集成问题,请参阅 Perplexity MCP 支持。文档中包含检查日志和解决常见问题的实用提示。

在 Gemini CLI 中安装
  1. 安装 Gemini CLI。
npm install -g @google/gemini-cli
  1. 打开 %USERPROFILE%/.gemini/settings.json。
  2. 添加 windows-mcp 配置并保存。
{
  "theme": "Default",
  ...
  "mcpServers": {
    "windows-mcp": {
      "command": "uvx",
      "args": [
        "windows-mcp",
        "serve"
      ]
    }
  }
}

注意:若要从源代码运行,请将命令替换为 uv,并将 args 替换为 ["--directory", "<path>", "run", "windows-mcp", "serve"]。

  1. 重启 Gemini CLI。
在 Qwen Code 中安装 1. 安装 Qwen Code。
npm install -g @qwen-code/qwen-code@latest
  1. 打开 %USERPROFILE%/.qwen/settings.json。
  2. 添加 windows-mcp 配置并保存。
{
  "mcpServers": {
    "windows-mcp": {
      "command": "uvx",
      "args": [
        "windows-mcp",
        "serve"
      ]
    }
  }
}

注意:若要从源代码运行,请将命令替换为 uv,并将 args 替换为 ["--directory", "<path>", "run", "windows-mcp", "serve"]。

  1. 重启 Qwen Code。
在 Codex CLI 中安装 1. 安装 Codex CLI。
npm install -g @openai/codex
  1. 打开 %USERPROFILE%/.codex/config.toml。
  2. 添加 windows-mcp 配置并保存。
[mcp_servers.windows-mcp]
command="uvx"
args=[
  "windows-mcp",
  "serve"
]

注意:若要从源代码运行,请将命令替换为 uv,并将 args 替换为 ["--directory", "<path>", "run", "windows-mcp", "serve"]。

  1. 重启 Codex CLI。
在 Autohand Code 中安装

在 Windows 终端中添加已发布的 stdio 服务:

autohand mcp add windows-mcp uvx windows-mcp serve

在 add 后添加 --scope project,即可将服务配置保存在当前项目中。请参阅 Autohand Code,了解最新的安装和 CLI 详情。

在 Claude Code 中安装
  1. 安装 Claude Code:
npm install -g @anthropic-ai/claude-code
  1. 配置服务:

选项 A:从 PyPI 安装(推荐)

使用 uvx 直接从 PyPI 运行最新版本。

claude mcp add --transport stdio windows-mcp -- uvx windows-mcp serve

选项 B:从源代码安装

  1. 克隆代码库:
git clone https://github.com/CursorTouch/Windows-MCP.git
cd Windows-MCP
  1. 在终端中运行以下命令:
claude mcp add --transport stdio windows-mcp -- uv --directory "<path>" run windows-mcp serve

注意:若要让所有项目都能使用此服务,请在命令中添加 --scope user。

  1. 在终端中重新运行 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:

  1. 在 Windows 上安装 uv(在 PowerShell 终端中运行):
irm https://astral.sh/uv/install.ps1 | iex
  1. 在 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 标志可让所有项目都能使用此服务。

  1. 重启 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 客户端直接连接。
sseserve --transport sse --host HOST --port PORT通过服务器发送事件实现网络访问
streamable-httpserve --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 标志始终会覆盖配置文件中的值。

搜索顺序:

  1. --config /path/to/config.toml
  2. ~/.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_SCALE1.0编码前应用于截图的缩放系数。接受范围为 0.1–1.0 的浮点数。适用于高分辨率显示器(1440p、4K);在这些显示器上,默认设置生成的图像可能超过 Claude Desktop 的 1 MB 工具结果限制。设为 0.5 可将宽高各缩小一半(文件大小缩小至四分之一)。
WINDOWS_MCP_SCREENSHOT_BACKENDauto截图捕获后端。可选值: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_MS2000UI Automation 等待连接窗口无障碍提供程序的毫秒数,超时后将该窗口标记为失败。必须是正整数;其他值将使用默认值。
WINDOWS_MCP_UIA_TRANSACTION_TIMEOUT_MS5000单次 UI Automation 提供程序调用允许耗时的毫秒数,超时后调用将失败。必须是正整数;其他值将使用默认值。

当窗口不再响应 UI Automation(其 UI 线程正忙、死锁或仍在启动)时,Snapshot、WaitFor 和其他 UI 树工具现在会在超时一次后跳过该窗口。该窗口会被报告为捕获失败,但仍会返回桌面的其余部分。此前,调用会一直等待窗口恢复,之后的每次工具调用也都会排队等待。只有在应用确实需要更长时间才能完成单次无障碍调用时,才应提高这些值。若要完全停止遍历某个应用,请使用 WINDOWS_MCP_EXCLUDE_PROCESSES。

桌面控制设置

如果错过了物理按键/按钮的释放事件,输入监视器会在配置的空闲等待时间后检查是否存在残留按住状态。连续五次采样均确认全部释放,且采样间隔至少为 100 ms 时,会清除过时记录。新的物理输入或报告的按住按键/按钮状态会重置确认过程。此机制尽力而为:即使 Windows 无法提供状态,GetAsyncKeyState 返回零也会被视为已释放;重复采样可以过滤瞬时读数,但无法区分持续的查询失败。

变量默认值说明
WINDOWS_MCP_CONTROLtrue启用桌面控制协调。设置为 false 可禁用。等同于 --control/--no-control;需要重启。
WINDOWS_MCP_CONTROL_POLICYrelaxed门控策略:relaxed、balanced 或 strict。等同于 --control-policy;需要重启。
WINDOWS_MCP_CONTROL_IDLE_TIMEOUT10.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_HTTPfalse设置为 1、true、yes 或 on,即可在运行 streamable-http 时不使用 Mcp-Session-Id 连接状态。适用于重启后的重新连接以及水平扩展部署。

MseeP.ai Security Assessment Badge

遥测
变量默认值描述
ANONYMIZED_TELEMETRYtrue设置为 false 可禁用匿名使用情况遥测。无论此设置如何,都不会收集个人数据、工具参数或输出。
POSTHOG_API_KEYProject default覆盖用于匿名遥测的 PostHog 项目写入密钥。设置为空字符串可跳过 PostHog 客户端初始化。
POSTHOG_HOSThttps://us.i.posthog.com覆盖匿名遥测使用的 PostHog 主机,例如用于自托管 PostHog 部署。
调试
变量默认值描述
WINDOWS_MCP_DEBUGfalse设置为 1、true、yes 或 on 可启用调试模式,将日志级别设为 DEBUG 以输出详细信息。也可使用 --debug CLI 标志。
看门狗
变量默认值描述
WINDOWS_MCP_WATCHDOGfalse设置为 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 历史

Star History Chart

👥 贡献者

感谢所有为 Windows-MCP 做出贡献的优秀人士!🎉

README 配图

无论是代码、文档、错误报告还是功能建议,我们都感谢每一份贡献。想要参与贡献?请查看我们的贡献指南!

🔒 安全

重要提示: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}
}

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。