From agents
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.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agents:chrome-devtoolsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are helping the user interact with websites using Chrome via the chrome-devtools MCP servers.
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.
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)
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.
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 outputAlways 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.
Use take_screenshot to capture what the page looks like. This is useful for:
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_for the content to appeartake_snapshottake_snapshot to identify form fieldsfill or fill_form to enter dataclick to submitUse evaluate_script for operations that don't have dedicated tools:
evaluate_script(expression: "document.title")
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.
The MCP server may not be running. Try:
claude mcp list --scope userIf 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>")
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.
Use take_snapshot to see the accessibility tree structure, then target elements by their accessible name or role.
take_snapshot over take_screenshot when you need to extract text content — it's faster and gives structured datatake_screenshot when you need to see visual layout or show the user what the page looks likechrome-devtools-visible instance opens a real browser window — useful for demos or debugging but slower to startProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub saturate/agents --plugin skill-router