项目简介
这是一个基于Model Context Protocol (MCP) 实现的服务器,旨在为大型语言模型 (LLM) 提供与虚拟计算机(特别是浏览器会话)交互的能力。通过该服务器,LLM 可以执行一系列模拟的用户操作,如点击、输入文本、滚动等,并接收操作后的屏幕截图作为视觉反馈。此外,它还支持将浏览器会话实时流式传输(HLS/RTSP),供人类或LLM观察。
主要功能点
- 虚拟浏览器控制:允许LLM通过预定义的工具对虚拟浏览器执行鼠标点击、双击、拖动、键盘输入、移动指针、屏幕截图、滚动和类型输入等操作。
- 视觉反馈:每次执行浏览器操作后,服务器都会捕获当前浏览器页面的屏幕截图,并以Base64编码的PNG图像形式返回给LLM客户端,帮助LLM理解操作结果。
- 实时会话流:提供HLS或RTSP流功能,可以将虚拟浏览器的实时画面流式传输到外部,方便用户监视LLM与浏览器的互动过程。
- 多种传输协议:支持Stdio、SSE (Server-Sent Events) 和HTTP等多种通信方式,方便与不同的LLM客户端集成。
- 会话管理:管理虚拟浏览器实例的生命周期,确保每次交互都在独立的会话中进行。
安装步骤
在本地运行该服务器需要Node.js环境和一些系统级依赖。
-
克隆仓库并安装依赖:
git clone https://github.com/supercorp-ai/computer-use-mcp.git cd computer-use-mcp npm install npm run build -
安装系统级依赖:
- 'Xvfb':一个虚拟X11显示服务器,用于在无头环境下运行浏览器。
- 'ffmpeg':包含'libx264'支持,用于HLS输出和屏幕捕获。
- 'xdotool':用于在虚拟显示器内模拟鼠标和键盘事件。
- 'Google Chrome / Chromium':Puppeteer 默认会下载一个测试构建版本,或者您也可以指定本地已安装的Chrome/Chromium路径。
macOS (开发环境):
brew install --cask xquartz # 提供 /opt/X11/bin/Xvfb brew install ffmpeg brew install xdotoolDebian/Ubuntu (Docker): 通常在Dockerfile中安装,请参考仓库中的'Dockerfile'片段:
# ... 其他基础镜像设置 FROM node:22-bookworm-slim WORKDIR /app ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ xvfb ffmpeg chromium \ libgtk-3-0 libnss3 libatk-bridge2.0-0 libxss1 libdrm2 libxkbcommon0 libgbm1 libasound2 \ fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf \ && rm -rf /var/lib/apt/lists/* # 可选: 配置Puppeteer使用系统Chromium RUN echo '#!/usr/bin/env bash\nexec /usr/bin/chromium --no-sandbox --disable-dev-shm-usage "$@"' \ > /usr/local/bin/chromium-wrapper \ && chmod +x /usr/local/bin/chromium-wrapper ENV PUPPETEER_SKIP_DOWNLOAD=true \ PUPPETEER_EXECUTABLE_PATH=/usr/local/bin/chromium-wrapper # ... 您的应用代码安装 CMD ["npm", "start", "--", "--chromePath", "/usr/local/bin/chromium-wrapper"] -
启动服务器: 根据您的操作系统和需求,选择合适的启动命令。 macOS 示例 (启用自动流和流管理工具):
npm start -- \ --stream auto \ --stream functions \ --previewPath /preview \ --xvfbPath /opt/X11/bin/Xvfb \ --ffmpegPath "$(which ffmpeg)"Docker 示例 (启用自动流和流管理工具):
npm run start:docker -- --stream auto --stream functions --previewPath /preview如果您通过Docker启动,容器会将端口 '8000' 暴露出来。您可以在主机浏览器中访问 'http://localhost:8000/preview' 来观看实时流。
服务器配置
MCP客户端需要知道如何连接到此服务器。以下是配置此MCP服务器到客户端的示例信息。请注意,这只是一个配置JSON的示例,不包含实际代码。
{ "name": "ComputerUseMCP", "command": "npm", "args": [ "start", "--", "--port", "8000", "--transport", "http", "--displayWidth", "1280", "--displayHeight", "720", "--toolsPrefix", "computer_", "--stream", "auto", "--stream", "functions", "--previewPath", "/preview", "--chromePath", "path/to/your/chromium", "--ffmpegPath", "path/to/your/ffmpeg", "--xvfbPath", "path/to/your/xvfb" ], "comment": "这是一个 MCP 服务器配置示例,用于连接 Computer Use MCP Server。", "parameters": { "port": "服务器监听的端口,默认为8000。", "transport": "选择通信协议,可以是 'stdio', 'sse', 或 'http',默认为 'http'。", "displayWidth": "虚拟浏览器窗口的宽度,默认为1280。", "displayHeight": "虚拟浏览器窗口的高度,默认为720。", "toolsPrefix": "注册工具名称的前缀,默认为 'computer_'。", "stream": "启用流功能,可以多次传递。例如,'auto' 自动启动流,'functions' 暴露流管理工具。可以同时传递两者。", "previewPath": "挂载HTML预览页面的路径,需要同时启用 '--stream'。", "chromePath": "Puppeteer 启动的Chrome/Chromium可执行文件路径。如果未指定,Puppeteer会下载一个捆绑的二进制文件。", "ffmpegPath": "用于显示捕获的ffmpeg二进制文件路径。如果未指定,默认使用系统PATH中的ffmpeg。", "xvfbPath": "用于虚拟显示的Xvfb二进制文件路径。如果未指定,默认使用系统PATH中的Xvfb。", "defaultUrl": "(可选)当会话启动时加载的默认URL。", "publicBaseUrl": "(可选)当服务器部署在反向代理后时,用于构建屏幕截图和流链接的公共基础URL。", "streamFps": "默认的MJPEG流帧率(1-30),默认为2。", "streamQuality": "默认的JPEG流质量(10-100),默认为80。" } }
基本使用方法
一旦服务器启动并与MCP客户端连接,LLM就可以通过调用注册的工具来与虚拟浏览器交互。
调用主要工具: 使用 'computer_call' 工具,LLM可以发送一个包含浏览器操作的JSON payload。例如:
- 执行点击操作: '{"tool_code": "computer_call", "args": {"action": {"type": "click", "x": 100, "y": 200, "button": "left"}}}' 这将模拟在屏幕坐标 (100, 200) 处进行一次左键点击,并返回操作后的屏幕截图。
- 输入文本: '{"tool_code": "computer_call", "args": {"action": {"type": "type", "text": "Hello LLM world!"}}}' 这将在当前聚焦的输入框中输入指定文本,并返回屏幕截图。
管理直播流 (如果 'stream functions' 已启用):
- 启动流: '{"tool_code": "computer_start_stream", "args": {"fps": 5, "quality": 90}}' 这将启动一个HLS流,并返回一个可供观看的流URL。
- 获取流URL: '{"tool_code": "computer_get_stream"}' 返回当前活动流的URL。
- 停止流: '{"tool_code": "computer_stop_stream"}' 停止当前的HLS流。
每次工具调用都会返回一个包含屏幕截图(Base64编码的PNG图像)的响应,LLM可以利用这些视觉信息进行推理和下一步决策。
信息
分类
AI与计算