桌面控制服务器

一个允许AI观察和控制桌面的服务器,支持截图、鼠标移动、点击、滚动、键盘输入和运行shell命令。

  • by MarkCodering
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 MarkCodering/CU-MCP

使用说明

计算机使用MCP服务器

A. 模型上下文协议 服务器,让人工智能观察和控制你的桌面——截图、移动鼠标、点击、滚动、键入和运行shell命令。

工具

屏幕观察

工具 说明
take_screenshot 将桌面捕获为base64 PNG(大屏幕自动缩放)
get_screen_info 屏幕尺寸和当前光标位置
get_cursor_position 当前鼠标(x,y)坐标
get_active_window_info 最前面的应用程序名称和窗口标题(macOS)

鼠标控制

工具 说明
mouse_move 将光标移动到(x,y)
mouse_left_click 左键单击(x,y)
mouse_right_click 在(x,y)处单击鼠标右键
mouse_double_click 双击(x,y)
mouse_scroll 在(x,y)处垂直和/或水平滚动
mouse_drag 单击并从一个位置拖动到另一个位置

键盘控制

工具 说明
keyboard_type 键入文本(默认情况下通过剪贴板进行Unicode安全)
keyboard_press 按一个键(enter, tab, escape、箭头键等)
keyboard_hotkey 按下快捷键,例如。 ["cmd", "c"]
keyboard_key_down 按住键
keyboard_key_up 松开按住的钥匙

外壳

工具 说明
run_shell_command 运行zsh命令,返回stdout/stderr/返回代码

资源

URI 描述
screen://screenshot base64 PNG字符串形式的实时桌面截图(大屏幕自动缩放)
screen://info 带有屏幕尺寸和光标位置的JSON
info://status 服务器健康检查

屏幕截图大小

为了避免超大或Retina显示器上的上下文窗口膨胀,屏幕截图在编码前会自动归一化/缩小。

  • take_screenshot.width / take_screenshot.height 保持鼠标操作的逻辑屏幕坐标。
  • take_screenshot.image_width / take_screenshot.image_height 是实际的编码图像尺寸。
  • take_screenshot.scale_x / take_screenshot.scale_y 将图像坐标映射回屏幕坐标。

可选环境变量:

  • CU_MCP_MAX_SCREENSHOT_EDGE (默认值 1920):编码屏幕截图的最大宽度/高度。集 0 禁用缩小。
  • CU_MCP_SCREENSHOT_PNG_COMPRESS_LEVEL (默认值 6,范围 0-9):PNG压缩级别。

提示

提示 描述
describe_screen 捕获并描述当前屏幕状态
automate_task(task) 自动化桌面任务的分步指南

设置

先决条件

  • Python 3.10+
  • macOS(鼠标/键盘自动化和屏幕截图使用macOS API)

安装

# Create a virtual environment using the Homebrew Python (recommended)
/opt/homebrew/opt/python@3.12/bin/python3.12 -m venv .venv
source .venv/bin/activate

# Install the server and all dependencies
pip install -e .
pip install mss pyautogui pyperclip

macOS权限

服务器首次执行鼠标/键盘操作或截图时,macOS将提示用户输入权限。授予两者 系统设置→ 隐私和安全:

  • 无障碍 --鼠标和键盘控制所需
  • 屏幕录制 --截图需要

跑步

# Run directly
.venv/bin/cu-mcp

# Or with the MCP CLI inspector (useful for debugging)
mcp dev src/cu_mcp/server.py

终端执行日志

服务器现在通过以下方式向终端打印实时工具执行日志(包括计时和经过净化的参数/结果的开始/结束) stderr 当它运行时。这不会干扰MCP stdio 响应。

可选环境变量:

  • CU_MCP_LOG_TO_STDERR (默认值 1):设置为 0 禁用终端日志
  • CU_MCP_LOG_MAX_STRING (默认值 300):截断前记录的最大字符串长度

添加到克劳德代码

claude mcp add cu-mcp -- /path/to/CU-MCP/.venv/bin/cu-mcp

添加到Claude桌面

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "cu-mcp": {
      "command": "/path/to/CU-MCP/.venv/bin/cu-mcp"
    }
  }
}

项目结构

src/cu_mcp/
  server.py   # All tools, resources, and prompts