
Browser Gateway
io.github.browser-gateway由 GitHub 账号 browser-gateway 发布v0.4.35更新于 Nov 6, 2026
AI browser tools with Chrome CDP. Navigate, screenshot, interact. Multi-provider failover.
概览
通过 CDP 驱动 Chrome 的浏览器自动化 MCP 服务器,可在多个浏览器供应商之间路由会话并自动故障转移。
- 可以做什么
- 一次调用即可把任意网址读取为 markdown 或截取屏幕截图
- 打开浏览器会话并导航、快照、点击、输入、等待、切换标签页、执行脚本和观察页面
- 从页面提取结构化内容,并在多步操作中截图
- 在云端、Docker 或本地 Chrome 供应商之间路由会话,支持自动故障转移与负载均衡
- 以加密配置文件保存 Cookie 与站点存储,并录制会话回放
- 适用场景
- 适合助手需要读取依赖 JavaScript 的页面、填写表单、登录或执行多步浏览器任务时;尤其适合希望用一个端点在多台浏览器供应商之间故障转移,或需要持久浏览器配置文件的场景。
- 运行要求
- 以 npm 包形式在本地运行(npx browser-gateway mcp),需要 Node.js;会自动检测并启动 Chrome,也可连接已有的 CDP 端点。多供应商路由需要 gateway.yml 配置文件。可选 BG_TOKEN 启用令牌认证;供应商 URL 可能自带令牌。
安装
在 SourceWeft 中
- 打开 控制台中的 Browser Gateway,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
browser-gateway
The open router for cloud browsers.
One endpoint that routes across every browser provider you use: automatic failover, persistent profiles, session replay, REST API, MCP server, dashboard.
Works unchanged with Puppeteer, Playwright, Stagehand, browser-use, and any MCP client.
[BrowserGateway is the #1 Tool of the Week on DevHunt]
[npm version] [npm downloads] [MIT license] [Node.js] [GitHub stars]
[Deploy on Railway] [Deploy to Render] [Deploy to DigitalOcean] [Deploy to Koyeb]
Website · Quick start · MCP · Profiles · Replays · REST API · Dashboard · Discord
Overview
One endpoint. Multiple providers. Automatic failover when one is saturated or goes down.
Your app connects to ws://gateway:9500/v1/connect. The gateway picks the best available provider based on health, capacity, and your routing strategy. Providers can be cloud CDP services, Docker containers, or local Chrome instances.
Dashboard
A web dashboard ships with every install. Open http://localhost:9500/web after starting the gateway.
Overview. Active sessions, queue depth, provider health, connection endpoint, and a copy-paste quickstart for Puppeteer, Playwright, Stagehand, browser-use, and raw CDP.
REST API. Run screenshot, content extraction, and structured scraping endpoints from a form-driven UI, with profile selection and parameter reference inline.
Playground. Drive any provider live from the browser. Pick a provider and profile, type into the canvas as if it were a local browser, and watch the remote session in real time.
Features
Routing & reliability
- Automatic failover - the next provider takes over the instant one fails, no client changes
- Five load-balancing strategies - priority chain, round-robin, least-connections, latency-optimized, weighted
- Per-provider concurrency limits - the gateway enforces
maxConcurrenton every backend - Request queue - connections wait when every provider is saturated instead of failing immediately
- Cooldown - failing providers are skipped and recover automatically after a TTL
- Health checks - periodic connectivity probes mark providers unhealthy before clients hit them
- Graceful shutdown - active sessions drain cleanly on SIGTERM and SIGINT
- Session reconnect - a dropped client reconnects with
?sessionId=<X-Session-Id>; on a provider that issues a resume token (browserserve with its resume window on) it gets the same browser back with its pages, cookies and storage, otherwise a new browser on the same provider - Webhooks - fire on provider down, recover, and queue-overflow events
REST API
- Screenshot -
POST /v1/screenshotreturns any URL as PNG or JPEG, full-page or scoped to a selector - Content extraction -
POST /v1/contentreturns markdown, plain text, HTML, or a cleaned article - Scrape -
POST /v1/scrapeextracts structured data via CSS selectors or full-page formats - Pooled sessions - browser connections are reused across requests, like a database pool
- Automatic retry - failed requests retry against a fresh page
Profiles — persistent browser state
- Survive across sessions - cookies and
localStorageare captured as you leave each page and on disconnect, and replayed on the next connect with the same id (IndexedDBtoo on browserserve) - Saved on any provider - every provider can load and save any profile; pin a provider to one profile only to route that profile's sessions there
- Profiles never mix - a browser that still holds a different profile is refused. Anything else already in a reused browser (from sessions without a profile) is saved with the profile
- One-line opt-in - add
?profile=acmeto the WebSocket URL, the rest is automatic - Encrypted at rest - AES-256-GCM with envelope encryption, anti-swap binding, and a scrypt-derived KEK
- Provider-agnostic - state is captured at the CDP level, so it replays against any provider
- Per-profile locking - concurrent connects to the same id return HTTP 409 to prevent corruption
- Export and import - encrypted
.bgpblobs are portable between gateway installs - One-click enable - the dashboard wizard generates a strong key in your browser and writes it to config
See the Profiles docs for the full guide, security model, REST endpoints, and limitations.
Session replay — see what the agent saw
- Frame-accurate visual record of every routed session, captured via CDP
Page.startScreencast - Zero injection - no script runs inside the customer page, capture is fully out-of-band
- Provider-agnostic - works with any backend that supports page screencast
- Dashboard player - scrub through the recorded frames, switch between captured browser targets
- Retention controls - configurable horizon, per-session byte cap, daily cleanup
See the Replays docs for the storage layout, REST endpoints, and tuning knobs.
MCP server for AI agents
- One-call tools -
fetch_pagereads any url as markdown andscreenshot_pagecaptures it, each in a single call that opens and closes its own browser - Session tools -
browser_session,browser_navigate,browser_snapshot,browser_act,browser_extract,browser_screenshot,browser_wait,browser_tabs,browser_evaluate,browser_observefor logins, forms and multi-step work - Fallback for coding agents - a Claude Code plugin sends Claude to
fetch_pagewhen its built-in web fetch is blocked, empty or needs JavaScript (/plugin marketplace add browser-gateway/browser-gateway); setup for Codex, Cursor and Gemini CLI in plugins/browser-gateway - Zero config - auto-detects Chrome and launches it on first tool use
- Concurrent sessions - every agent gets its own browser, no shared state
- Raw CDP - no Playwright or Puppeteer dependency
- Compatible - Claude Code, Cursor, and any MCP-compatible client
Computer use for Claude and Gemini
- Any browser for the model's own browser tool - runs Claude's browser and computer use tools and Gemini computer use on any provider behind the gateway
- About ten lines -
runClaudeLoop/runGeminiLooptake your own model call and handle actions, screenshots and results - Safe defaults - http and https only, private networks blocked, optional site allowlist, Gemini's confirm step for risky actions
- No extra dependencies -
browser-gateway/agent-tools/computer-use, tested on Node.js, Bun, Deno and the Cloudflare Workers runtime
Management
- Dashboard - manage providers, watch sessions, and edit config from the browser
- Provider CRUD - add, edit, delete, and test providers from the dashboard or API
- Config editor - edit
gateway.ymlin-browser with syntax highlighting and validation - Auth - token-based, with a secure HttpOnly cookie for the dashboard
- Protocol-agnostic - works with Playwright, Puppeteer, and any WebSocket protocol
Quick Start
As a WebSocket Proxy (for applications)
Create gateway.yml:
Connect from your app:
Or use the REST API — no WebSocket management needed:
These endpoints accept http and https URLs on public hosts only. Loopback,
link-local and private-range addresses are refused, and hostnames are resolved and
re-checked. To reach an internal host, list it under rest.allowedPrivateHosts in
gateway.yml.
Dashboard at http://localhost:9500/web.
As an MCP Server (for AI agents)
Add to your Claude Code or Cursor config:
No config files needed. The agent gets navigate, snapshot, screenshot, click, type, and evaluate tools through the gateway's routing layer.
See the MCP docs for all options.
Authentication
Set BG_TOKEN to require a token (or put it in a .env file):
- WebSocket clients pass the token as
?token=query param - API clients use
Authorization: Bearer <token>header - Dashboard shows a login form, sets a secure HttpOnly cookie
- Health endpoint (
/health) is always public
Without BG_TOKEN every /v1/* route is unauthenticated, so the gateway binds to
127.0.0.1 instead of all interfaces. Set a token (or set HOST explicitly) to
serve other machines. Without a token the gateway also refuses requests and
WebSocket upgrades whose Host is not a loopback name, which blocks DNS-rebinding
pages; BG_ALLOWED_HOSTS adds extra hostnames to that list.
The Docker image sets HOST=0.0.0.0, so a container started without BG_TOKEN
accepts connections from any network that can reach its port. Set BG_TOKEN
whenever the port is published beyond the local machine.
CLI
API
Docker
Recommended: Docker Compose. The bundled docker-compose.yml mounts a named volume for state and a read-only gateway.yml from the host.
Plain docker run:
Persistence
Everything the gateway writes to disk lives under a single directory, BG_DATA_DIR (defaults to /data inside the image). Mount that as a named volume or a bind mount and all state survives container restarts and image upgrades. Today it contains:
profiles/— encrypted profile blobs (when profiles are enabled)
Future versions may add more subdirectories under the same root (cooldown state, session snapshots, captures). Mounting BG_DATA_DIR as one volume keeps every subsystem persistent without follow-up config changes.
Upgrades
State lives in the volume, code lives in the image. Pull the new image, recreate the container — no data lost:
The container reads the same BG_DATA_DIR and the same gateway.yml. Profile blobs are versioned and the gateway reads older formats transparently.
Image tags
Images are multi-arch (linux/amd64, linux/arm64), signed with Sigstore build provenance, and ship an SBOM. Verify with the GitHub CLI:
How It Works
Sessions without profile / recording / observability (the default) take the byte-pipe fast lane:
- Client connects to
ws://gateway:9500/v1/connect - Gateway selects a provider using your routing strategy
- Gateway opens a raw TCP connection to the provider
- HTTP upgrade forwarded, provider responds with
101 Switching Protocols - Bidirectional TCP pipe:
client <-> gateway <-> provider - All WebSocket messages forwarded transparently (never parsed or modified)
- On disconnect: session cleaned up, slot released, metrics updated
- If all providers full: connection waits in a queue until a slot opens
Sessions with profile inject, session recording, live view, or observability (e.g. ?profile=X, ?session_record=true, /v1/live) run through a CDP-aware pipeline instead — one WebSocket per session, N plugins observing the wire. Same routing + failover, byte-perfect passthrough at rest, plugins only fire when their feature is requested. Architecture + plugin-authoring guide: docs/PIPELINE.md.
Self-hosted provider: browserserve
browserserve is the stack's own self-hosted browser server: one container that hands out isolated Chrome sessions over CDP. Add it like any other provider:
Because the gateway controls that runtime, a browserserve provider is auto-detected and unlocks two things no external provider gets:
- Auto capacity. You do not set
maxConcurrent. browserserve measures its host (memory, thread, and CPU limits) and advertises a safe ceiling, which the gateway adopts. The dashboard shows it as(auto). - Complete profiles. Every session is a fresh browser, and a saved profile carries the whole browser state, including IndexedDB and service workers. Other providers save cookies and site storage.
A common shape: browserserve as the primary provider on your own hardware, with a cloud provider at a lower priority for failover.
Works With
browser-gateway is compatible with existing browser tools. Just pass the gateway URL — it auto-resolves via /json/version.
AI Agent Frameworks:
Playwright MCP (all 70 Playwright tools through gateway routing):
Puppeteer / Playwright:
Documentation
Full docs live at docs.browsergateway.com.
- Getting Started
- Configuration Reference
- Supported Providers
- Profiles — Persistent Browser State
- Session Replays
- Session Lifecycle
- REST API
- MCP Server for AI Agents
- Computer Use (Claude and Gemini)
- CLI Reference
- Web Dashboard
- How Failover Works
- Load Balancing Strategies
- Request Queue
- Webhooks
- Docker Deployment
- Integrations — Playwright, Puppeteer, browser-use, Stagehand, Playwright MCP
Contributing
Contributions welcome. See CONTRIBUTING.md for guidelines.
License
MIT - see LICENSE.
Links
Contact
Questions, security reports, or partnership inquiries: [email protected].
来源:README.md,提交 69a3e63
工具
0版本历史
11- v0.4.35最新Nov 6, 2026
- v0.4.34Oct 20, 2026
- v0.4.33Oct 16, 2026
- v0.4.32Oct 13, 2026
- v0.4.31Oct 11, 2026
- v0.4.27Oct 8, 2026
- v0.4.25Sep 26, 2026
- v0.4.24Sep 24, 2026
- v0.4.23Sep 23, 2026
- v0.4.22Sep 20, 2026
- v0.4.21Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分