MCP server for Obscura headless browser, providing tools for web scraping, automation, and browser control via the Model Context Protocol
12 tools with basic descriptions and partial schemas. Most tools have 1-2 parameter descriptions but lack comprehensive output schema documentation. Tool names follow verb_noun convention (navigate, get_page_content, query_selector, execute_script, click, type_text, wait_for_selector, screenshot). Descriptions are present but brief (10-50 chars), below the 50-200 char LLM-optimized baseline. Input schemas visible for all tools with type declarations, but output schemas are not documented. No error handling guidance, no recovery hints, no parameter constraints (enums, ranges). Security concern: execute_script accepts arbitrary JavaScript with no validation or sandboxing hints.
Click an element on the page
Execute JavaScript code in the page context
Get all cookies from the current page
Get the current page HTML content
Get the current page text content
Navigate to a URL and wait for page load
Query DOM elements using CSS selector
Query all DOM elements matching a CSS selector
Take a screenshot of the current page
Output schemas not documented. LLMs cannot plan downstream calls or extract structured data from tool responses. No documentation of what fields navigate(), get_page_content(), query_selector_all() return.
Descriptions too brief (10-50 chars vs 50-200 char baseline). Missing WHEN to use each tool, prerequisites, and what it returns. E.g., 'Get the current page HTML content' lacks context on when to call it vs get_page_text().
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |
Set cookies for the current page
Type text into an input element
Wait for an element matching a selector to appear
execute_script accepts arbitrary JavaScript with no validation, sandboxing, or safety guidance. No description of what code can/cannot do, timeout behavior, or error handling. Critical security and reliability gap.
No error handling guidance. Tools lack recovery hints (e.g., 'If selector not found, try wait_for_selector first'). No categorization of errors as retryable vs fatal. LLMs cannot self-correct on failures.
Parameter constraints missing. navigate's waitUntil accepts free-form strings instead of enum. No min/max for timeout in wait_for_selector. No validation rules in descriptions. LLMs will hallucinate invalid values.