A browser automation MCP server that executes Rhai scripts in a WebAssembly sandbox within browser tabs, enabling automated web interactions with DOM manipulation, form filling, and page analysis capabilities.
13 tools with clear verb-noun naming (click, type_text, get_value, etc.) and consistent descriptions (50-150 chars). All tools have documented input schemas with parameter types and descriptions. However, output schemas are not documented, tools return unspecified types (bool, string, or object). No error handling guidance (e.g., TimeoutError mentioned but not explained). Parameter descriptions lack format constraints (e.g., 'timeout_ms' has no min/max bounds). Missing tool annotations (readOnlyHint, destructiveHint). Descriptions are adequate but generic, they state WHAT but not WHEN or WHY to use each tool. No composition guidance (e.g., which tools chain together). Baseline: avg tool description 100 chars (p10=50, p90=150), all params typed, but output schemas absent.
Waits for the element, then clicks on it. Default timeout: 5000 ms.
Returns a cleaned, token-optimized (AEO-optimized) HTML tree of the current page. Ideal for LLM analysis.
Immediate check if a element matches the CSS selector in the page.
Waits for the element, then extracts the value of the specified attribute. Default timeout: 5000 ms.
Scopes the target element, queries all child elements bearing data-loki attributes, and returns a clean, Markdown-friendly outline description. Default timeout: 5000 ms.
Waits for the element, then extracts its text content. Default timeout: 5000 ms.
Output schemas not documented. Tools return bool, string, or object but LLMs cannot infer structure. E.g., dom_to_string returns 'String' but no format/structure guidance; get_loki_data returns 'String' (Markdown?) but not specified.
Parameter constraints missing. 'timeout_ms' appears in 8 tools with no min/max bounds documented. LLMs may pass 0, negative, or absurdly large values. Descriptions should state '1 - 30000 ms' or similar.
Error handling not actionable. TimeoutError mentioned in wait_element but no guidance on recovery. Descriptions should state: 'Throws TimeoutError if element not found within timeout. Retry with longer timeout or verify selector.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Waits for the element, then extracts its input value. Default timeout: 5000 ms.
Prints a message to the Execution Console logs. Supports strings, numbers, booleans, and other objects.
Waits for the element, then scrolls the viewport smoothly to align it in the center. Default timeout: 5000 ms.
Suspends execution for the specified milliseconds.
Waits for the element, then types character-by-character with randomized human typing delays (40ms-120ms) and standard keydown/keyup events. Recommended for search inputs, login credentials, and bypassing anti-bot systems. Default timeout: 5000 ms.
Waits for the element, then instantly sets its value. Triggers standard input/change events. Recommended for large texts, pasting articles, or generic forms. Default timeout: 5000 ms.
Blocks until the element is present in the DOM, or throws a TimeoutError. Default timeout: 5000 ms.
Tool annotations missing. No readOnlyHint or destructiveHint. LLMs cannot distinguish safe (get_text) from unsafe (click, type_text) operations without explicit hints.
Descriptions lack WHEN/WHY guidance. E.g., type_text vs type_as_human both type text but descriptions don't explain when to use each. Should state: 'Use type_text for forms/pastes; use type_as_human for login/search to bypass anti-bot detection.'