MCP server bridging browser WebMCP tools to desktop MCP clients
This is a browser automation MCP server with 26 tools focused on controlling a Playwright-based browser and bridging WebMCP tools. Strengths: all tools have descriptions (avg ~120 chars), clear verb-noun naming (browser_*, webmcp_*), input schemas are present and typed with proper required fields, toolAnnotations are implemented for readOnlyHint. Weaknesses: parameter descriptions are sparse or missing entirely (most params lack detailed guidance on format/range/constraints), no documented output schemas for return types, error handling guidance is absent (tools just throw/return errors without recovery hints), no pagination support for tools that might return large result sets (browser_network_requests, browser_console_logs), and several tools expose powerful capabilities (browser_evaluate, webmcp_call_tool) without documented security boundaries or permission checks. Tool quality is reasonably consistent (most score 65-75) but held back by incomplete parameter documentation and lack of structured error responses.
Navigate back in browser history
Click an element identified by its ref number from the latest browser_snapshot
Get buffered browser console log messages
Execute JavaScript in the page context and return the result
Clear an input field and fill it with new text. Unlike browser_type, this replaces the existing value entirely.
Focus an element identified by its ref number
Navigate forward in browser history
Missing output schemas for all 26 tools. LLMs cannot plan downstream calls or extract fields without knowing what structure is returned. E.g., browser_snapshot returns 'a tree of elements' but no schema of the tree structure is documented. browser_network_requests returns requests but no field list is provided.
Parameter descriptions are sparse or absent. E.g., browser_click has 'ref' with description 'Element ref number from browser_snapshot' but no guidance on valid range, error handling if ref is stale, or behavior when ref doesn't exist. browser_press_key describes 'key' as 'Playwright key name' with no list of valid keys. This forces LLMs to guess or fails silently.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 49 | - | v1 |
Hover over an element identified by its ref number
Launch a new browser window. Closes any existing browser first. Uses Playwright to launch a system-installed Chrome/Edge with WebMCP enabled. Supported channels: chrome, chrome-beta, chrome-canary, msedge, msedge-beta, msedge-dev. Works on Mac, Linux, and Windows.
Navigate to a URL in the current tab
Get buffered network requests with method, URL, and status code
Press a keyboard key (e.g. "Enter", "Tab", "ArrowDown", "a", "Control+c")
Reload the current page
Take a screenshot of the current page. Returns a PNG image.
Scroll the page or a specific element. Use direction and amount to control scrolling.
Select an option in a <select> element by value
Capture an accessibility snapshot of the current page. Returns a tree of elements with [ref=N] markers that can be used with interaction tools.
Close a tab by its index. If omitted, closes the current tab.
List all open browser tabs with their index, URL, and title
Open a new browser tab, optionally navigating to a URL
Switch to a tab by its index (from browser_tab_list)
Type text into a focused element or element identified by ref. Text is typed character by character.
Get the current page URL and title
Wait for a specified time or for a CSS selector to appear on the page
Execute a WebMCP tool by name on the active browser page. Use webmcp_list_tools first to discover available tools and their input schemas.
List all WebMCP tools currently registered on the active browser page. Returns tool names, descriptions, and JSON input schemas. Tools change dynamically as the user navigates between pages — always call this before webmcp_call_tool.
No error handling guidance. Tools like browser_click, browser_type, browser_fill lack documentation of failure modes (element not found, stale ref, timeout). No recovery hints (e.g., 'If ref fails, call browser_snapshot again'). Agents will fail without understanding why or how to retry.
browser_evaluate and webmcp_call_tool expose powerful capabilities without documented security boundaries or permission checks. browser_evaluate allows arbitrary JavaScript execution; webmcp_call_tool invokes arbitrary browser-side tools. No mention of input validation, sandboxing, or audit logging.
Tools returning collections (browser_console_logs, browser_network_requests, browser_tab_list) have no documented pagination, limits, or result caps. No mention of how many items are returned or how to handle large datasets. LLMs could bloat context or timeout waiting for unbounded results.
No idempotency or confirmation patterns for destructive operations. browser_tab_close, browser_reload, browser_navigate, browser_evaluate, webmcp_call_tool can all cause irreversible state changes without a dry-run or confirmation step. Agents make mistakes, no recovery path is documented.