desktop-mcp
desktop-mcp
面向大语言模型的桌面视觉与控制,支持 Linux,包括 Wayland —— 模型截取整个屏幕的截图,然后在所看到的内容上点击、输入和滚动。基于 stdio 的纯 MCP,因此它可以在 Claude Code、Claude Desktop、Cursor 或任何其他 MCP 客户端中使用。
先读这里:你可能不需要这个
Anthropic 原生提供 computer use 功能,在它能工作的地方你应该改用这个功能——它集成得更好,而且确实在维护:
macOS 和 Windows:Claude Desktop 在 Cowork 和 Claude Code 中内置了 computer use。它可以操控你的真实桌面。 (文档)
构建你自己的智能体:Claude API 有一个第一方的
computer工具 (GA 版本为computer_toolset_20260801工具集)。 (文档)
这个项目填补的空白是 Linux。 截至 2026 年 8 月,computer use 在 Linux 桌面应用中尚不可用,而且 Wayland 上的桌面自动化确实很别扭,这是 X11 从未有过的:
COSMIC 的合成器没有实现
wlr-screencopy,所以grim直接失败,每个截图工具都需要针对每个合成器的路径。没有协议可以查询光标位置,也没有协议可以枚举其他客户端的窗口。
输入必须通过
/dev/uinput从合成器下方注入,因为通常打包的ydotool暴露的是 相对 指针,其长距离跳转会被指针加速搞乱。
如果你在 macOS 或 Windows 上,这个仓库基本上是多余的。如果你在 Linux 上——尤其是 Wayland——它是可用的选择。
桌面自动化 MCP 服务器并不是一个新类别;已经有成千上万个 MCP 服务器。这里的特殊之处在于 Wayland 原生的绝对 uinput 输入路径,在 COSMIC 上实测像素级精确。
Related MCP server: mcp-linux-desktop
状态
编写时考虑了跨平台,但实际只有一种配置被验证过。其余只是代码路径,不是实证——请相应看待。
平台 | 截图 | 输入 | 已测试 |
Linux / Wayland |
|
| 是 — 仅 COSMIC |
Linux / X11 |
|
| 否 |
macOS |
|
| 否 |
Windows |
|
| 否 |
测试了什么,以及如何测试
在以下环境进行了端到端验证:
Pop!_OS 24.04 LTS,内核 7.0.11,COSMIC(
cosmic-comp1.0.0),Wayland,单台 2560x1440 显示器,Python 3.13。
结果:
检查项 | 方法 | 结果 |
截图 |
| 捕获 2560x1440,缩小到 1400x788 |
指针精度 | 5 个目标点,通过 XWayland 读回 | 5/5 精确,0px 误差 |
按钮和滚动 |
| 按钮 1、3、4 的 |
拖拽 |
| 按下和释放之间有 26 个 |
输入 |
| 文本落入了聚焦的编辑器 |
组合键 | 编辑器中的 | 已生效 |
通过 MCP 点击 | 针对原生 Wayland 应用的完整 stdio 往返 | 打开了新标签页 |
未测试但值得了解:多显示器布局、HiDPI 缩放、原始键码路径上的非美式键盘布局(wtype 能正确处理这些;uinput 键码假定为美式),以及所有非 COSMIC 合成器。
欢迎来自其他平台的报告——desktop_info 会输出诊断后端问题所需的一切信息。
安装
git clone <this repo> && cd desktop-mcp
uv venv && uv pip install -e .macOS、Windows 和 Linux/X11 还需要输入依赖:
uv pip install -e ".[gui]"Linux:一次性权限设置
在 Wayland 上注入输入意味着要写入 /dev/uinput,而它默认归 root 所有:
bash scripts/setup-linux.sh # needs sudo once
# then log out and back inmacOS:一次性权限设置
在“系统设置 → 隐私与安全性”中,为启动服务器的应用(Terminal、iTerm、Claude Desktop)授予屏幕录制和辅助功能权限。
接入
Claude Code:
claude mcp add desktop -- /absolute/path/to/desktop-mcp/.venv/bin/python -m desktop_mcp.serverClaude Desktop(claude_desktop_config.json)和 Cursor(.cursor/mcp.json)使用相同的结构:
{
"mcpServers": {
"desktop": {
"command": "/absolute/path/to/desktop-mcp/.venv/bin/python",
"args": ["-m", "desktop_mcp.server"]
}
}
}工具
工具 | 用途 |
| 捕获桌面 |
| 左/右/中键单击,单击或双击 |
| 移动指针而不点击(悬停) |
| 按下、移动、释放——选择、滑块、移动窗口 |
| 在某个点下滚动滚轮 |
| 向聚焦的元素输入文本 |
| 组合键,如 |
| 指针所在位置 |
| 打开窗口(在操作系统允许的情况下) |
| 暂停,然后重新查看 |
| 环境、当前后端、安全设置 |
坐标
截图在发送前会被缩小(默认长边 1400px),因此模型使用的是图像像素;服务器在每次调用时将它们映射回屏幕像素。请直接传入你从截图上读到的坐标。
这是大多数自制的 computer use 工具最容易搞错的细节。忽略它,每次点击都会落在目标位置的一个固定比例处。
为什么在 Linux 上使用 /dev/uinput 而不是 ydotool
通常打包的 ydotool 构建暴露的是 相对 指针,因此跳到 (1280, 720) 会被当作一次大的相对运动传递——合成器会对其应用指针加速。光标会落在目标附近而不是目标上,误差随距离增大。绝对 uinput 设备绕开了加速:在 2560x1440 屏幕上实测 5/5 精确。当 /dev/uinput 不可写时,ydotool 仍作为后备方案。
点击时序
合成器异步分发指针移动,而工具包会忽略在它们处理完将光标移到控件上的移动事件之前到达的按钮按下事件。在 COSMIC 上实测:移动和按下之间间隔 30ms 能可靠地高亮按钮,但绝不会激活它——悬停状态证明坐标是正确的,这使得这个失败很容易被误读为定位 bug。250ms 可以激活它。按下还必须保持(约 90ms)才能被识别为真正的点击,而不是一个杂散事件。
这两个延迟都可调;只有在你的桌面环境能承受时才降低它们。
安全
这赋予了模型与坐在机器前的人相同的操作权限。它可以读取屏幕上的任何内容——打开的密码管理器、私密消息、令牌——并点击任何东西,包括破坏性按钮。请将会话视为你把键盘交给了别人。
环境变量:
变量 | 默认值 | 作用 |
| 关闭 | 允许截图,拒绝所有输入 |
|
| 每分钟最大输入操作数 |
| — | 额外要拒绝的逗号分隔组合键 |
| — | 将每个操作追加到此文件 |
|
| 截图长边像素数 |
|
| 移动指针和按下之间等待的秒数 |
|
| 鼠标按钮按住的秒数 |
ctrl+alt+F1–F12 始终被阻止;VT 切换可能会让图形会话从你手中溜走。
一个只读审查者配置:
DESKTOP_MCP_READ_ONLY=1 python -m desktop_mcp.server验证
.venv/bin/python scripts/mcp_smoke.py # real stdio MCP round tripMaintenance
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceControls a real Linux desktop from any MCP host. Reads accessibility trees, takes screenshots, and drives clicks, scrolls, and keystrokes across GNOME, KDE/KWin, Hyprland, i3, and COSMIC.671395MIT
- AlicenseNot gradedqualityCmaintenanceEnables full Linux desktop control including windows, mouse, keyboard, clipboard, audio, screenshots, OCR, accessibility, and system management through MCP-compatible AI agents.1MIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server that gives a model eyes and hands on a Linux Wayland desktop, enabling screenshot capture, mouse/keyboard control, OCR, and icon detection via OmniParser.1
- AlicenseAqualityDmaintenanceEnables LLM agents to capture screenshots, control mouse/keyboard, and manage windows on desktop platforms, primarily Windows, via an MCP server.161MIT
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Zetakai/desktop-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server