Open-source MCP server for browser automation — gives AI agents control of a real Chrome browser via extension
SuperSurf provides a single tool (browser_evaluate) with a reasonable description and basic parameter schema. However, the tool exhibits significant design issues: it violates the single-responsibility principle by combining evaluation, function execution, and expression evaluation; lacks proper parameter descriptions and input validation guidance; provides no documented output schema; and the security model relies on three-layer defense rather than proper privilege gating. The tool name is generic and does not follow verb_object naming conventions (should be something like 'evaluate_javascript' or 'run_javascript'). No other tools (resources, prompts, etc.) are exposed despite the server being a browser automation platform. The codebase shows sophisticated fingerprinting and handle resolution systems in experimental/ modules that are not surfaced as discoverable tools.
Evaluate JavaScript in the page context with three-layer `secure_eval` defense. Layer 1 (AST static analysis) and Layer 3 (page-context Proxy wrapper) block dangerous patterns. Layer 2 (Service Worker membrane) provides extension-side validation.
Tool name 'browser_evaluate' lacks action verb and is overly generic. Should be 'evaluate_javascript' or 'execute_javascript' to clearly signal intent to LLMs.
Single tool combines three distinct operations (evaluate expression, execute function, evaluate with purpose string), violates single-responsibility principle. Should split into separate tools or add clear dispatch logic with exclusive parameter groups.
Parameter 'purpose' is required but its role is unclear, is it a constraint? A log message? The description ('Explanation of why evaluate is needed') suggests it's documentation, not a functional constraint, yet it blocks LLM usage of the tool.
No output schema documented. The tool returns results from 'secure_eval' but LLMs cannot infer structure (is it a JSON object? A string? An array?). This blocks downstream tool chaining and forces LLMs to guess.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 36 | 2026-07-28+ | v2 |
Security model relies on runtime defense (AST analysis, Proxy wrapper) rather than permission gating. No permission checks, scope declarations, or audit trail mentioned. If agent is compromised, the three-layer defense may not be sufficient.
No error handling guidance. What happens on syntax error? What if the expression times out? What if the page context is unavailable? LLMs receive no recovery instructions.
Parameters 'function' and 'expression' are marked Optional but their relationship is unclear. Can both be provided? Must one be provided? LLMs cannot reason about valid combinations.
No tools for critical browser automation tasks: navigation, element interaction, screenshot capture, DOM queries. The experimental/ modules show these capabilities exist but are not registered as tools.