MCP Browser Server - A server that manages web browser access with configurable host restrictions
mcp-browse has 5 tools with basic schemas and descriptions, but significant gaps prevent production use. All tools have descriptions (10-30 chars, below the 50-200 char baseline for LLM optimization), and input schemas are present but lack depth. Parameter descriptions are minimal or missing context about constraints, formats, and dependencies. No output schemas documented. Error handling is absent, no recovery guidance, no categorization of retryable vs fatal errors. The 'Input' tool's selector parameter uses an object with conditional properties (element_id OR css_selector) but does not document this mutual exclusivity. 'ExecuteScript' accepts arbitrary JavaScript with no safety guardrails or sandboxing hints. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (Click, Input, ExecuteScript are WRITE; Navigate, Download are READ_ONLY). Composition is reasonable, each tool has one responsibility, but chaining is not documented (e.g., does Navigate return a page ID for subsequent Click calls?).
Click a link/button
Download a file from the browser
Execute JavaScript in the browser context
Input text into form fields
Visit a URL
Descriptions are too short (10-30 chars) and lack LLM-optimization guidance. 'Visit a URL', 'Click a link/button', 'Input text into form fields' do not explain WHEN to use each tool, what it returns, or prerequisites.
No output schemas documented. LLMs cannot plan downstream calls or extract required data (e.g., does Navigate return page content, metadata, or just success?). Baseline: 100% of A+ tools document return types.
No error handling or recovery guidance. Tools do not indicate which errors are retryable, user-fixable, or fatal. No actionable error messages (e.g., 'Element not found. Try a different selector or call Navigate first.').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
Missing tool annotations. Click, Input, ExecuteScript are destructive (WRITE) but lack destructiveHint. Navigate and Download are read-only but lack readOnlyHint. No idempotentHint declared. Agents cannot reason about retry safety.
Input tool's selector parameter uses conditional object (element_id OR css_selector) but does not document mutual exclusivity or validation. LLMs may pass both or neither, causing silent failures.