MCP (Model Context Protocol) server for Chrome automation using Puppeteer. Persistent browser sessions, UI framework detection (MUI, Ant Design, etc.), Page Object support, visual testing, Figma comparison. Works seamlessly in WSL, Linux, macOS, and Windows.
The server provides 25 tools spanning browser automation, Angular component introspection, and Figma API integration. Most tools have descriptions (90%+) and schemas present. However, there are significant gaps: several tool descriptions are vague or lack guidance on when/why to use them; many parameters lack clear constraints or enums; output schemas are largely undocumented; error handling guidance is minimal; and some descriptions contain example values that LLMs may reuse literally. The `executeScript` tool description warns against misuse but lacks structured recovery guidance. Angular and Figma tools are well-structured but output shape is not explicitly documented. Overall, the server demonstrates solid foundation (clear naming, basic schemas) but falls short of production-grade polish (incomplete param validation rules, missing chaining IDs, no pagination guidance).
Call a method on an Angular component
Click element by APOM ID (preferred) or CSS selector. Handles React/Vue/Angular events, waits for navigation.
⚠️ LAST RESORT tool - use ONLY when ALL specialized tools failed. NEVER use for: clicking (use click), typing (use type), scrolling (use scrollTo), reading page elements (use analyzePage), finding elements (use findElementsByText), fetching API data (use listNetworkRequests + getNetworkRequest). May break React/Vue/Angular synthetic events. ALWAYS try specialized tools first.
Get detailed information about a specific Angular component
Get Angular form data and validation state
Get element box model: dimensions, positioning, margins, padding, borders.
Get computed CSS styles for element. For layout debugging and responsive design.
Output schemas are not documented for any tool. LLMs cannot reason about what fields to expect, forcing them to guess or make assumptions about return structure. This breaks tool chaining where tool A's output must feed into tool B's input.
Pagination not implemented for list tools (listNetworkRequests, listAngularComponents, listFigmaPages). No limit/offset/next_cursor params documented. Large result sets will blow context windows. LLMs lack guidance on how to iterate through results.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get browser console messages. For debugging JS errors and tracking behavior.
Extract color palette from Figma file
Get all components from Figma file (Design System)
Get all styles from Figma file (colors, text styles, effects)
Get network request details (headers, payload, response). Use requestId from listNetworkRequests.
List all Angular components on the page
Get all pages and frames from Figma file. Returns hierarchical structure: pages -> frames
List network requests (method, URL, status). Use getNetworkRequest for details. Supports pagination.
Open browser and navigate to URL. Window persists for further interactions.
Parse Figma URL to extract fileKey and nodeId. Supports various Figma URL formats.
Simple ping-pong tool for testing. Returns 'pong' with optional message.
Save screenshot to file without returning in context. Auto-scales and compresses. Use maxWidth: null and format: 'png' for original quality.
Capture element image (5-10k tokens), or full viewport when no id/selector is given. Use analyzePage for form data/validation (8-10k tokens).
Scroll to element. For lazy loading and visibility testing.
Search for frames/components by name
Submit Angular form with automatic fallback strategies
Type text into input by APOM ID (preferred) or CSS selector. Updates React/Vue/Angular state automatically.
Wait for element to appear. For dynamic content and lazy-loaded elements.
Error handling lacks recovery guidance. Tools do not return actionable error messages. For example, 'Angular not detected on this page' is bare; should suggest 'Ensure page is loaded with ng.js' or 'Try listAngularComponents first to verify Angular is present.' LLMs cannot self-correct without guidance.
Parameter constraints are missing or vague. E.g., waitAfter/timeout numeric params lack min/max bounds. The 'delay' param in 'type' tool has no documented range. LLMs can pass absurd values (e.g., delay=999999999) that break the tool. Enums like category in 'getComputedCss' are good, but 'enum' constraints should appear in schema, not just description.
Descriptions contain example values (e.g., 'button_45', '.submit-btn', 'PROJ') that LLMs may reuse literally in real calls. Replace with formal constraints (regex, enum, format declarations) in the schema instead of text examples.
The `executeScript` tool description warns against misuse but does not offer structured recovery. If executeScript fails, the LLM has no guidance on what to try next. Should suggest 'Try the specialized tool click() instead' or 'Use screenshot() to see current state first.'
Tool descriptions lack dependency hints. E.g., 'click' and 'type' reference APOM IDs from 'analyzePage', but that tool is not in the list (or missing from spec). LLMs cannot chain these tools without explicit guidance like 'First call analyzePage to get element IDs, then use those IDs with click().'
Multiple tools operate on similar concepts (screenshot vs saveScreenshot, getAngularComponent vs listAngularComponents, listFigmaPages vs searchFigmaFrames) but lack clear disambiguation in descriptions. LLMs waste reasoning cycles deciding between them. Descriptions should state 'Use screenshot() for inline capture; use saveScreenshot() to persist to disk without returning tokens.'
Response fields are not documented. E.g., 'click' returns what exactly? A success boolean? A screenshot? A list of changed elements? Undocumented response shapes force LLMs to guess and break tool chaining.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. LLMs cannot infer which tools are safe to retry, which modify state, or which are read-only. This violates current spec expectations and limits agent safety.