Model Context Protocol (MCP) server for BrowserOxide — a stealth headless browser an AI agent can drive: fetch_page, evaluate, check_protection
Three tools with complete input schemas and descriptions, but descriptions are terse (50-150 chars, below the 194-char baseline). All tools lack output schema documentation, critical for LLM planning. Parameter descriptions are present but minimal. No error handling guidance, no recovery hints. Naming is clear (verb_noun pattern: fetch_page, evaluate, check_protection), but tools lack idempotency hints and confirmation patterns for what appear to be read-only operations. No tool annotations (readOnlyHint, etc.) despite all three being marked READ_ONLY.
Render a URL and report whether it is behind an anti-bot wall and whether a real render got through. Returns the verdict (pass / thin-shell / edge-block / sensor-fail / challenge-incomplete), whether it is a challenge, and the rendered byte size.
Render a URL, then run a JavaScript expression in the page realm and return its string result.
Render a URL with a real stealth browser engine (own TLS + V8, no Chromium) and return its content. Returns the honest challenge verdict so you know if the body is real content vs. a bot wall.
No output schema documentation. LLMs cannot plan downstream calls or extract required fields (e.g., what does fetch_page return? HTML string? Structured object? Challenge verdict format?). Breaks tool chaining.
Descriptions are terse (50 - 150 chars vs. 194-char baseline). fetch_page: 'Render a URL...' lacks WHEN to use it (vs. evaluate?), prerequisites, or what 'challenge verdict' means. Evaluate: no mention of side effects or JS execution context. check_protection: unclear what 'thin-shell' or 'sensor-fail' mean to an LLM.
Parameter descriptions are minimal. 'profile' param: 'Browser identity: chrome (default), firefox, iphone, pixel', no explanation of WHEN to use each or what fingerprint differences matter. 'format' param: no guidance on when to choose 'text' vs 'html'. 'js' param: no mention of execution context, timeout, or error handling.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
No tool annotations despite all three being READ_ONLY. Missing readOnlyHint in schema. LLMs cannot infer safety/idempotency without explicit hints. No confirmation pattern for evaluate (arbitrary JS execution is a security concern).
No error handling guidance. What happens if URL is invalid? If JS throws? If anti-bot wall blocks? LLM gets no recovery hints. No categorization of errors as retryable vs. fatal.