关于 Browser Use Mcp Server
Browser Use MCP Server 是基于 Puppeteer 的轻量级浏览器自动化 MCP 服务。它通过结构化的无障碍快照让 LLM 操作网页,无需依赖截图或视觉模型。也可选择开启视觉模式处理复杂界面。
主要功能
- 01基于无障碍树的结构化页面操作
- 02可选的视觉模式处理复杂布局
- 03通过 HTTP 请求头配置视口与 User-Agent
- 04支持 stdio、SSE 与 Streamable HTTP 传输
- 05支持本地、远程浏览器及 CDP 端点
适用场景
- 01让 LLM 在网页上完成点击、填写表单等操作
- 02抓取页面文本、链接或截图用于分析
- 03在 VNC 虚拟显示环境中运行远程浏览器自动化
MCP 相关
该服务以 MCP 服务形式提供浏览器工具,如 browser_navigate、browser_click 和 browser_screenshot,以及 console://logs、screenshot:// 等资源。MCP 客户端可通过 stdio 或远程端点连接它。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
21收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 |
详细介绍
Browser Use MCP 服务
一款快速、轻量的 Model Context Protocol(MCP)服务,通过 Puppeteer 的结构化辅助功能数据,为大模型提供浏览器自动化能力;支持可选视觉模式,可进行复杂视觉理解,并提供灵活的跨平台配置。
主要功能
- ⚡ 快速轻量。使用 Puppeteer 的标签索引,而非基于像素的输入和辅助功能 DOM 树。
- 👁️ 支持视觉模式。当结构化数据不足以应对复杂布局和视觉元素时,可选用视觉理解功能。
- 🤖 针对大模型优化。无需视觉模型,完全基于结构化数据运行,减少上下文,从而降低上下文令牌用量。
- 🧩 灵活的运行时配置。可通过 HTTP 标头在运行时自定义视口大小、坐标系比例因子和 User-Agent。
- 🌐 跨平台且可扩展。支持远程和本地浏览器,并可使用自定义浏览器引擎。
要求
- Node.js 18 或更高版本
- VS Code、Cursor、Windsurf、Claude Desktop 或其他 MCP 客户端
开始使用
本地(Stdio)
首先,使用你的客户端安装 Browser MCP 服务。典型配置如下:
{
"mcpServers": {
"browser": {
"command": "npx",
"args": [
"@agent-infra/mcp-server-browser@latest"
]
}
}
}
在 VS Code 中安装
你也可以使用 VS Code CLI 安装 Browser MCP 服务:
# For VS Code
code --add-mcp '{"name":"browser","command":"npx","args":["@agent-infra/mcp-server-browser@latest"]}'
安装后,即可在 VS Code 中通过 GitHub Copilot Agent 使用 Browser MCP 服务。
在 Cursor 中安装
前往 Cursor Settings -> MCP -> Add new MCP Server。名称可自定义,类型选择 command,命令使用 npx @agent-infra/mcp-server-browser。你也可以点击 Edit 来检查配置或添加命令参数。
{
"mcpServers": {
"browser": {
"command": "npx",
"args": [
"@agent-infra/mcp-server-browser@latest"
]
}
}
}
在 Windsurf 中安装
请参阅 Windsurf MCP 文档。使用以下配置:
{
"mcpServers": {
"browser": {
"command": "npx",
"args": [
"@agent-infra/mcp-server-browser@latest"
]
}
}
}
在 Claude Desktop 中安装
请参阅 MCP 安装指南,并使用以下配置:
{
"mcpServers": {
"browser": {
"command": "npx",
"args": [
"@agent-infra/mcp-server-browser@latest"
]
}
}
}
同时,使用 --port $your_port 参数启动浏览器 MCP,即可将其转换为 SSE 和 Streamable HTTP 服务。
# normal run remote mcp server
npx @agent-infra/mcp-server-browser --port 8089
# run with DISPLAY environment for VNC or other virtual display
DISPLAY=:0 npx @agent-infra/mcp-server-browser --port 8089
你可以使用以下两个 MCP 服务远程端点之一:
- Streamable HTTP(推荐):
http://127.0.0.1::8089/mcp - SSE:
http://127.0.0.1::8089/sse
然后在 MCP 客户端配置中,将 url 设置为 SSE 端点:
{
"mcpServers": {
"browser": {
"url": "http://127.0.0.1::8089/sse"
}
}
}
将 url 设置为 Streamable HTTP 端点:
{
"mcpServers": {
"browser": {
"type": "streamable-http", // If there is MCP Client support
"url": "http://127.0.0.1::8089/mcp"
}
}
}
内存中调用
如果你的 MCP 客户端基于 JavaScript / TypeScript 开发,可以直接使用进程内调用,避免要求用户安装命令行界面才能使用 Browser MCP。
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
// type: module project usage
import { createServer } from '@agent-infra/mcp-server-browser';
// commonjs project usage
// const { createServer } = await import('@agent-infra/mcp-server-browser')
const client = new Client(
{
name: 'test browser client',
version: '1.0',
},
{
capabilities: {},
},
);
const server = createServer();
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
await Promise.all([
client.connect(clientTransport),
server.connect(serverTransport),
]);
// list tools
const result = await client.listTools();
console.log(result);
// call tool
const toolResult = await client.callTool({
name: 'browser_navigate',
arguments: {
url: 'https://www.google.com',
},
});
console.log(toolResult);
配置
Browser MCP 服务支持以下参数。你可以将它们作为 "args" 列表的一部分,填入上述 JSON 配置中:
> npx @agent-infra/mcp-server-browser@latest -h
-V, --version output the version number
--browser <browser> browser or chrome channel to use, possible values: chrome, edge, firefox.
--cdp-endpoint <endpoint> CDP endpoint to connect to, for example "http://127.0.0.1:9222/json/version"
--ws-endpoint <endpoint> WebSocket endpoint to connect to, for example "ws://127.0.0.1:9222/devtools/browser/{id}"
--executable-path <path> path to the browser executable.
--headless run browser in headless mode, headed by default
--host <host> host to bind server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.
--port <port> port to listen on for SSE and HTTP transport.
--proxy-bypass <bypass> comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"
--proxy-server <proxy> specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"
--user-agent <ua string> specify user agent string
--user-data-dir <path> path to the user data directory.
--viewport-size <size> specify browser viewport size in pixels, for example "1280, 720"
--output-dir <path> path to the directory for output files
--vision Run server that uses screenshots (Aria snapshots are used by default)
-h, --help display help for command
运行时配置
浏览器运行时需要配置 Viewport Size、Vision Model Coordinate Factors 和 User Agent。这些配置可以通过对应的 HTTP 标头传递:
| 标头 | 说明 |
|---|---|
x-viewport-size | 浏览器视口大小,格式为:以逗号分隔的 width,height |
x-vision-factors | 视觉模型坐标系因子,格式为:以逗号分隔的 x_factor,y_factor |
x-user-agent | User Agent 字符串;若未指定,则默认为系统 User Agent |
注意: 标头名称不区分大小写。
示例:
x-viewport-size: 1920,1080
x-vision-factors: 1.0,1.0
x-user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Docker
我们已将 VNC 和 MCP 的部署统一到单个 URL 端点下,Dockerfile 和 DockerHub 镜像也将一同发布!视频
API
工具
| 工具名称 | 描述 | 参数 |
|---|---|---|
browser_click | 点击页面上的元素。使用此工具前,请先使用 browser_get_clickable_elements 获取元素的索引,但不要多次调用 browser_get_clickable_elements | index(number,可选):要点击的元素索引 |
browser_close | 任务完成且不再需要浏览器时关闭浏览器 | |
browser_close_tab | 关闭当前标签页 | |
browser_evaluate | 在浏览器控制台中执行 JavaScript | script(string,必需):要执行的 JavaScript 代码,() => { /* code */ } |
browser_form_input_fill | 填写输入框。使用此工具前,必须提供“index”或“selector”之一 | selector(string,可选):输入框的 CSS 选择器,优先使用 index;如果未提供 index,则使用 selector index(number,可选):要填写的元素索引 value(string,必需):要填写的值 clear(boolean,可选):是否先清除现有文本 |
browser_get_clickable_elements | 获取当前页面上可点击、可悬停或可选择的元素,不要多次调用此工具 | |
browser_get_download_list | 获取已下载文件列表 | |
browser_get_markdown | 获取当前页面的 Markdown 内容 | |
browser_get_text | 获取当前页面的文本内容 | |
browser_go_back | 返回上一页 | |
browser_go_forward | 前进到下一页 | |
browser_hover | 将鼠标悬停在页面上的元素上。必须提供“index”或“selector”之一 | index(number,可选):要悬停的元素索引 selector(string,可选):要悬停的元素的 CSS 选择器 |
browser_navigate | 导航至 URL | url(string,必需): |
browser_new_tab | 打开新标签页 | url(string,必需):要在新标签页中打开的 URL |
browser_press_key | 按下键盘上的按键 | key(string,必需):要按下的按键名称或要生成的字符,例如 Enter、Tab、Escape、Backspace、Delete、Insert、F1、F2、F3、F4、F5、F6、F7、F8、F9、F10、F11、F12、ArrowLeft、ArrowRight、ArrowUp、ArrowDown、PageUp、PageDown、Home、End、ShiftLeft、ShiftRight、ControlLeft、ControlRight、AltLeft、AltRight、MetaLeft、MetaRight、CapsLock、PrintScreen、ScrollLock、Pause、ContextMenu |
browser_read_links | 获取当前页面上的所有链接 | |
browser_screenshot | 截取当前页面或特定元素的屏幕截图 | name(string,可选):屏幕截图名称 selector(string,可选):要截取屏幕截图的元素的 CSS 选择器 index(number,可选):要截取屏幕截图的元素索引 width(number,可选):像素宽度(默认值:视口宽度) height(number,可选):像素高度(默认值:视口高度) fullPage(boolean,可选):是否截取整页屏幕截图(默认值:false) highlight(boolean,可选):是否突出显示该元素 |
browser_scroll | 滚动页面 | amount(number,可选):滚动像素数(正数向下滚动,负数向上滚动);如果未提供 amount,则滚动到页面底部 |
browser_select | 使用索引选择页面上的元素。必须提供“index”或“selector”之一 | index(number,可选):要选择的元素索引 selector(string,可选):要选择的元素的 CSS 选择器 value(string,必需):要选择的值 |
browser_switch_tab | 切换到指定标签页 | index(number,必需):要切换到的标签页索引 |
browser_tab_list | 获取标签页列表 | |
browser_vision_screen_capture | 为视觉模式截取当前页面的屏幕截图 | |
browser_vision_screen_click | 使用视觉和屏幕快照在页面上单击鼠标左键。调用此工具前,应先调用一次 browser_vision_screen_capture;如果失败,则回退使用 browser_click | factors(array,可选):视觉模型坐标系的缩放因子 [width_factor, height_factor],用于坐标空间归一化。转换公式:x = (x_model * screen_width * width_factor) / width_factor y = (y_model * screen_height * height_factor) / height_factor,其中 x_model、y_model 是归一化的模型输出坐标(0-1),screen_width/height 是屏幕尺寸,width_factor/height_factor 是量化因子。如果因子未知,请留空。大多数模型不需要此参数。 x(number,必需):X 像素坐标 y(number,必需):Y 像素坐标 |
资源
| 资源名称 | URI 模式 | 描述 | MIME 类型 |
|---|---|---|---|
| 浏览器控制台日志 | console://logs | text/plain | |
| 浏览器下载内容 | download://{name} | 根据文件扩展名自动识别 | |
| 浏览器截图 | screenshot://{name} | 根据文件扩展名自动识别 |
开发
npm run dev
扩展 CLI 入口
#!/usr/bin/env node
const {
BaseLogger,
setConfig,
addMiddleware,
} = require('@agent-infra/mcp-server-browser/request-context');
class CustomLogger extends BaseLogger {
info(...args) {
console.log('custom');
console.log(...args);
}
}
addMiddleware((req, res, next) => {
console.log('req', req.headers);
next();
});
setConfig({
logger: new CustomLogger(),
});
// start server
require('@agent-infra/mcp-server-browser/index');
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。