Claude-skill-registry chrome-devtools-mcp
Testing UI and automating browsers via Chrome DevTools MCP. Use when taking screenshots, checking console errors, testing UI interactions, or verifying visual changes.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/chrome-devtools-mcp" ~/.claude/skills/majiayu000-claude-skill-registry-chrome-devtools-mcp && rm -rf "$T"
manifest:
skills/data/chrome-devtools-mcp/SKILL.mdsource content
Chrome DevTools MCP - UI Testing Skill
Auto-activation Triggers
English
- "test UI", "test the UI", "UI test"
- "open browser", "launch browser"
- "take screenshot", "capture screenshot"
- "check console errors", "any console errors"
- "test in browser", "verify in browser"
中文
- "測試 UI"、"UI 測試"、"測試畫面"
- "開瀏覽器"、"啟動瀏覽器"
- "截圖"、"擷取畫面"
- "檢查錯誤"、"有沒有錯誤"、"console 錯誤"
- "瀏覽器測試"、"在瀏覽器驗證"
Auto-trigger Scenarios
- User completed a feature and needs visual verification
- User asks to verify a UI change
- User wants to debug a visual issue
Prerequisites
Ensure Chrome DevTools MCP is configured in Claude Code:
claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest
Or with options:
# Headless mode (no UI) claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest --headless # Isolated session (clean browser state) claude mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest --isolated
Available MCP Tools (26 total)
Navigation & Pages
| Tool | Description |
|---|---|
| Open new page with URL |
| Navigate to URL, back, forward, reload |
| List all open pages |
| Select page by index |
| Close page by index |
| Wait for text to appear |
Input & Interaction
| Tool | Description |
|---|---|
| Click element by uid |
| Fill input/textarea/select |
| Fill multiple form elements |
| Hover over element |
| Drag element to another |
| Press key or combination |
| Accept/dismiss browser dialogs |
| Upload file through input |
Debugging & Inspection
| Tool | Description |
|---|---|
| Get page A11y tree with UIDs |
| Capture page/element screenshot |
| Run JavaScript in page |
| List console messages |
| Get specific console message |
Network
| Tool | Description |
|---|---|
| List network requests |
| Get request details |
Performance
| Tool | Description |
|---|---|
| Start performance trace |
| Stop trace recording |
| Analyze performance insights |
Emulation
| Tool | Description |
|---|---|
| Emulate network/CPU throttling |
| Resize viewport |
Common UI Testing Patterns
1. Basic Page Verification
1. take_snapshot → Get page structure with element UIDs 2. take_screenshot → Visual verification 3. list_console_messages → Check for errors
2. Form Testing Flow
1. new_page → Open target URL 2. take_snapshot → Get form element UIDs 3. fill_form → Fill all form fields 4. click → Submit button 5. wait_for → Wait for success message 6. take_screenshot → Capture result
3. Interactive Component Testing
1. take_snapshot → Get element UIDs 2. click → Trigger component action 3. take_snapshot → Verify state change 4. list_console_messages → Check for errors
4. Responsive Design Testing
1. resize_page → Set mobile viewport (375x667) 2. take_screenshot → Mobile view 3. resize_page → Set tablet viewport (768x1024) 4. take_screenshot → Tablet view 5. resize_page → Set desktop viewport (1920x1080) 6. take_screenshot → Desktop view
5. Performance Audit
1. performance_start_trace → Begin recording 2. navigate_page → Load page 3. performance_stop_trace → End recording 4. performance_analyze_insight → Get CWV scores
6. Network Request Verification
1. navigate_page → Load page 2. list_network_requests → See all requests 3. get_network_request → Check specific API response
Workflow: Post-Feature UI Verification
When you complete a feature that requires UI testing:
Step 1: Start Browser
Use: mcp__chrome-devtools__new_page URL: http://localhost:{PORT}/path-to-feature Common ports: - Next.js: 3000 or custom (this project: 1408) - Vite: 5173 - Angular: 4200
Step 2: Take Snapshot (ALWAYS do this first)
Use: mcp__chrome-devtools__take_snapshot This returns element UIDs needed for interactions
Step 3: Interact with Elements
Use element UIDs from snapshot to: - click buttons - fill forms - hover for tooltips
Step 4: Verify Results
- take_screenshot for visual verification - list_console_messages for error checking - take_snapshot for DOM state verification
Error Handling
Navigation Timeout
If
navigate_page times out:
- Check if dev server is running
- Use
instead ofnew_pagenavigate_page - Increase timeout:
timeout: 30000
Element Not Found
If click/fill fails:
- Re-run
to get latest UIDstake_snapshot - Verify element is within viewport
- Use
to wait for element to appearwait_for
Page Not Loading
If page fails to load:
- Verify URL is correct
- Check dev server logs
- Try
withnavigate_pagetype: "reload"
Tips
- Always take_snapshot first - You need element UIDs before interacting
- Prefer snapshot over screenshot - Faster and provides actionable data
- Check console after interactions - Catch runtime errors early
- Use wait_for after navigation - Ensure page is loaded before interacting
- Filter network requests - Use resourceTypes to focus on API calls
- Re-snapshot after interactions - UIDs may change after DOM updates
Quick Reference
# Open dev server and test mcp__chrome-devtools__new_page → http://localhost:{PORT} # Get page structure mcp__chrome-devtools__take_snapshot # Interact (use UID from snapshot) mcp__chrome-devtools__click → uid: "abc123" mcp__chrome-devtools__fill → uid: "input1", value: "test" # Verify mcp__chrome-devtools__take_screenshot mcp__chrome-devtools__list_console_messages → types: ["error", "warn"]
Complete Example: Testing a Login Form
Complete login form testing workflow:
Step 1: Open login page ──────────────────── mcp__chrome-devtools__new_page url: "http://localhost:3000/login" Step 2: Get page structure ──────────────────── mcp__chrome-devtools__take_snapshot Output: uid=1_10 textbox "Email" uid=1_15 textbox "Password" uid=1_20 button "Sign In" Step 3: Fill form ──────────────────── mcp__chrome-devtools__fill_form elements: [ { uid: "1_10", value: "test@example.com" }, { uid: "1_15", value: "password123" } ] Step 4: Click login ──────────────────── mcp__chrome-devtools__click uid: "1_20" Step 5: Wait for result ──────────────────── mcp__chrome-devtools__wait_for text: "Welcome" timeout: 5000 Step 6: Verify ──────────────────── mcp__chrome-devtools__take_screenshot → Verify UI is correct mcp__chrome-devtools__list_console_messages → Check for errors types: ["error", "warn"] Step 7: Check API requests (optional) ──────────────────── mcp__chrome-devtools__list_network_requests resourceTypes: ["fetch", "xhr"]
Responsive Testing Example
Test responsive design across breakpoints:
# Mobile (iPhone SE) mcp__chrome-devtools__resize_page → width: 375, height: 667 mcp__chrome-devtools__take_screenshot # Tablet (iPad) mcp__chrome-devtools__resize_page → width: 768, height: 1024 mcp__chrome-devtools__take_screenshot # Desktop mcp__chrome-devtools__resize_page → width: 1920, height: 1080 mcp__chrome-devtools__take_screenshot