name: ggl-chrome-devtools-mcp description: This skill provides workflows for Chrome browser automation, debugging, and performance analysis using ggl-chrome-devtools-mcp. Use when inspecting pages, debugging console errors, recording performance traces, or automating browser interactions.
This profile is separate from the user's main Chrome profile. It persists across sessions but is isolated for debugging.
Located outside .claude/ to avoid Claude Code crashes from Chrome's socket files.
curl -s http://127.0.0.1:9222/json/version
Response interpretation:
| Response | Meaning | Action |
|---|---|---|
JSON with "Browser": "Chrome/..." |
Chrome ready | Proceed with MCP tools |
| No response / connection refused | Port free | Start Chrome (see below) |
404 Not Found |
PORT CONFLICT - another process using 9222 | Follow port conflict recovery |
| Timeout | Something blocking | Follow port conflict recovery |
If port is free, start Chrome:
nohup /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir="$HOME/GitHub/chrome-debug-profile" \
--restore-last-session \
--no-first-run \
--disable-background-networking \
--disable-component-update \
>/dev/null 2>&1 &
Wait 3 seconds after starting, then proceed with MCP tools.
Do NOT:
- Kill the user's main Chrome browser (without debug profile)
- Use
/tmp/for the profile (not persistent) - Skip the pre-connection check and let MCP tools fail first
This indicates Node.js processes, stale Chrome instances, or other services occupying the port.
Step 1: Identify what's using the port
lsof -i :9222 2>/dev/null | head -10
Step 2: Interpret results and act
| Process | Safe to kill? | Action |
|---|---|---|
node |
YES | kill -9 <PID> - likely stale MCP server |
Google Chrome with debug profile path |
YES | This is our debug Chrome, restart it |
Google Chrome without debug profile |
NO | User's main browser - use different port |
Step 3: Kill conflicting processes (node or debug Chrome only)
# Kill specific PIDs identified in step 1
kill -9 <PID1> <PID2> 2>/dev/null; sleep 1
Step 4: Verify port is free
curl -s http://127.0.0.1:9222/json/version
# Should return "connection refused" or empty
Step 5: Start Chrome fresh
nohup /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir="$HOME/GitHub/chrome-debug-profile" \
--restore-last-session \
--no-first-run \
--disable-background-networking \
--disable-component-update \
>/dev/null 2>&1 &
sleep 3
Step 6: Verify Chrome is responding correctly
curl -s http://127.0.0.1:9222/json/version | head -1
# Must return JSON with "Browser": "Chrome/..."
- Debug a page - Inspect console errors, network requests, evaluate scripts
- Performance trace - Record and analyze page performance
- Automate interactions - Fill forms, click elements, navigate pages
- Inspect page - Get DOM structure, extract data, take snapshots
Wait for response before proceeding.
After reading the workflow, follow it exactly.
Tools: tool-catalog.md - Complete reference of all 26 MCP tools with parameters