Chrome devtools
Automates headless Chrome via MCP for web scraping, screenshots, testing, and browser interactions. Handles multi-instance server selection to avoid lock conflicts between parallel agents. Triggers when browsing a website, taking a screenshot, scraping a page, testing a web app, automating browser interactions, or when chrome-devtools MCP tools are needed.From its SKILL.md
npx -y skills add Saturate/skills --skill chrome-devtoolsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.4 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it
You are helping the user interact with websites using Chrome via the chrome-devtools MCP servers.
There are 4 isolated server instances available. You must pick a free one before doing any browser work.
Progress Checklist
Copy this checklist to track your progress through the workflow:
Chrome DevTools Progress:
- [ ] Step 1: Selected an available server instance
- [ ] Step 2: Loaded required MCP tools via ToolSearch
- [ ] Step 3: Performed the requested browser task
- [ ] Step 4: Cleaned up (closed pages)
Step 1: Select an Available Server
There are 4 MCP server instances — 3 headless and 1 visible (opens a real browser window):
| Instance | Tool prefix | Mode |
|---|---|---|
| 1 | mcp__chrome-devtools__* | Headless |
| 2 | mcp__chrome-devtools-2__* | Headless |
| 3 | mcp__chrome-devtools-3__* | Headless |
| visible | mcp__chrome-devtools-visible__* | Visible |
When to use visible: Use chrome-devtools-visible when the user asks to see the browser, needs to debug visually, or wants to watch automation in real-time. Default to headless instances for everything else.
To find a free instance, check each server's list_pages tool (e.g. mcp__chrome-devtools__list_pages). Load them via ToolSearch:
ToolSearch: "+chrome-devtools list_pages"
Then call list_pages on each instance. A server is free if it only has the default about:blank page (or returns no pages). A server is busy if it has pages with real URLs.
Check headless servers in order (1 → 2 → 3) and use the first free one. Only use visible if the user explicitly asks for it or all headless instances are busy.
If all 4 are busy, tell the user:
"All chrome-devtools instances are currently in use. Wait for another task to finish or add more instances."
CRITICAL: Never run parallel Task agents on the same server instance. Each agent must claim its own instance.
Step 2: Load MCP Tools
Once you've picked a server (e.g. instance 2), load the tools you need via ToolSearch using the correct prefix:
ToolSearch: "+chrome-devtools-2 navigate"
ToolSearch: "+chrome-devtools-2 screenshot"
Common tools available on each instance (shown for instance 1, substitute prefix for others):
mcp__chrome-devtools__navigate_page— Navigate to a URLmcp__chrome-devtools__take_screenshot— Capture the current pagemcp__chrome-devtools__take_snapshot— Get the DOM/accessibility snapshot (useful for scraping text content)mcp__chrome-devtools__click— Click an elementmcp__chrome-devtools__fill— Fill a form fieldmcp__chrome-devtools__fill_form— Fill multiple form fieldsmcp__chrome-devtools__evaluate_script— Run JavaScript on the pagemcp__chrome-devtools__press_key— Press a keyboard keymcp__chrome-devtools__wait_for— Wait for an element or conditionmcp__chrome-devtools__new_page— Open a new page/tabmcp__chrome-devtools__close_page— Close a page/tabmcp__chrome-devtools__list_pages— List open pagesmcp__chrome-devtools__list_network_requests— Monitor network trafficmcp__chrome-devtools__list_console_messages— Read console output
Step 3: Perform the Browser Task
Navigation
Always start by navigating to the target URL:
navigate_page(url: "https://example.com")
After navigation, take a screenshot or snapshot to verify the page loaded correctly.
Taking Screenshots
Use take_screenshot to capture what the page looks like. This is useful for:
- Verifying a page loaded correctly
- Debugging layout issues
- Showing the user what you see
Scraping Content
Use take_snapshot to get a structured text representation of the page. This gives you the accessibility tree which is more useful than raw HTML for extracting content.
For dynamic content, you may need to:
wait_forthe content to appear- Then
take_snapshot
Form Interaction
- Use
take_snapshotto identify form fields - Use
fillorfill_formto enter data - Use
clickto submit
Running JavaScript
Use evaluate_script for operations that don't have dedicated tools:
evaluate_script(expression: "document.title")
Step 4: Clean Up
Always close pages when done. There is no auto-timeout on these servers.
close_page(pageId: "<id>")
If you opened multiple pages, close all of them. Use list_pages to verify nothing is left behind.
Troubleshooting
Server won't respond / tools not loading
The MCP server may not be running. Try:
- Check if the server is listed:
claude mcp list --scope user - Restart Claude Code session to reinitialize MCP connections
Stale pages from a previous session
If list_pages shows pages that aren't yours (leftover from a crashed session), close them before starting your work:
close_page(pageId: "<stale-page-id>")
Navigation timeout
Some pages take a long time to load. Use wait_for with a selector to wait for specific content instead of relying on page load completion.
Can't find an element
Use take_snapshot to see the accessibility tree structure, then target elements by their accessible name or role.
Tips
- Prefer
take_snapshotovertake_screenshotwhen you need to extract text content — it's faster and gives structured data - Use
take_screenshotwhen you need to see visual layout or show the user what the page looks like - For SPAs, wait for content to render after navigation before taking snapshots
- If a page requires authentication, let the user know — headless browsers start with no session/cookies
- Each server instance has its own isolated browser profile, so cookies and state are not shared between instances
- The
chrome-devtools-visibleinstance opens a real browser window — useful for demos or debugging but slower to start
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.