Google's official Chrome DevTools MCP server — gives AI agents full control of a live Chrome browser via Puppeteer and the Chrome DevTools Protocol.
Features
- Input automation — click, drag, fill forms, hover, press keys, upload files, handle dialogs
- Navigation — open/close/switch pages, wait for elements/network idle
- Screenshots & snapshots — capture page state visually and as DOM
- Performance traces — record and analyze Chrome performance traces with insights
- Network inspection — list/inspect network requests and responses
- Console debugging — read console messages with source-mapped stack traces
- Device emulation — emulate mobile devices, resize viewport
- Form automation — fill multiple form fields at once
Requirements
- Node.js v20.19+ (already available in OpenClaw)
- Chrome/Chromium browser
Quick Start
Install & verify
npx -y chrome-devtools-mcp@latest --help
Start the MCP server
# Standard (launches Chrome automatically)
npx -y chrome-devtools-mcp@latest
# Headless mode (for servers)
npx -y chrome-devtools-mcp@latest --headless
# Connect to existing Chrome (must be started with --remote-debugging-port=9222)
npx -y chrome-devtools-mcp@latest --browser-url=http://127.0.0.1:9222
# Disable telemetry
npx -y chrome-devtools-mcp@latest --no-usage-statistics --no-performance-crux
OpenClaw MCP Integration
Add to your openclaw.json under MCP servers:
{
"mcp": {
"servers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest", "--headless", "--no-usage-statistics"]
}
}
}
}
Or use the setup script:
python3 {baseDir}/scripts/setup_chrome_mcp.py setup
python3 {baseDir}/scripts/setup_chrome_mcp.py status
python3 {baseDir}/scripts/setup_chrome_mcp.py test
| Tool |
Description |
Key Params |
click |
Click an element |
uid (required), dblClick |
drag |
Drag element onto another |
from_uid, to_uid |
fill |
Type text into input/textarea/select |
uid, value |
fill_form |
Fill multiple form elements at once |
elements[] |
handle_dialog |
Accept/dismiss browser dialogs |
action (accept/dismiss) |
hover |
Hover over element |
uid |
press_key |
Press keyboard key |
key |
upload_file |
Upload file to input |
uid, paths[] |
| Tool |
Description |
Key Params |
navigate_page |
Go to URL |
url |
new_page |
Open new tab |
url |
close_page |
Close current tab |
— |
list_pages |
List all open tabs |
— |
select_page |
Switch to tab |
index |
wait_for |
Wait for element/network |
event, uid, timeout |
| Tool |
Description |
take_screenshot |
Capture page as image |
take_snapshot |
Get DOM/accessibility snapshot |
evaluate_script |
Run JavaScript in page |
list_console_messages |
Get console log entries |
get_console_message |
Get specific console message |
| Tool |
Description |
performance_start_trace |
Begin performance recording |
performance_stop_trace |
Stop and get trace data |
performance_analyze_insight |
AI analysis of trace |
| Tool |
Description |
list_network_requests |
List all network requests |
get_network_request |
Get request/response details |
| Tool |
Description |
emulate |
Emulate device (mobile, tablet) |
resize_page |
Change viewport size |
Common Workflows
Test a webpage
navigate_page → URL
take_snapshot → get element UIDs
click/fill → interact with elements
take_screenshot → capture result
navigate_page → URL
performance_start_trace
- Interact with page
performance_stop_trace
performance_analyze_insight
navigate_page → form URL
take_snapshot → identify form fields
fill_form → fill all fields at once
click → submit button
take_screenshot → verify result
Privacy Notes
- Google collects usage statistics by default — disable with
--no-usage-statistics
- Performance tools may send trace URLs to Google CrUX API — disable with
--no-performance-crux
- Avoid sharing sensitive data in browser sessions