MCP server for headless browser automation with Playwright
mcp-browser provides a functional browser automation toolkit with generally well-structured tool definitions. All 13 tools have explicit registrations with input schemas and descriptions. However, there are significant gaps in output schema documentation, missing parameter descriptions in several tools, and weak error handling guidance. The descriptions are adequate but generic (averaging ~80 chars), and several tools lack details about expected return formats and error conditions. Naming is clear and verb-prefixed throughout, but parameter descriptions are inconsistent, some tools have detailed param docs while others are sparse.
Click on an element
Download files from the page
Execute JavaScript on the page
Extract text content from elements
Fill out a form with multiple fields
Get current page information (title, URL, etc.)
Intercept and monitor network requests
No output schemas documented for any tool. LLMs cannot predict what fields are returned or plan downstream tool chains. E.g., browser_navigate returns success/failure but structure is undocumented. browser_extract_text returns text but format (string vs array) is unclear from schema alone.
Parameter descriptions are generic and lack actionable constraints. E.g., browser_scroll's 'pixels' param has no min/max bounds documented (should be e.g. 1-5000 pixels). browser_execute_script's 'script' param has no hint about sync vs async execution, timeout behavior, or expected return types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Emulate mobile device
Navigate to a URL in the browser
Take a screenshot of the page or element
Scroll the page
Type text into an element
Wait for an element to appear
Missing error handling guidance in tool descriptions. When browser_navigate fails (network timeout, invalid URL, etc.), the description does not tell LLMs what to do next (e.g., 'If timeout, try with longer waitFor'). No recovery guidance for any tool.
Tool descriptions do not indicate which operations are side effects (writes/destructive). browser_scroll, browser_click, browser_type, browser_execute_script all modify page state, but descriptions do not warn that these are non-idempotent or that retries may cause duplicate actions (e.g., clicking twice).
browser_scroll's description lacks clarity on semantics. Does 'direction: top' scroll to the top of the page in one action, or is it like 'direction: up'? The enum includes both absolute (top, bottom) and relative (up, down) directions, this ambiguity will confuse LLMs about expected behavior.
No pagination or result-limit controls on browser_extract_text when multiple=true. If a selector matches 1000 elements, will all text be returned? This could blow context windows. No mention of max results or pagination.
browser_intercept_requests has incomplete schema for mockResponse.body, it is typed as {} (empty object) with no description of what structure it should contain. LLMs cannot craft valid mock responses.
browser_get_page_info description is vague: 'Get current page information (title, URL, etc.)', the 'etc.' hides what other fields are returned. When includeMetrics=true, what metrics are included? Unclear.