Hardened MCP server providing AI agents Chrome DevTools Protocol level browser control: navigation, DOM interaction, network interception, dynamic Python hooks (AST-validated), and full element cloning.
Server has 15 tools with HTTP transport and basic schema definitions, but suffers from critical gaps in parameter descriptions, output schema documentation, and error handling guidance. Most tools lack descriptions of what they return, making it difficult for LLMs to plan downstream calls. Parameter descriptions are present but often generic (e.g., 'The browser tab object'). No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Error handling is absent, no recovery guidance or actionable error messages. Tool naming is reasonable (verb-noun pattern) but some names are overly generic ('handle_response', 'execute_cdp_command'). This is a typical community server with functional definitions but insufficient LLM-optimization.
Discovers all global JavaScript functions.
Enables CDP Runtime domain for a tab.
Executes any CDP Runtime command with given parameters.
Extract complete element data using proper CDP methods. Provides 100% accurate element cloning by using CDP's native capabilities for CSS rules, event listeners, and style information.
Return the current state of a browser instance as JSON.
Return console logs for a browser instance as JSON.
Return cookies for a browser instance as JSON.
No output schema documentation. Tools like get_browser_state_resource, query_elements, and extract_complete_element_cdp lack documented return types. LLMs cannot plan downstream calls or extract required fields without knowing what structure to expect.
Generic parameter descriptions. 'The browser tab object' appears in 8+ tools but does not explain what fields the tab object contains, how to obtain it, or what operations it supports. LLMs cannot reason about tab lifecycle without this detail.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | <=2025-11-25 | v2 |
Gets all available execution contexts.
Return captured network requests as JSON.
Handle response data, automatically falling back to file storage if too large.
Lists all available CDP Runtime commands.
Enumerate iframes in the page with stable frame IDs. Returns [{frame_id, url, name, parent_frame_id}] for each iframe the page has loaded.
Query elements with advanced filtering.
Find elements that match selector anywhere in the document, piercing open shadow roots.
Spawn a new browser instance with given options.
No error handling or recovery guidance. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. A failed query_elements call returns nothing, the agent has no path forward.
Missing tool annotations. Tools marked WRITE (spawn_browser, enable_runtime, execute_cdp_command, handle_response) lack destructiveHint annotations. Tools marked READ_ONLY lack readOnlyHint. LLMs cannot distinguish safe from unsafe operations without these hints.
Vague tool names. 'handle_response' does not convey what happens, does it send, store, transform, or validate? 'execute_cdp_command' is generic; 'invoke_cdp_runtime_command' would be clearer. 'enable_runtime' lacks context on what runtime and why it must be enabled.