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: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
idleTimeoutMinutesof 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):Per-Agent Configuration (pluginConfigs)
Beige supports per-agentpluginConfigs 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:pluginConfigsvalues 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
WhenexecutablePath is not set, the tool scans a list of well-known binary paths in order:
- Chrome paths —
/opt/google/chrome/chrome, beta/dev variants,/usr/bin/google-chrome[-stable] - Chromium paths (only if
fallbackToChromium: true) —/usr/bin/chromium,/usr/bin/chromium-browser, Snap, system lib, Flatpak
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:
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 theDISPLAY 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 :1already started). headlessmust not betrue— headless mode renders entirely in memory and ignoresDISPLAY.
: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
