MCP-compliant web scraper with advanced cookie consent handling
This server has 4 tools with clear verb-noun naming (browser_*), documented schemas, and descriptions. However, several issues prevent a higher score: (1) Descriptions are present but often lack WHEN/WHY context and operational implications (e.g., browser_click doesn't state it's a write operation affecting page state); (2) Parameter descriptions exist but are thin and lack actionable constraints (e.g., 'Timeout in milliseconds' without min/max bounds, 'CSS selector' without format hints); (3) Output schemas are NOT documented, critical because LLMs need to know what these tools return to plan downstream calls; (4) Error handling is generic (McpError wrapping) with no recovery guidance or retryability classification. The codebase shows reasonable tool structure (BaseTool abstract class, proper registry), but LLM-facing definition quality lags production baselines.
Add visual annotations to page screenshots for documentation and collaboration
Click on web elements using CSS selectors or coordinates
Close browser pages and clean up sessions
Monitor and access browser console messages for debugging and error tracking
No output schemas documented for any tool. LLMs cannot plan multi-step operations without knowing what fields/structure to expect from responses.
Parameter constraints lack specificity. 'Timeout in milliseconds' has no min/max; 'CSS selector' has no format hint; 'Array of annotation objects' has no schema. Unbounded/vague params invite invalid input from LLMs.
Descriptions do not state write/destructive implications. browser_click modifies page state (fires JS events, navigates), but description reads as read-only. Agents need explicit state-change flags to plan safely.
Error handling is generic (McpError wrapping with InternalError). No retryability guidance, no actionable recovery hints, no error categorization. An LLM encountering 'Tool execution failed: timeout' has no way to know if retry is safe.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 62 | - | v1 |
browser_close description (21 chars) is below 30-char minimum for adequacy. Does not explain consequences or when to use.
Parameter 'position' in browser_click is typed as 'object' with no nested schema details. LLMs cannot determine what sub-fields (x, y, offsetX, offsetY?) are expected.