Chrome DevTools Debugging
Debug web applications by connecting to Chrome's DevTools Protocol. This skill enables:
- Console inspection: View errors, warnings, and log messages
- Network analysis: Monitor XHR/fetch requests with full headers/body
- Performance tracing: Record and analyze performance traces
- JavaScript evaluation: Execute code in browser context
- Authenticated session debugging: Connect to existing logged-in browsers
When to Use This Skill
| Use Case | This Skill | browser-discovery | |----------|------------|-------------------| | Console error inspection | Yes | No | | Network request analysis | Yes | Limited | | Performance tracing | Yes | No | | Authenticated sessions | Yes | No | | Screenshots | No | Yes | | Form filling | No | Yes | | Basic navigation | Limited | Yes |
Setup Requirements
Option 1: Connect to Existing Chrome (Recommended)
Start Chrome with remote debugging enabled:
# Linux
google-chrome --remote-debugging-port=9222
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
Set the environment variable:
export CHROME_DEVTOOLS_URL=http://127.0.0.1:9222
Option 2: Chrome Auto-Connect (145+)
For Chrome 145+, enable remote debugging at chrome://inspect/#remote-debugging.
Progressive Disclosure Pattern
This skill uses progressive MCP disclosure for token efficiency:
Chrome DevTools MCP Server
|
v
Python Wrappers (.claude/ai-dev-kit/dev-tools/mcp_servers/chrome_devtools/)
|
v
Claude executes Python via Bash (on-demand)
|
v
Results returned (tools NOT in system prompt)
Benefits: 98%+ token reduction vs loading all MCP tools in system prompt.
Quick Examples
Get Console Errors
uv run python -c "
import sys; sys.path.insert(0, 'dev-tools')
from mcp_servers.chrome_devtools import console
errors = console.list_console_messages(types=['error'])
print(errors)
"
List Network Requests
uv run python -c "
import sys; sys.path.insert(0, 'dev-tools')
from mcp_servers.chrome_devtools import network
requests = network.list_network_requests(resource_types=['xhr', 'fetch'])
print(requests)
"
Execute JavaScript
uv run python -c "
import sys; sys.path.insert(0, 'dev-tools')
from mcp_servers.chrome_devtools import debug
title = debug.evaluate_script('document.title')
print(f'Page title: {title}')
"
Debug Authenticated Session
# 1. Log into the site manually in Chrome (started with --remote-debugging-port=9222)
# 2. Then analyze the authenticated state:
uv run python -c "
import sys; sys.path.insert(0, 'dev-tools')
from mcp_servers.chrome_devtools import navigation, network, debug
# List open tabs
pages = navigation.list_pages()
print(pages)
# Get auth tokens from localStorage
tokens = debug.evaluate_script('JSON.stringify(localStorage)')
print(f'localStorage: {tokens}')
# See recent API calls
api_calls = network.get_api_requests()
print(api_calls)
"
Available Tool Modules
console
list_console_messages(types, page_size, page_idx)- Get console outputget_console_message(message_id)- Get specific message detailsget_errors()- Convenience: get error messages onlyget_warnings()- Convenience: get warnings only
network
list_network_requests(resource_types, page_size, page_idx)- List requestsget_network_request(request_id)- Get full request/response detailsget_failed_requests()- Convenience: get 4xx/5xx requestsget_api_requests()- Convenience: get XHR/fetch requestsget_slow_requests(threshold_ms)- Convenience: get slow requests
performance
start_trace(reload, auto_stop)- Start recording tracestop_trace()- Stop and get trace dataget_insights()- Get available insight setsanalyze_insight(insight_set_id, insight_name)- AI-powered insight analysis
debug
evaluate_script(expression)- Execute JavaScript
navigation
navigate_page(url, nav_type, ignore_cache, timeout)- Navigate pagelist_pages()- List all tabsselect_page(page_idx, bring_to_front)- Switch to tab by indexnew_page(url, timeout)- Open new tabclose_page(page_idx)- Close tab by indexwait_for(text, timeout)- Wait for text on page
Red Flags
- Chrome not started with
--remote-debugging-port=9222 CHROME_DEVTOOLS_URLenvironment variable not set- Port 9222 blocked by firewall
- Trying to use for screenshots (use browser-discovery instead)
- MCP server not installed (
npx chrome-devtools-mcp@latest)
See Also
- reference.md - Full API documentation
- cookbook/console-debugging.md - Console debugging patterns
- cookbook/network-debugging.md - Network analysis patterns
browser-discoveryskill - For screenshots, basic automation- Chrome DevTools Protocol