Experimental MCP server for browser automation using Puppeteer. Enables Claude to control a browser, navigate pages, take screenshots, interact with elements, and execute JavaScript.
Strong tool definitions with comprehensive descriptions (avg 180+ chars) and well-structured schemas. All 8 tools have clear verb-noun naming (puppeteer_*) and detailed parameter documentation. Input schemas are complete with types and descriptions. However, output schemas are not formally documented, and error handling lacks recovery guidance. Tool descriptions are LLM-optimized but could be more concise (some exceed 200 chars). No critical security issues detected.
Click on an element in the browser page. This simulates a user mouse click on the specified element. The tool automatically waits for the element to be present in the DOM before attempting to click. Use this for buttons, links, checkboxes, radio buttons, or any clickable element. Returns success confirmation or error if element not found.
Connect to an existing Chrome browser instance with remote debugging enabled. Use this tool to attach to a Chrome browser that's already running with the --remote-debugging-port flag. This allows you to control an active browser session rather than launching a new one. Prerequisite: Chrome must be running with remote debugging enabled (e.g., chrome --remote-debugging-port=9222). Returns the active tab's title and URL upon successful connection.
Execute arbitrary JavaScript code in the browser context. This runs code directly in the browser's JavaScript environment (not Node.js), with access to the DOM, window object, and page APIs. The code executes in an async context and can return serializable values (primitives, objects, arrays). Console output is captured and returned. Use this for complex interactions, data extraction, or custom logic that other tools don't support. Returns the execution result as JSON and any console output.
Fill an input field with text by simulating keyboard typing. This tool waits for the input element to be present, then types the provided text character by character (simulating human typing). Works with text inputs, textareas, and contenteditable elements. Does not clear existing content first - use evaluate() with .value = '' if you need to clear first. Returns success confirmation with the filled value.
Output schemas not formally documented. Tool descriptions state what is returned (e.g., 'Returns the HTTP status code and success confirmation') but no structured schema is provided for LLM planning.
Error handling lacks recovery guidance. Descriptions mention errors (e.g., 'element not found') but do not guide the LLM on next steps or categorize errors as retryable vs. fatal.
Tool descriptions exceed 200 characters in several cases (puppeteer_screenshot: ~350 chars, puppeteer_evaluate: ~280 chars), risking token waste and burying key details.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | <=2025-11-25 | v2 |
Move the mouse cursor over an element to trigger hover effects. This simulates hovering without clicking, useful for revealing dropdown menus, tooltips, or other hover-triggered UI elements. The tool waits for the element to be present before hovering. The hover state persists until another action moves the mouse. Returns success confirmation.
Navigate the browser to a specified URL. This tool loads a new page and waits for the network to be idle before returning, ensuring the page is fully loaded. Waits up to 30 seconds for navigation to complete. Use this as the first step before interacting with page elements. Returns the HTTP status code and success confirmation.
Capture a screenshot of the current page or a specific element. Screenshots are stored in memory with the provided name and can be retrieved via the screenshot:// resource URI. Returns both a text confirmation and the base64-encoded PNG image. The viewport is automatically resized to the specified dimensions before capturing. Use this tool to visually verify page state, capture UI elements, or document page content.
Select an option from a dropdown <select> element. This tool waits for the select element to be present, then chooses the option matching the provided value attribute. Triggers change events just like a user interaction. Use this for dropdown menus, comboboxes, and select elements. Returns success confirmation with the selected value.
No pagination or result-limiting guidance for puppeteer_evaluate. If JavaScript returns large arrays or objects, no mechanism to cap or paginate results.
puppeteer_connect_active_tab accepts optional targetUrl but does not document how matching works (substring, exact, regex) or what happens if multiple tabs match.