mcpField
B
browser-gateway

browser-gateway

本地服务
github.com/browser-gateway浏览器自动化181 周前更新

关于 browser-gateway

browser-gateway 为开发者和 AI Agent 将浏览器会话路由到云端、Docker 或本地 Chrome 服务,并提供故障切换与会话状态管理。它还包含 REST API 和管理面板。

主要功能

  1. 01服务商路由与自动故障切换
  2. 02持久化浏览器配置
  3. 03会话回放与管理面板
  4. 04REST 截图、提取与抓取
  5. 05MCP 浏览与交互工具

适用场景

  1. 01服务商故障时维持浏览器自动化
  2. 02跨会话复用 Cookie 和 localStorage
  3. 03查看录制的浏览器会话
  4. 04让 Agent 浏览页面并提交表单

MCP 相关

向 MCP 客户端提供浏览器工具,包括导航、快照、截图、操作、提取和执行代码。请求经网关的服务商选择与故障切换层路由。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"browser-gateway-browser-gateway": {
"command": "npx",
"args": [
"-y",
"browser-gateway"
],
"env": {
"BG_TOKEN": "<BG_TOKEN>"
}
}
}
}
启动命令npx -y browser-gateway
需要配置的环境变量
BG_TOKEN密钥Authentication token for gateway access (optional, only needed with remote providers)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmbrowser-gateway0.4.34

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

browser-gateway

browser-gateway

面向云端浏览器的开放路由器。
通过一个端点路由至你使用的所有浏览器提供商:自动故障转移、持久化配置文件、会话回放、REST API、MCP 服务和控制面板。
无需任何改动,即可与 Puppeteer、Playwright、Stagehand、browser-use 和任何 MCP 客户端配合使用。

BrowserGateway 是 DevHunt 本周第一工具

npm 版本 npm 下载量 MIT 许可证 Node.js GitHub 星标数

部署到 Railway   部署到 Render   部署到 DigitalOcean   部署到 Koyeb

网站  ·  快速入门  ·  MCP  ·  配置文件  ·  回放  ·  REST API  ·  控制面板  ·  Discord

browser-gateway 按优先级向多个浏览器提供商分配流量,并在某个提供商达到容量上限时切换到其他提供商


概述

一个端点,多个提供商。当某个提供商达到容量上限或不可用时,自动故障转移。

你的应用连接到 ws://gateway:9500/v1/connect。网关会根据健康状况、容量和你的路由策略,选择最佳可用提供商。提供商可以是云端 CDP 服务、Docker 容器或本地 Chrome 实例。


仪表板

每次安装都会附带一个 Web 仪表板。启动网关后,打开 http://localhost:9500/web。

概览。 查看活动会话、队列深度、提供商健康状态、连接端点,以及适用于 Puppeteer、Playwright、Stagehand、browser-use 和原始 CDP 的复制粘贴式快速入门。

仪表板概览页面,显示活动会话、队列深度、提供商健康状态、已屏蔽的连接端点,以及带有 Puppeteer 代码的选项卡式快速入门

REST API。 通过表单驱动的界面调用截图、内容提取和结构化抓取端点,并可直接查看配置文件选择和参数参考。

仪表板中的 REST API 页面,包含三个选项卡(截图、内容、抓取)以及用于截取目标 URL 的表单,可设置格式和配置文件选项

Playground。 在浏览器中实时驱动任意提供商。选择提供商和配置文件,像使用本地浏览器一样在画布中输入,并实时查看远程会话。

实时 Playground 页面,流式显示远程 Chrome 会话;仪表板画布中已加载 yahoo.com


功能

路由与可靠性
  • 自动故障转移 - 某个提供商发生故障时,下一个提供商会立即接管,无需更改客户端
  • 五种负载均衡策略 - 优先级链、轮询、最少连接数、延迟优化、加权
  • 按提供商设置并发限制 - 网关会在每个后端强制执行 maxConcurrent
  • 请求队列 - 当所有提供商都已饱和时,连接会等待,而不是立即失败
  • 冷却机制 - 跳过发生故障的提供商,并在 TTL 后自动恢复
  • 健康检查 - 定期探测连接状态,在客户端连接之前将不健康的提供商标记出来
  • 平滑关闭 - 收到 SIGTERM 和 SIGINT 时,让活动会话正常结束
  • 会话重连 - 客户端断开连接后,可通过 ?sessionId=<X-Session-Id> 重新连接;对于会发放恢复令牌的提供商(启用了恢复窗口的 browserserve),会恢复同一个浏览器及其页面、Cookie 和存储;否则,会在同一提供商上启动一个新浏览器
  • Webhooks - 在提供商离线、恢复以及队列溢出事件发生时触发
REST API
  • 截图 - POST /v1/screenshot 将任意 URL 截取为 PNG 或 JPEG,可截取整页,也可限定到某个选择器
  • 内容提取 - POST /v1/content 返回 Markdown、纯文本、HTML 或经过清理的文章
  • 抓取 - POST /v1/scrape 通过 CSS 选择器或整页格式提取结构化数据
  • 会话池 - 在多个请求间复用浏览器连接,类似数据库连接池
  • 自动重试 - 请求失败时,在新页面上重试
Profiles — 持久化浏览器状态
  • 跨会话保留 - 离开每个页面以及断开连接时都会捕获 cookies 和 localStorage,并在下次使用相同 id 连接时恢复(browserserve 还支持 IndexedDB)
  • 可由任意提供方保存 - 每个提供方都能加载和保存任意配置文件;只有将某个提供方固定到一个配置文件,才能将该配置文件的会话路由到该提供方
  • 配置文件绝不混用 - 仍保留其他配置文件的浏览器会被拒绝。复用的浏览器中其他已有内容(来自未使用配置文件的会话)会与该配置文件一并保存
  • 一行即可启用 - 在 WebSocket URL 中添加 ?profile=acme,其余操作会自动完成
  • 静态加密 - 使用 AES-256-GCM 信封加密、防调包绑定,以及通过 scrypt 派生的 KEK
  • 与提供方无关 - 状态在 CDP 层捕获,因此可在任意提供方上恢复
  • 按配置文件锁定 - 并发连接到同一 id 时会返回 HTTP 409,以防数据损坏
  • 导出和导入 - 加密的 .bgp 文件可在不同网关安装之间移植
  • 一键启用 - 仪表板向导会在浏览器中生成强密钥并将其写入配置

完整指南、安全模型、REST 端点和限制请参阅 Profiles 文档。

会话回放 — 查看 Agent 看到的内容
  • 帧级精确的视觉记录,通过 CDP Page.startScreencast 捕获每个路由会话
  • 零注入 - 不会在客户页面中运行脚本,捕获完全在带外进行
  • 与提供方无关 - 适用于任何支持页面录制的后端
  • 仪表板播放器 - 浏览录制的帧,并在捕获的浏览器目标之间切换
  • 保留控制 - 可配置保留期限、单个会话的字节上限和每日清理

存储布局、REST 端点和调优选项请参阅 Replays 文档。

面向 AI Agent 的 MCP 服务
  • 单次调用工具 - fetch_page 可将任意 url 读取为 markdown,screenshot_page 可截取页面;每个工具都通过一次调用自行启动并关闭浏览器
  • 会话工具 - browser_session、browser_navigate、browser_snapshot、browser_act、browser_extract、browser_screenshot、browser_wait、browser_tabs、browser_evaluate、browser_observe,用于登录、填写表单和多步骤操作
  • 为编码 Agent 提供回退方案 - 内置网页抓取受阻、返回空内容或需要 JavaScript 时,Claude Code 插件会让 Claude 改用 fetch_page(/plugin marketplace add browser-gateway/browser-gateway);Codex、Cursor 和 Gemini CLI 的设置说明见 plugins/browser-gateway
  • 零配置 - 自动检测 Chrome,并在首次使用工具时启动
  • 并发会话 - 每个 Agent 都有自己的浏览器,状态互不共享
  • 原生 CDP - 不依赖 Playwright 或 Puppeteer
  • 兼容性 - 兼容 Claude Code、Cursor 和任何兼容 MCP 的客户端
为 Claude 和 Gemini 提供计算机使用能力
  • 模型可在任意浏览器中使用自身的浏览器工具 - 可通过网关在任意提供方上运行 Claude 的浏览器和计算机使用工具,以及 Gemini 计算机使用功能
  • 约十行代码 - runClaudeLoop / runGeminiLoop 接收你自己的模型调用,并处理操作、截图和结果
  • 安全默认设置 - 仅允许 http 和 https,阻止私有网络,可选网站允许列表,并提供 Gemini 针对高风险操作的确认步骤
  • 无需额外依赖 - browser-gateway/agent-tools/computer-use,已在 Node.js、Bun、Deno 和 Cloudflare Workers 运行时上测试
管理
  • 仪表板 - 在浏览器中管理提供方、查看会话和编辑配置
  • 提供方 CRUD - 可通过仪表板或 API 添加、编辑、删除和测试提供方
  • 配置编辑器 - 在浏览器中编辑 gateway.yml,支持语法高亮和验证
  • 身份验证 - 基于令牌,并为仪表板使用安全的 HttpOnly Cookie
  • 协议无关 - 适用于 Playwright、Puppeteer 和任意 WebSocket 协议

快速开始

作为 WebSocket 代理(供应用程序使用)
npm install -g browser-gateway

创建 gateway.yml:

version: 1

providers:
  primary:
    url: wss://provider.example.com?token=${PROVIDER_TOKEN}
    limits:
      maxConcurrent: 5
    priority: 1

  fallback:
    url: ws://my-playwright-server:4000
    limits:
      maxConcurrent: 10
    priority: 2
browser-gateway serve

从应用程序连接:

// For CDP providers
const browser = await chromium.connectOverCDP('ws://localhost:9500/v1/connect');

// For Playwright run-server providers
const browser = await chromium.connect('ws://localhost:9500/v1/connect');

也可以使用 REST API,无需管理 WebSocket:

# Screenshot
curl -X POST http://localhost:9500/v1/screenshot \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}' --output screenshot.png

# Extract content as markdown
curl -X POST http://localhost:9500/v1/content \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com", "formats": ["markdown"]}'

这些端点仅接受公共主机上的 http 和 https URL。回环、链路本地和私有范围地址会被拒绝,并且主机名会被解析并重新检查。若要访问内部主机,请在 gateway.yml 的 rest.allowedPrivateHosts 下列出该主机。

控制面板位于 http://localhost:9500/web。

作为 MCP 服务(供 AI Agent 使用)

添加到 Claude Code 或 Cursor 配置中:

{
  "mcpServers": {
    "browser-gateway": {
      "command": "npx",
      "args": ["browser-gateway", "mcp"]
    }
  }
}

无需配置文件。Agent 可通过网关的路由层使用 navigate、snapshot、screenshot、click、type 和 evaluate 工具。

有关所有选项,请参阅 MCP 文档。


身份验证

设置 BG_TOKEN 以要求提供令牌(或将其放入 .env 文件):

BG_TOKEN=my-secret-token browser-gateway serve
  • WebSocket 客户端通过 ?token= 查询参数传递令牌
  • API 客户端使用 Authorization: Bearer <token> 标头
  • 控制面板会显示登录表单,并设置安全的 HttpOnly Cookie
  • 健康检查端点(/health)始终公开

未设置 BG_TOKEN 时,所有 /v1/* 路由都无需身份验证,因此网关会绑定到 127.0.0.1,而非所有网络接口。设置令牌(或显式设置 HOST)即可为其他机器提供服务。未设置令牌时,BG_ALLOWED_HOSTS 可允许 /mcp 使用其他 Host 值。


CLI

# Proxy server
browser-gateway serve                    # Start the gateway + dashboard
browser-gateway serve --port 8080        # Custom port
browser-gateway serve --config path.yml  # Custom config

# MCP server for AI agents
browser-gateway mcp                      # Auto-detect Chrome, zero config
browser-gateway mcp --headless           # Headless mode (for CI/Docker)
browser-gateway mcp --cdp-endpoint ws:// # Connect to existing browser
browser-gateway mcp --config gateway.yml # Multi-provider with failover

# Utilities
browser-gateway check                    # Test provider connectivity
browser-gateway version                  # Print version
browser-gateway help                     # Show help

API

端点方法描述
/v1/connectWebSocket连接到浏览器(核心功能)
/v1/screenshotPOST对任意 URL 截图(文档)
/v1/contentPOST将页面内容提取为 Markdown、文本或 HTML(文档)
/v1/scrapePOST通过 CSS 选择器或整页格式提取数据(文档)
/v1/statusGET网关健康状态 + 提供方状态 + 池状态
/v1/sessionsGET活动会话
/v1/providersGET/POST列出或添加提供方
/v1/providers/:idPUT/DELETE更新或移除提供方
/v1/providers/:id/testPOST测试提供方连通性
/v1/configGET/PUT读取或保存配置
/v1/config/validatePOST验证 YAML,但不保存
/mcpPOSTMCP Streamable HTTP 端点
/json/versionGETCDP 发现(供 browser-use、Playwright、Stagehand 使用)
/healthGET健康检查

Docker

推荐使用 Docker Compose。随附的 docker-compose.yml 会为状态挂载一个命名卷,并从主机以只读方式挂载 gateway.yml。

# Drop your gateway.yml next to docker-compose.yml, then:
docker compose up -d

普通的 docker run:

docker run -d \
  -p 9500:9500 \
  -v bg_data:/data \
  -v ./gateway.yml:/app/gateway.yml:ro \
  -e PROVIDER_TOKEN=xxx \
  ghcr.io/browser-gateway/server:latest
持久化

网关写入磁盘的所有内容都位于单个目录 BG_DATA_DIR 下(在镜像中默认为 /data)。将其挂载为命名卷或绑定挂载,即可在容器重启和镜像升级后保留所有状态。目前其中包含:

  • profiles/ — 加密的配置文件数据块(启用配置文件时)

未来版本可能会在同一根目录下添加更多子目录(冷却状态、会话快照、捕获内容)。将 BG_DATA_DIR 挂载为一个卷,即可持久保存所有子系统的数据,无需后续更改配置。

升级

状态保存在卷中,代码保存在镜像中。拉取新镜像并重新创建容器即可,不会丢失数据:

docker compose pull
docker compose up -d

容器会读取相同的 BG_DATA_DIR 和 gateway.yml。配置文件数据块带有版本信息,网关能够透明读取旧格式。

镜像标签
标签更新时机
:0.3.0(以及后续每个版本)发布后手动推送
:latest始终指向最新版本

镜像支持多种架构(linux/amd64、linux/arm64),使用 Sigstore 构建来源证明签名,并附带 SBOM。使用 GitHub CLI 验证:

gh attestation verify oci://ghcr.io/browser-gateway/server:0.3.0 \
  --repo browser-gateway/browser-gateway

工作原理

不使用配置文件/录制/可观测性功能的会话(默认)会走字节管道快速通道:

  1. 客户端连接到 ws://gateway:9500/v1/connect
  2. Gateway 根据你的路由策略选择提供方
  3. Gateway 与提供方建立原始 TCP 连接
  4. 转发 HTTP 升级请求,提供方返回 101 Switching Protocols
  5. 双向 TCP 管道:client <-> gateway <-> provider
  6. 透明转发所有 WebSocket 消息(绝不解析或修改)
  7. 断开连接时:清理会话、释放槽位、更新指标
  8. 如果所有提供方都已满:连接会在队列中等待,直到有槽位可用

使用配置文件注入、会话录制、实时视图或可观测性功能的会话(例如 ?profile=X、?session_record=true、/v1/live)则会通过支持 CDP 的管道运行:每个会话使用一个 WebSocket,由 N 个插件监视线路。路由和故障转移方式相同;空闲时逐字节透传,仅在请求相应功能时才会触发插件。架构和插件编写指南:docs/PIPELINE.md。


自托管提供方:browserserve

browserserve 是此技术栈自有的自托管浏览器服务:一个容器即可通过 CDP 分发相互隔离的 Chrome 会话。像添加其他提供方一样添加它:

providers:
  browserserve:
    url: ws://your-host:9222
  cloud-provider:
    url: <websocket-url-with-auth>
    priority: 2

由于 Gateway 控制该运行环境,browserserve 提供方会被自动检测,并解锁外部提供方不具备的两项功能:

  • 自动容量。 无需设置 maxConcurrent。browserserve 会检测其主机的资源限制(内存、线程和 CPU),并公布安全上限,Gateway 会采用该上限。仪表板会将其显示为 (auto)。
  • 完整配置文件。 每个会话都会启动一个全新的浏览器,保存的配置文件会保留完整的浏览器状态,包括 IndexedDB 和 service worker。其他提供方只会保存 Cookie 和站点存储数据。

一种常见的配置方式是:在自有硬件上将 browserserve 设为主提供方,并将云提供方设为较低优先级,以便故障转移。


兼容工具

browser-gateway 兼容现有的浏览器工具。只需传入 Gateway URL——它会通过 /json/version 自动解析。

AI Agent 框架:

# browser-use (Python) — HTTP URL auto-resolves
BrowserSession(cdp_url="http://localhost:9500")
// Stagehand (TypeScript)
new Stagehand({ env: "LOCAL", localBrowserLaunchOptions: { cdpUrl: "http://localhost:9500" } })

Playwright MCP(通过 Gateway 路由调用全部 70 个 Playwright 工具):

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest", "--cdp-endpoint", "http://localhost:9500"]
    }
  }
}

Puppeteer / Playwright:

// Playwright — HTTP or WebSocket
const browser = await chromium.connectOverCDP("http://localhost:9500");

// Puppeteer — WebSocket
const browser = await puppeteer.connect({ browserWSEndpoint: "ws://localhost:9500/v1/connect" });

文档

完整文档请访问 docs.browsergateway.com。


贡献

欢迎贡献。请参阅 CONTRIBUTING.md 了解指南。

许可证

MIT — 请参阅 LICENSE。

链接

联系方式

如有疑问、安全问题报告或合作咨询,请联系:[email protected]。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。