Ubuntu桌面控制MCP服务器
MCP(模型上下文协议)服务器,使LLM能够通过截图和发送鼠标点击来控制您的Ubuntu桌面。这允许AI助手与您的桌面应用程序进行视觉交互。
⚡ 新:优化生产工作流程
速度提高5倍,精度提高5倍! 现在使用与Anthropic的计算机使用API相同的优化技术:
- 📸 智能屏幕截图:自动降采样到1280x720(小5倍)
- 🎯 编号元素:通过叠加的ID一目了然地查看可点击的内容
- 🤖 AT-SPI集成:使用可访问性API自动检测UI元素
- 📐 百分比坐标:分辨率无关的定位(不再有像素狩猎!)
- ⚡ 工作流批处理:在一次MCP调用中执行多个操作
- 🎪 元素缓存:直接元素交互-“点击元素#5”
示例-旧方式(8+个调用,~15秒):
take_screenshot() → analyze → grid overlay → zoom quadrant → find pixel → click → miss示例-新方式(1次通话,约3秒):
take_screenshot() → "I see Pinta is element #5" → click_screen(element_id=5) → ✓看 README.md 了解全部细节。
特性
- 📸 电脑屏幕截图工具:带自动元素检测的带注释屏幕截图
- 🔢 元素检测:AT-SPI+CV回退,用于强大的UI元素识别
- 🖱️ 智能点击:按元素ID或百分比坐标单击
- ⌨️ 键盘控制:键入文本并按按键/热键
- 🎯 鼠标移动:使用动画平滑光标定位
- 🚀 工作流批处理:在单个MCP调用中执行多步骤任务
- 📊 诊断:显示缩放检测、警告和建议
快速开始
1.先决条件
- Ubuntu Linux(需要X11,Wayland不完全支持)
- Python 3.9+
2.安装
来自PyPI(推荐)
pip install ubuntu-desktop-control来自源头
# Clone repository
git clone https://github.com/charettep/ubuntu-desktop-control-mcp.git
cd ubuntu-desktop-control-mcp
# Install system dependencies (requires sudo)
chmod +x scripts/install.sh
./scripts/install.sh
# Install Python dependencies
pip install -e .配置
克劳德代码
Installation Methods
方法1:CLI(推荐)
claude mcp add --transport stdio ubuntu-desktop-control -- \
ubuntu-desktop-control方法2:手动配置
编辑 ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"ubuntu-desktop-control": {
"command": "ubuntu-desktop-control",
"args": []
}
}
}VS代码内部人员
Installation Methods
方法1:MCP命令
- 打开命令选项板(
Ctrl+Shift+P) - 跑
MCP: Open Workspace Folder Configuration - 在下面添加服务器配置。
方法2:手动配置
创建 .vscode/mcp.json 在您的工作空间中:
{
"servers": {
"ubuntu-desktop-control": {
"type": "stdio",
"command": "ubuntu-desktop-control",
"args": []
}
}
}Codex CLI
Installation Methods
方法1:CLI
codex mcp add ubuntu-desktop-control -- \
ubuntu-desktop-control方法2:手动配置
编辑 ~/.config/codex/config.toml:
[mcp_servers.ubuntu-desktop-control]
type = "stdio"
command = "ubuntu-desktop-control"
args = []工具
核心能力
| 工具 | 说明 |
|---|---|
take_screenshot | 使用带注释的元素捕获桌面(每个显示器可选)。 |
click_screen | 按元素ID或百分比坐标单击(每个监视器支持)。 |
move_mouse | 按元素ID或百分比坐标移动光标(每个监视器支持)。 |
drag_mouse | 按住鼠标按钮的同时将光标拖动到坐标。 |
type_text | 使用键盘键入文本。 |
press_key | 按特定键(例如“enter”、“esc”)。 |
press_hotkey | 同时按下组合键(例如Ctrl+Shift+C)。 |
get_screen_info | 获取屏幕尺寸和显示服务器类型(X11/Wayland)。 |
get_display_diagnostics | 解决缩放和坐标不匹配的问题。 |
map_GUI_elements_location | 使用计算机视觉检测和映射UI元素(hitbox)。 |
convert_screenshot_coordinates | 将屏幕截图中的像素转换为逻辑点击坐标。 |
list_prompt_templates | 列出可用的提示模板(适用于没有本机提示支持的客户端)。 |
execute_workflow | 执行一批操作(截图/点击/移动/键入/等待)。 |
提示渲染工具
这些工具允许没有本机提示支持的客户端(如Codex CLI)将提示模板呈现为文本。
| 工具 | 说明 |
|---|---|
render_prompt_baseline_display_check | 渲染基线显示检查提示。 |
render_prompt_capture_full_desktop | 渲染完整的桌面捕获提示。 |
render_prompt_capture_region_for_task | 渲染区域捕获提示。 |
render_prompt_convert_screenshot_coordinates | 渲染坐标转换提示。 |
render_prompt_safe_click | 渲染安全单击提示。 |
render_prompt_hover_and_capture | 渲染悬停和捕捉提示。 |
render_prompt_coordinate_mismatch_recovery | 呈现不匹配的恢复提示。 |
render_prompt_end_to_end_capture_and_act | 呈现端到端工作流提示。 |
提示
| 提示 | 描述 |
|---|---|
baseline_display_check | 在开始任务之前,请检查显示设置和缩放比例。 |
capture_full_desktop | 捕获并总结整个桌面状态。 |
capture_region_for_task | 捕捉特定区域进行详细检查。 |
safe_click | 通过安全检查和缩放意识进行点击。 |
hover_and_capture | 悬停以显示UI元素,然后捕获。 |
coordinate_mismatch_recovery | 诊断并修复错过的点击。 |
end_to_end_capture_and_act | 计划并执行一个完整的交互循环。 |
配置和定制
环境变量
服务器依赖于标准的Linux/X11环境变量来定位桌面会话并与之交互。
| 变量 | 描述 | 默认值 |
|---|---|---|
DISPLAY | X11显示标识符。服务器需要知道 *哪个* 屏幕控制。 | :0 |
XDG_SESSION_TYPE | 用于检测是否在X11或Wayland上运行。 | unknown |
XAUTHORITY | X11权限文件的路径。如果从不同的用户上下文(例如sudo、docker)或通过SSH运行,则需要此项。 | ~/.Xauthority |
UDC_FORCE_COORDS | 强制坐标点击(禁用AT-SPI动作点击)。 | 未设置 |
传递环境变量
您可以在MCP客户端配置中自定义这些变量。
克劳德桌面(claude_desktop_config.json)
{
"mcpServers": {
"ubuntu-desktop-control": {
"command": "ubuntu-desktop-control",
"args": [],
"env": {
"DISPLAY": ":0",
"XAUTHORITY": "/home/user/.Xauthority"
}
}
}
}VS代码(.vscode/mcp.json)
{
"servers": {
"ubuntu-desktop-control": {
"command": "ubuntu-desktop-control",
"args": [],
"env": {
"DISPLAY": ":0"
}
}
}
}显示比例和坐标
如果单击落在错误的位置,则可能是HiDPI显示缩放不匹配(例如,逻辑1920x1080与物理3840x2160)。
解决:
- 自动秤:使用
click_screen(..., auto_scale=True)让服务器来处理它。 - 诊断:运行
get_display_diagnostics()查看缩放因子。 - 元素ID:使用
take_screenshot(detect_elements=True)并点击通过element_id或百分比坐标。
故障排除
Common Issues
- “截图失败”:确保
gnome-screenshot或scrot已安装(sudo apt install gnome-screenshot). - “未安装PyAutoGUI”:确保您正在使用
.venvpython - Wayland问题:此服务器需要X11。核对
echo $XDG_SESSION_TYPE.如果是“wayland”,请在登录时切换到“Xorg上的GNOME”。 - 权限不足:运行
xhost +local:如果您有X11权限问题。
安全
⚠️ 警告:此服务器使LLM可以完全控制您的鼠标和屏幕可见性。
- 仅与受信任的客户端一起使用。
- 请注意,屏幕截图可能会捕获敏感数据。
- 自动点击可能具有破坏性。
许可证
MIT许可证
