| name | browser-devtools-cli |
| description | Automates browser interactions using Playwright for web testing, debugging, and automation. Use when the user needs to navigate websites, take screenshots, fill forms, click elements, extract page content (HTML/text), audit accessibility (ARIA/AX tree), measure Web Vitals performance, monitor console logs and HTTP requests, mock API responses, execute JavaScript in browser, inspect React components, compare UI with Figma designs, or perform non-blocking debugging with tracepoints, logpoints, and exception monitoring. |
| allowed-tools | Bash(browser-devtools-cli:*) |
Browser DevTools CLI
Command-line interface for browser automation, debugging, and testing using Playwright. This CLI is for the browser platform; for Node.js backend debugging, use node-devtools-cli (see node-devtools-cli skill).
Installation
npm install -g browser-devtools-mcp
Quick Start
browser-devtools-cli navigation go-to --url "https://example.com"
browser-devtools-cli content take-screenshot --name "homepage"
browser-devtools-cli content get-as-text
Ref-based workflow (recommended for AI agents): Call a11y take-aria-snapshot first to get refs (e1, e2, ...), then use refs in interaction click --selector "e1" or content take-screenshot --annotate for numbered element labels.
Global Options
| Option | Description | Default |
|---|
--port <number> | Daemon server port | 2020 |
--session-id <string> | Session ID for browser state persistence | auto |
--json | Output results as JSON (recommended for AI) | false |
--quiet | Suppress log messages | false |
--verbose | Enable debug output | false |
--timeout <ms> | Operation timeout | 30000 |
--headless | Run browser in headless mode | true |
--no-headless | Run browser with visible window | - |
--persistent | Preserve cookies/localStorage | false |
--no-persistent | Clear state on session end | - |
--user-data-dir <path> | Browser user data directory | OS temp |
--use-system-browser | Use system Chrome | false |
--browser-path <path> | Custom browser path | auto |
AI Agent Recommended Options:
browser-devtools-cli --json --quiet --session-id "my-session" <command>
Tool Domains
The CLI provides tools organized by domain:
| Domain | Description | Reference |
|---|
| navigation | Page navigation (go-to, back, forward, reload) | |
| content | Content extraction (screenshot, PDF, HTML, text) | |
| interaction | User interactions (click, fill, hover, scroll) | |
| a11y | Accessibility snapshots (ARIA, AX tree) | |
| o11y | Observability (Web Vitals, console, HTTP, traces) | |
| debug | Non-blocking debugging (tracepoints, logpoints, exceptions) | |
| stub | HTTP mocking (intercept, mock, clear) | |
| sync | Synchronization (wait for network idle) | |
| react | React DevTools integration | |
| figma | Figma design comparison | |
| execute | Batch JavaScript execution (run execute; VM has page, callTool) | |
Execute is available in both CLI and MCP. Use it to run JavaScript and batch tool calls: CLI run execute --code "<js>" (optionally --timeout-ms); MCP tool execute with the same params. Inside the VM: page (browser only) — Playwright Page; use await page.title(), await page.evaluate(...), etc. callTool(name, input, returnOutput?) — invoke any tool; always await; name is underscore form (e.g. 'navigation_go-to'); input is an object (camelCase keys); returnOutput: true adds the result to the response toolOutputs. See execute reference for full bindings and args.
CLI Management Commands
Daemon Management
browser-devtools-cli daemon status
browser-devtools-cli daemon info
browser-devtools-cli daemon start
browser-devtools-cli daemon stop
browser-devtools-cli daemon restart
Session Management
browser-devtools-cli session list
browser-devtools-cli session info <session-id>
browser-devtools-cli session delete <session-id>
Tool Discovery
browser-devtools-cli tools list
browser-devtools-cli tools search <query>
browser-devtools-cli tools info <tool-name>
Configuration
browser-devtools-cli config
Updates
browser-devtools-cli update --check
browser-devtools-cli update
Examples
Basic Navigation and Screenshot
browser-devtools-cli navigation go-to --url "https://example.com"
browser-devtools-cli content take-screenshot --name "homepage"
browser-devtools-cli content get-as-text
Form Automation
SESSION="--session-id login-test"
browser-devtools-cli $SESSION navigation go-to --url "https://app.example.com/login"
browser-devtools-cli $SESSION interaction fill --selector "#email" --value "user@example.com"
browser-devtools-cli $SESSION interaction fill --selector "#password" --value "password123"
browser-devtools-cli $SESSION interaction click --selector "button[type=submit]"
browser-devtools-cli $SESSION sync wait-for-network-idle
browser-devtools-cli $SESSION content take-screenshot --name "dashboard"
Performance Analysis
browser-devtools-cli navigation go-to --url "https://example.com"
browser-devtools-cli --json o11y get-web-vitals
browser-devtools-cli --json o11y get-console-messages --type warning
browser-devtools-cli --json o11y get-http-requests
Accessibility Audit
browser-devtools-cli navigation go-to --url "https://example.com"
browser-devtools-cli a11y take-aria-snapshot
browser-devtools-cli --json a11y take-ax-tree-snapshot --roles button,link,textbox
Batch Execution (execute)
browser-devtools-cli run execute --code "return await page.title();"
browser-devtools-cli run execute --code "await callTool('a11y_take-aria-snapshot', {}, true); await callTool('content_take-screenshot', {}, true);"
API Mocking
browser-devtools-cli stub mock-http-response \
--pattern "**/api/users" \
--body '[{"id": 1, "name": "Test User"}]'
browser-devtools-cli navigation go-to --url "https://app.example.com"
browser-devtools-cli stub clear
Non-Blocking Debugging
SESSION="--session-id debug-session"
browser-devtools-cli $SESSION navigation go-to --url "http://localhost:3000"
browser-devtools-cli $SESSION debug put-tracepoint \
--url-pattern "app.js" \
--line-number 42
browser-devtools-cli $SESSION debug add-watch --expression "this"
browser-devtools-cli $SESSION debug put-exceptionpoint --state uncaught
browser-devtools-cli $SESSION interaction click --selector "#submit-btn"
browser-devtools-cli $SESSION --json debug get-probe-snapshots
browser-devtools-cli $SESSION --json debug get-probe-snapshots --types tracepoint,exceptionpoint
Shell Script for CI/CD
#!/bin/bash
set -e
CLI="browser-devtools-cli --json --quiet --session-id ci-test-$$"
$CLI navigation go-to --url "https://example.com"
$CLI sync wait-for-network-idle
$CLI content take-screenshot --name "ci-test"
VITALS=$($CLI o11y get-web-vitals)
echo "Web Vitals: $VITALS"
ERRORS=$($CLI o11y get-console-messages --type error)
if [ "$ERRORS" != "[]" ]; then
echo "Console errors found: $ERRORS"
exit 1
fi
$CLI session delete "ci-test-$$"
Interactive Mode (Human Users)
For manual exploration, an interactive REPL mode is available:
browser-devtools-cli interactive
browser-devtools-cli --no-headless interactive
| Command | Description |
|---|
help | Show available commands |
exit, quit | Exit interactive mode |
<domain> <tool> | Execute a tool |
Shell Completions
browser-devtools-cli completion bash
echo 'eval "$(browser-devtools-cli completion bash)"' >> ~/.bashrc
browser-devtools-cli completion zsh
echo 'eval "$(browser-devtools-cli completion zsh)"' >> ~/.zshrc