Enterprise-ready MCP server for browser automation with multi-team support
Brooklyn MCP presents a mix of strengths and significant gaps. The server implements 13 tools with clear verb-noun naming (launch_browser, close_browser, navigate_to_url, etc.), which is excellent. However, critical issues emerge in parameter descriptions, schema completeness, and error handling guidance. Most tools have solid base descriptions (100-200 chars), but parameter-level documentation is sparse or missing. Output schemas are not explicitly documented in the provided code, which is a major gap. Error handling lacks recovery guidance, tools do not explain what to do when a browser_id is invalid or a URL navigation times out. The server also lacks tool annotations (readOnlyHint, destructiveHint, idempotentHint) which are increasingly important for agent safety.
List all available browser automation capabilities and tools
Get practical examples and code snippets for common Brooklyn tasks
Get a step-by-step guide for getting started with Brooklyn
Access Brooklyn MCP server logs for debugging and monitoring
Get comprehensive status of Brooklyn MCP server including version, capabilities, and health
Help configure Brooklyn for your team's specific needs
Get help with common Brooklyn issues and debugging
Output schemas not documented. Tools like list_active_browsers, brooklyn_status, and brooklyn_examples do not expose their return schemas in the provided source code. LLMs cannot plan downstream tool calls or extract specific fields without understanding the response structure.
Missing error handling and recovery guidance. No tool describes what happens on failure (e.g., 'If the browser_id is invalid, server will use fallback target strategy' is documented in the description, but what if that also fails?). No guidance on retryable vs fatal errors. Tools should indicate: can I retry? What was wrong? What should I try next?
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 50 | - | v1 |
Close a browser instance and release resources
Navigate to the previous page in browser history
Launch a new browser instance (Chromium, Firefox, or WebKit) with optional configuration
Retrieve a list of all currently active browser instances
Navigate browser to a specific URL and wait for page load. If browserId is omitted, the most recently launched active browser for your team is used (target=latest).
Wait until the current URL matches an exact string or pattern
Tool annotations absent. None of the tools declare readOnlyHint, destructiveHint, or idempotentHint. This is increasingly critical for agent safety, close_browser and launch_browser are destructive/stateful and should be annotated. This prevents agents from blindly retrying without understanding consequences.
Parameter descriptions inconsistent or sparse. 'browserType' has good description ('Browser engine to launch'), but parameters like 'target' in close_browser use enum values (latest, current, byId) whose semantics are explained in the description text, not the enum itself. LLMs cannot parse enum semantics from descriptions reliably.
Composition issue: browserType defaulting to 'chromium' is reasonable, but headless defaults to true without explaining that headless browsers may fail for some tests/interactions. Default values that hide important side effects should be explicit in the description: 'Defaults to headless=true; non-headless requires display server and increases resource usage.'
Viewport defaults (1280x720) are hardcoded in the schema but may not suit all use cases. The description does not explain fallback behavior if the viewport size is invalid or the display cannot support it.
Tool naming ambiguity: brooklyn_getting_started, brooklyn_examples, brooklyn_troubleshooting, brooklyn_team_setup are all 'informational' tools but use conflicting naming patterns (brooklyn_* prefix vs. verb_noun). Consider unifying as get_getting_started_guide or start_with_examples to match the verb_noun convention.