xvfb计算机使用mcp
屏幕外计算机使用MCP服务器进行无头GUI测试。用途 Xvfb (X Virtual Framebuffer)创建不干扰物理桌面的隔离虚拟显示器。
专为Claude Code和其他MCP客户端的自主E2E测试而构建。
特性
- 屏幕外显示 --测试在虚拟帧缓冲区中运行,您的桌面保持不变
- 平行会议 --每个会话都有自己的显示(
:99,:100等),实现并发测试执行 - 快速截图 --用途
ffmpegx11grab用于亚秒级捕捉 - 完全输入控制 --键盘、鼠标、滚动、拖动
xdotool - 窗口检测 --按标题模式等待并查找窗口
- 进程管理 --启动并跟踪每个会话的应用程序流程
- 自动清理 --会话和进程在销毁或服务器关闭时被清理
- Qt6就绪 --自动设置
QT_QPA_PLATFORM=xcb适用于Qt应用程序
系统要求
- Linux(需要X11支持)
- Node.js 18+
系统包
Arch Linux:
sudo pacman -S xorg-server-xvfb xdotool ffmpeg xorg-xdpyinfo openboxDebian/Ubuntu:
sudo apt install xvfb xdotool ffmpeg x11-utils openboxFedora:
sudo dnf install xorg-x11-server-Xvfb xdotool ffmpeg xdpyinfo openbox或者运行附带的脚本: ./install-deps.sh
安装
npm install
npm run build使用Claude代码
claude mcp add --transport stdio computer-use-offscreen -- \
node /path/to/xvfb-computer-use-mcp/dist/main.js然后在Claude Code会话中:
- 创建会话 —
create_session可选宽度/高度 - 启动您的应用程序 —
run_in_session使用命令 - 注意了 —
wait_for_window直到应用程序的窗口出现 - 互动 —
computer截图、点击、键盘工具 - 清理 —
destroy_session完成后
MCP工具
会话管理
| 工具 | 说明 |
|---|---|
create_session | 创建新的Xvfb虚拟显示(默认1920x1080) |
destroy_session | 销毁会话并终止其所有进程 |
list_sessions | 列出所有活动会话及其进程信息 |
run_in_session | 在会话中启动命令 |
wait_for_window | 轮询,直到出现具有匹配标题的窗口 |
find_windows | 查找所有窗口,可选择按标题筛选 |
计算机控制
这 computer 该工具支持所有标准操作:
| 动作 | 描述 |
|---|---|
get_screenshot | 将虚拟显示捕获为PNG格式 |
key | 按下组合键(例如。 ctrl+s, Return, alt+F4) |
type | 键入文本字符串 |
left_click | 在可选坐标处左键单击 |
right_click | 在可选坐标处单击鼠标右键 |
middle_click | 在可选坐标处单击鼠标中键 |
double_click | 双击可选坐标 |
mouse_move | 将光标移动到坐标 |
left_click_drag | 从当前位置拖动到坐标 |
scroll | 在坐标处滚动(文本: up, down:500等等) |
get_cursor_position | 获取当前光标x,y |
所有基于协调的动作在API图像空间和显示空间之间自动缩放。
并行测试示例
// Create two isolated sessions
const s1 = await callTool("create_session", { width: 1280, height: 720 });
const s2 = await callTool("create_session", { width: 1280, height: 720 });
// Launch apps in parallel
await Promise.all([
callTool("run_in_session", { session_id: "s1", command: "./my-app" }),
callTool("run_in_session", { session_id: "s2", command: "./my-app" }),
]);
// Each session has independent mouse, keyboard, and display
await callTool("computer", { session_id: "s1", action: "key", text: "ctrl+n" });
await callTool("computer", { session_id: "s2", action: "key", text: "ctrl+o" });
// Screenshots are per-session
const shot1 = await callTool("computer", { session_id: "s1", action: "get_screenshot" });
const shot2 = await callTool("computer", { session_id: "s2", action: "get_screenshot" });运作原理
- Xvfb 创建无物理监视器的轻量级虚拟X11显示器
- 开箱 提供了一个最小的窗口管理器,用于正确的窗口管理
- Xdotool 将键盘和鼠标事件发送到虚拟显示器
- FFmpeg 通过X11屏幕截图捕获屏幕截图
- 锋利的 调整屏幕截图的大小以符合Claude的API图像限制
每个会话都是完全隔离的——独立的显示服务器、窗口管理器和输入状态。
许可证
麻省理工学院
