MCP server that lets an AI agent hand browser work off instead of paying a turn per click: a decision model drives the loop server-side over ref-based element tables, with code-checked assertions and zero-model macro replay.
Server provides 10 browser automation tools with consistent naming (browser_* prefix) and reasonable descriptions. All tools have input schemas with parameter descriptions. However, descriptions are often terse (10-50 chars), lacking WHEN/WHY context and recovery guidance. Output schemas are not documented. Error handling is minimal, no guidance on retryability, user-fixable vs fatal errors, or recovery paths. Parameter constraints (enums, ranges) are largely absent. The browser_goal tool combines multiple responsibilities (open, drive loop, verify) which violates single-responsibility principle.
Execute one or more actions on the page (click, type, select, etc.) in a single round trip.
Verify that the page matches expected conditions (text present, element state, etc.).
Close a browser session and clean up resources.
Diagnose browser and server state: check Chrome availability, configuration, and session health.
Hand a browser task to the server: open a page, drive the loop with a decision model, and prove the outcome.
Record or replay a macro: a stored path that survives page reloads and redesigns.
Read the current page state: visible text and actionable elements with stable refs.
Descriptions are terse (10-50 chars) and lack WHEN/WHY context. E.g., 'Read the current page state' does not explain when to call it vs browser_observe, or what 'mode' parameter does. Rubric baseline: 194 chars avg, 50-200 chars optimal for LLM selection.
Output schemas are not documented. LLMs cannot plan downstream calls or extract required fields (e.g., what does browser_observe return? What fields are in the element table?). Rubric: 100% of A+ tools have documented return types.
browser_goal combines three responsibilities: open page, drive decision loop, verify outcome. Violates single-responsibility principle. Should split into separate tools or document the multi-step behavior explicitly.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Open a URL in a new owned tab and return the element table. Use `hint` to restate the goal in one line; it is echoed back so the next step has the goal in context without re-reading this call.
List active browser sessions and their state.
List tabs in the current session.
Parameter constraints are missing. E.g., browser_act 'ops' array has no schema for operation objects (what fields? what types?). browser_observe 'mode' has no enum (auto|full|compact). Rubric: free-form strings invite hallucinated values.
No error handling guidance. Tools do not indicate retryability, user-fixable errors, or recovery paths. E.g., if browser_open fails, should the agent retry? Call browser_doctor? Ask the user? Rubric: error responses must tell LLM what to do next.