Drive a real Chromium browser from the runtime AI via Microsoft's official @playwright/mcp server. Use this when fetch-jina (cheapest) and fetch-crawl4ai (depth + basic JS) still cannot reach the content — typically because the page requires clicking, typing, scrolling, waiting for an event, or capturing a screenshot.
Architecture (why there is no Python file in this skill)
This skill is documentation-only. The runtime AI calls playwright-mcp tools directly through its MCP client — autosearch does not wrap them. The skill exists so the runtime AI knows:
- When to reach for Playwright (vs. fetch-jina / fetch-crawl4ai).
- How to install
@playwright/mcp. - Which MCP tools to call for common web-research patterns.
Install
Register with your MCP client. For Claude Code, prefer claude mcp add (writes to ~/.claude.json); for project-scoped config use <project>/.mcp.json. Cursor reads ~/.cursor/mcp.json; Zed reads <project>/.zed/mcp.json. Schema for any of them:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
On first run, npx will download @playwright/mcp and Playwright will install a Chromium bundle. No API keys. Works offline for local pages.
Common Tool Calls (as used by the runtime AI)
Tool names below come from @playwright/mcp. Exact schemas are served by the MCP server itself; the runtime AI enumerates them via the MCP client.
browser_navigate(url)— go to a URL.browser_snapshot()— accessibility tree of the current page (cheap text form, no screenshot).browser_click(ref)/browser_type(ref, text)/browser_press_key(key)— interact with elements from the snapshot.browser_wait_for(text | time | element)— wait for an event or selector.browser_take_screenshot()— capture the current page as an image.browser_evaluate(script)— run custom JS (use sparingly).browser_network_requests()/browser_console_messages()— inspection.browser_tabs(...)— open, list, select, close tabs.browser_close()— release the browser.
When to Use
- Page requires clicking a "Show more" / "Accept cookies" before content renders.
- Login-gated content where the user has supplied a session (via storage state).
- Infinite-scroll feed where lazy-load fires on scroll.
- Verifying a production flow where screenshots are the deliverable.
- Debugging network / console errors on a third-party page.
When NOT to Use
- Static article, documentation, blog post →
fetch-jinais cheaper. - Lightly JS-rendered page that works with plain crawl →
fetch-crawl4ai. - Paid, hardened anti-bot site →
fetch-firecrawl(paid) may still succeed where an ordinary Chromium cannot.
Limits
@playwright/mcprequires Node.js >= 18 and writes a Playwright browser bundle to the user's cache on first run (~200 MB).- Long sessions consume memory; the runtime AI should call
browser_close()when a task ends. - Headful mode requires a desktop; CI / headless servers must use the default headless mode.
- Cookie / profile / storage state setup is the caller's responsibility (see
@playwright/mcpdocs forstorageState).
Downgrade / Upgrade Chain
- Below:
fetch-crawl4ai(Playwright, same browser engine but no interactive control) →fetch-jina(HTTP Markdown only). - Above:
fetch-firecrawl(paid, stronger anti-bot and managed infra).
This tool does not produce a summary. The runtime AI processes the tool outputs directly; autosearch provides only the routing guidance in this SKILL.md.
Quality Bar
- Evidence items have non-empty title and url.
- No crash on empty or malformed API response.
- Source channel field matches the channel name.