Token-efficient MCP control for an AI agent's real Chrome session.
BABU provides 23 well-named browser automation tools with consistent verb_noun naming (browser_*). All tools have descriptions (avg ~80 chars, within baseline 34-392 range) and explicit input schemas with type definitions. However, descriptions are terse and lack LLM-optimized guidance on WHEN to use each tool vs alternatives. Output schemas are not documented, LLMs cannot predict return structure. Error handling is minimal; no recovery guidance or actionable error messages. Parameter descriptions exist but lack format constraints, ranges, or dependency hints. No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification (READ_ONLY vs WRITE). Missing: pagination guidance for snapshot/list_tabs, confirmation patterns for destructive ops (close_tab, eval), and natural-identifier support (all tools require opaque tab_id).
Activate (focus) a browser tab by ID.
Navigate back in browser history.
Click an element by snapshot index or CSS selector.
Close a browser tab by ID.
Execute JavaScript in the page context.
Extract text content from the page or a specific element.
Navigate forward in browser history.
Output schemas not documented. LLMs cannot predict return structure (fields, types, pagination). Forces agents to guess what data is available after each call.
Descriptions lack LLM-optimized guidance. Most are 50-75 chars, stating WHAT but not WHEN to use vs similar tools or prerequisites. E.g., browser_snapshot vs browser_extract_text distinction unclear.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). Tools are risk-stratified (READ_ONLY vs WRITE) but not declared in schema. Agents cannot distinguish safe from destructive operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Get the currently active tab.
Get the current state of a tab (URL, title, readyState).
Connection health, tab count, and active tab. Set include_tabs only when the full tab inventory is needed.
Hover over an element by snapshot index or CSS selector.
List all open browser tabs: id, title, url, windowId, active, pinned.
Navigate to a URL in a tab.
Open a new browser tab with the given URL.
Press a keyboard key.
Reload the current page.
Take a screenshot of the current tab.
Scroll the page or an element.
Select an option in a dropdown by value.
Snapshot the DOM: list interactive elements with indices for targeting.
Type text into an input element.
Upload files to a file input element.
Wait for an element to appear on the page.
No error handling guidance. Code shows RuntimeError('no browser connected...') but no recovery hints in tool descriptions. Agents cannot self-correct on failures.
Parameter descriptions lack format constraints and ranges. E.g., 'amount' in browser_scroll has no min/max; 'max_elements' in browser_snapshot unbounded; 'timeout_ms' in browser_wait_for capped at 105,000 but not documented.