MCP server bridge for Claw Relay — use browser automation from Copilot CLI or any MCP client
15 tools with consistent naming (verb_noun pattern: browser_*) and reasonable descriptions (avg ~100 chars). All tools have input schemas with typed parameters. However, descriptions lack LLM-optimization guidance (no 'when to use' or prerequisites), parameter descriptions are minimal (often just restating the name), and output schemas are entirely undocumented. No error handling guidance, no recovery paths, and no indication of which operations are idempotent or irreversible beyond risk labels. Missing tool annotations (readOnlyHint, destructiveHint). Composition is sound (each tool does one thing), but chaining requires the agent to understand ref semantics without explicit guidance.
Click an element on the page. Requires a ref from browser_snapshot (e.g. 'e5'). Call browser_snapshot first to find the ref.
Close the current browser tab.
Get console messages from the page. Optional level filter (log|warning|error). Set clear=true to clear the log.
Drag an element from one location to another. Requires start and end refs from browser_snapshot.
Run JavaScript code in the browser page. Returns the result. Use sparingly — prefer snapshot and click for most tasks.
Fill an input element, replacing any existing content. Requires a ref from browser_snapshot.
Output schemas completely undocumented. No tool describes what it returns (e.g., browser_snapshot returns 'accessibility tree' but field structure is unknown). LLMs cannot plan downstream calls or extract data without knowing response shape.
Parameter descriptions are minimal and often just restate the parameter name. E.g., 'ref' → 'Element reference from browser_snapshot (e.g. e5)' lacks guidance on what happens if ref is invalid, whether refs persist across snapshots, or how to obtain a ref. No validation rules or error recovery hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Hover over an element by ref. Triggers hover menus and tooltips.
Navigate the browser to a URL. Use this to open any webpage. Returns confirmation when navigation completes.
Press a keyboard key (e.g. 'Enter', 'Tab', 'Escape', 'ArrowDown'). Use after typing to submit forms.
Take a PNG screenshot of the current page. Returns the image. Use browser_snapshot instead if you need to interact with elements.
Scroll an element into view. Requires a ref from browser_snapshot.
Select options from a dropdown element by ref and values.
Get the accessibility tree of the current page. Returns element refs (e.g. e1, e5) that you use with click, type, fill, and other tools. ALWAYS call this first to understand the page structure.
Type text into an input element (appends to existing text). Requires a ref from browser_snapshot.
Wait for a condition to be met. Supports: text, textGone, selector, url, loadState (networkidle|domcontentloaded|load), or a custom JS function.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk labels exist (READ_ONLY, WRITE, IRREVERSIBLE) but are not exposed in the MCP schema. LLMs cannot distinguish safe-to-retry operations from destructive ones without explicit hints.
No error handling guidance. Tools do not document what errors are possible, whether they are retryable, or what the LLM should do next. E.g., browser_click does not explain what happens if the ref is stale, the element is not clickable, or the page has navigated.
browser_close lacks description detail. Only 'Close the current browser tab.', no guidance on whether this is reversible, what happens to open connections, or when to use it. Marked IRREVERSIBLE but no confirmation pattern offered.