Skip to main content
Control a Chrome browser from within Beige agents. Wraps chrome-devtools-mcp — giving agents full access to navigation, DOM inspection, JavaScript evaluation, screenshots, network monitoring, and performance analysis. Each agent gets its own persistent Chrome profile.

Installation

Install this tool individually:
Or install all tools from the toolkit:

Configuration

All MCP tools are permitted by default (no allow/deny restrictions). The browser launches lazily on first use and auto-closes after the idle timeout.

Prerequisites

Browser Process Lifecycle

  • Lazy start: Browser only starts on the first tool call.
  • Persistent per agent: One process per agent, reused across all calls.
  • Idle timeout: Process killed after idleTimeoutMinutes of inactivity (default: 30). Next call respawns it.
  • Crash recovery: If Chrome crashes, the next call starts a fresh browser automatically.
  • Profile persistence: ~/.beige/browser-profiles/<agentName>/ is never deleted — logins and storage survive restarts.

Config Examples

Read-only browser agent (can inspect but not interact):
Slim headless agent (minimal token usage, no visible window):
Fallback mode (display if available, headless otherwise — the default):
No JavaScript evaluation (automation without script injection):

Per-Agent Configuration (pluginConfigs)

Beige supports per-agent pluginConfigs overrides that are deep-merged with the top-level tool config. This lets you share one Chrome tool definition but give each agent different capabilities:
Note: pluginConfigs values are deep-merged with the top-level config. In the example above, the QA agent’s effective config is { headless: false, timeout: 120 } — the overrides replace the baseline values, while other baseline settings are preserved.

Browser Detection & Chromium Fallback

When executablePath is not set, the tool scans a list of well-known binary paths in order:
  1. Chrome paths/opt/google/chrome/chrome, beta/dev variants, /usr/bin/google-chrome[-stable]
  2. Chromium paths (only if fallbackToChromium: true)/usr/bin/chromium, /usr/bin/chromium-browser, Snap, system lib, Flatpak
The first path that exists on disk wins. If nothing is found, chrome-devtools-mcp falls back to its own built-in discovery (which typically finds Chrome via which google-chrome). To pin a specific binary regardless of what is installed:
To disable the Chromium fallback entirely (fail if Chrome is not present):

VNC / Virtual Displays (Linux)

On Linux you can route the browser window to a specific TigerVNC (or other X11) virtual screen instead of the physical display. This is useful when the gateway host is headless but you still want a visible, interactive browser session inside a VNC framebuffer. How it works: the tool sets the DISPLAY environment variable on the chrome-devtools-mcp child process, which inherits it into the Chrome subprocess. Chrome then connects to the specified X11 server. Requirements:
  • A running VNC server for the target display (e.g. tigervncserver :1 already started).
  • headless must not be true — headless mode renders entirely in memory and ignores DISPLAY.
Config:
Or pin to always use the display (will error if the VNC server is not running):
Use :2, :3, … for additional VNC sessions. If display is omitted, the browser inherits the gateway process’s own DISPLAY (or none, if the gateway has no display set).
Note: The agent cannot choose or change the display at runtime — display is a static gateway-operator configuration. This is intentional: display routing is infrastructure, not agent behaviour.

Security Model

Error Reference

Implementation Details

  • Target: Gateway (runs on the host, not in the sandbox)
  • Dependency: Chrome, Node.js, npx
  • Protocol: MCP (Model Context Protocol) over stdio to chrome-devtools-mcp