@playwright/mcp degraded
npx -y @playwright/mcp@latest --headlessClean install pass
Fresh npm/uv cache, start over stdio (or connect for remote URLs), initialize + tools/list, on GitHub-hosted Linux, macOS and Windows runners.
| Host | Status | Node | Server | Tools | Time | Result |
|---|---|---|---|---|---|---|
| local macOS (local probe) | pass | v22.23.2 | Playwright 1.63.0-alpha-2026-08-31 | 24 | 6.6 s | 24 tools in 6.6 s |
Client compatibility pass
Cursor and VS Code embed the official TypeScript SDK client; their chips are inferred from the TypeScript SDK rows (no GUI automation). Claude Code is verified with a claude mcp list health check — a real handshake over its own transport.
| Client | local macOS |
|---|---|
| TypeScript SDK client (current) v1.30.0 embedded by Cursor, VS Code, Claude Desktop, Windsurf | pass 24 tools via ts-sdk 1.30.0 |
| TypeScript SDK client (previous minor) v1.29.0 embedded by Cursor, VS Code | pass 24 tools via ts-sdk 1.29.0 |
| Python SDK client (current) v2.1.1 | pass 24 tools via mcp 2.1.1 |
| Python SDK client (previous minor) v2.0.1 | pass 24 tools via mcp 2.0.1 |
| Claude Code (`claude mcp list`) v2.1.196 embedded by Claude Code | pass Claude Code 2.1.196 connected (24 tools in the catalog) |
OAuth conformance n/a
Package specs run over stdio; there is no HTTP endpoint to authorize.
Tool catalog pass
24 tools · hash 9f7489d4fe8c3ec0 · captured 6 d ago · Playwright 1.63.0-alpha-2026-08-31
| Tool | Description | Arguments |
|---|---|---|
browser_click | Perform click on a web page | 5 (1 required) |
browser_close | Close the page | 0 |
browser_console_messages | Returns all console messages | 3 (1 required) |
browser_drag | Perform drag and drop between two elements | 4 (2 required) |
browser_drop | Drop files or MIME-typed data onto an element, as if dragged from outside the page. At least one of "paths" or "data" must be provided. | 4 (1 required) |
browser_evaluate | Evaluate JavaScript expression on page or element | 4 (1 required) |
browser_file_upload | Upload one or multiple files | 1 |
browser_fill_form | Fill multiple form fields | 1 (1 required) |
browser_find | Search the accessibility snapshot of the current page for text or a regular expression. Returns matching snapshot nodes with a few lines of … | 2 |
browser_handle_dialog | Handle a dialog | 2 (1 required) |
browser_hover | Hover over element on page | 2 (1 required) |
browser_navigate | Navigate to a URL | 1 (1 required) |
browser_navigate_back | Go back to the previous page in the history | 0 |
browser_network_request | Returns full details (headers and body) of a single network request, or a single part if `part` is set. Use the number from browser_network_… | 3 (1 required) |
browser_network_requests | Returns a numbered list of network requests since loading the page. Use browser_network_request with the number to get full details. | 3 (1 required) |
browser_press_key | Press a key on the keyboard | 1 (1 required) |
browser_resize | Resize the browser window | 2 (2 required) |
browser_run_code_unsafe | Run a Playwright code snippet. Unsafe: executes arbitrary JavaScript in the Playwright server process and is RCE-equivalent. | 2 |
browser_select_option | Select an option in a dropdown | 3 (2 required) |
browser_snapshot | Capture accessibility snapshot of the current page, this is better than screenshot | 4 |
browser_tabs | List, create, close, or select a browser tab. | 3 (1 required) |
browser_take_screenshot | Take a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions. | 6 (1 required) |
browser_type | Type text into editable element | 5 (2 required) |
browser_wait_for | Wait for text to appear or disappear or a specified time to pass | 3 |
Error ergonomics warn 22/100
10 malformed inputs per tool (missing/mistyped/null/out-of-range/unknown fields …). Each error response is graded on code · cause · fix · retryable; 24 distinct error shapes graded by the judge ($0.0000), cached.
| Tool | Score | Errors | Accepted | Cases |
|---|---|---|---|---|
browser_click | 25/100 | 10 | 0 | 10 |
browser_close | 75/100 | 5 | 5 | 10 |
browser_console_messages | 35/100 | 10 | 0 | 10 |
browser_drag | 20/100 | 10 | 0 | 10 |
browser_drop | 15/100 | 10 | 0 | 10 |
browser_evaluate | 15/100 | 10 | 0 | 10 |
browser_file_upload | 20/100 | 10 | 0 | 10 |
browser_fill_form | 35/100 | 10 | 0 | 10 |
browser_find | 5/100 | 10 | 0 | 10 |
browser_handle_dialog | 25/100 | 10 | 0 | 10 |
browser_hover | 10/100 | 10 | 0 | 10 |
browser_navigate | 23/100 | 10 | 0 | 10 |
browser_navigate_back | 38/100 | 10 | 0 | 10 |
browser_network_request | 30/100 | 10 | 0 | 10 |
browser_network_requests | 10/100 | 10 | 0 | 10 |
browser_press_key | 23/100 | 10 | 0 | 10 |
browser_resize | 40/100 | 10 | 0 | 10 |
browser_run_code_unsafe | 5/100 | 10 | 0 | 10 |
browser_select_option | 18/100 | 10 | 0 | 10 |
browser_snapshot | 10/100 | 10 | 0 | 10 |
browser_tabs | 35/100 | 10 | 0 | 10 |
browser_take_screenshot | 25/100 | 10 | 0 | 10 |
browser_type | 23/100 | 10 | 0 | 10 |
browser_wait_for | 8/100 | 10 | 0 | 10 |
Weakest errors
| Tool · case | Grade | Response |
|---|---|---|
browser_console_messagesrequired field `level` missing | ✗ code · ✗ cause · ✗ fix · ✗ retryable llm | ### Error Error: browserBackend.callTool: Target page, context or browser has been closed |
browser_handle_dialog`promptText` is a 20000-character string | ✗ code · ✗ cause · ✗ fix · ✗ retryable llm | ### Error Error: browserBackend.callTool: Protocol error (Target.createTarget): Failed to open a new tab |
browser_evaluate`target` is an empty string | ✗ code · ✗ cause · ✗ fix · ✗ retryable llm | ### Error Error: browserBackend.callTool: Target page, context or browser has been closed Browser logs: <launching> /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --disable-field-trial-config --disable-background-networking --disable-background-timer-throttling --disable-backgrounding… |
browser_wait_for`time` is negative | ✗ code · ✗ cause · ✗ fix · ✗ retryable llm | ### Error Error: No open pages available. |
browser_resize`width` is negative | ✗ code · ✓ cause · ✗ fix · ✗ retryable llm | ### Error Error: browserBackend.callTool: viewportSize.height: expected integer, got float 1.5 |
browser_resize`height` is negative | ✗ code · ✓ cause · ✗ fix · ✗ retryable llm | ### Error Error: browserBackend.callTool: viewportSize.width: expected integer, got float 1.5 |
browser_resizeempty arguments {} | ✗ code · ✓ cause · ✗ fix · ✗ retryable heuristic | ### Error Invalid arguments for tool "browser_resize": ✖ Invalid input: expected number, received undefined → at width ✖ Invalid input: expected number, received undefined → at height |
browser_console_messages`all` has the wrong type ("yes") | ✗ code · ✓ cause · ✗ fix · ✗ retryable heuristic | ### Error Invalid arguments for tool "browser_console_messages": ✖ Invalid input: expected boolean, received string → at all |
Protocol conformance n/a
Not applicable to stdio package specs.
Badge
[](https://agentwares-agentcheck.vercel.app/mcpcheck/demo/playwright)
Machine-readable: report.json · trust.json