MCP server for Cursor AI browser integration providing browser monitoring and control capabilities
Summer-MCP exhibits critical quality gaps across the Definition Quality dimension. All 9 tools lack proper parameter descriptions, while some tools have basic input schemas (e.g., take_screenshot, activate_tab, get_dom_snapshot define tabId with minimal description), most tools (get_network_requests, get_network_errors, get_console_logs, get_console_errors, get_active_browser_tab, get_browser_tabs) lack visible input schema definitions entirely. Tool descriptions are uniformly terse (15 - 30 characters), far below the 194-character baseline for production tools and well under the 20-character minimum for earning points. Error handling is not evident in the provided source. No input validation, enums, or constraints are visible. Output schemas are undocumented. Security practices (credential injection, permission gating, audit logging) are absent. Most critically, tools lack the dependency hints and disambiguation guidance needed for LLM selection, e.g., get_browser_tabs, get_active_browser_tab, and activate_tab are semantically adjacent but naming does not clarify when to use each. The codebase shows transport via WebSocket aggregator + Express, but the MCP server itself uses STDIO (per transport field), which is a hard architectural cap at 50 for protocol readiness. Tool definitions appear to be inferred from file organization rather than explicitly visible in a registration block with full schemas.
Activate a specific browser tab by tab ID
Get the currently active browser tab
Get all open browser tabs
Get console errors captured by the browser extension
Get console logs captured by the browser extension
Get a DOM snapshot of a specific browser tab
Get network errors captured by the browser extension
Get network requests captured by the browser extension
Five tools (get_network_requests, get_network_errors, get_console_logs, get_console_errors, get_active_browser_tab, get_browser_tabs) have no visible input schema definitions in the provided source.
All 9 tool descriptions are terse (15 - 30 characters), far below the 194-character baseline and the 20-character minimum threshold. Descriptions like 'Get network requests captured by the browser extension' do not explain WHEN to use this tool, WHAT the output contains, or HOW it differs from similar tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 28 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 24 | - | v1 |
Take a screenshot of the current browser tab or a specified tab
Parameter descriptions are missing or inadequate. Only take_screenshot, activate_tab, and get_dom_snapshot provide parameter descriptions ("Optional tab ID...", "The ID of the tab..."). The remaining 6 tools have no visible parameter documentation.
Naming ambiguity in browser tab tools: get_active_browser_tab vs. get_browser_tabs vs. activate_tab. The LLM cannot easily distinguish whether to call get_active_browser_tab (returns current tab), get_browser_tabs (lists all), or activate_tab (switches to a tab). Rename to clarify: list_browser_tabs, get_current_tab, switch_to_tab.
Output schemas are undocumented. No source code shows what fields these tools return, their types, or structure. E.g., what does get_network_requests return? An array of request objects with (url, method, statusCode, timestamp)? Without documented schemas, the LLM cannot reason about downstream tool chaining or extraction.
No error handling or recovery guidance. Code files are not fully visible, but the brief tool definitions provide no error classification (retryable, user-fixable, fatal) or actionable error messages. Per pattern:recovery-guide, errors should tell the LLM what to do next.
No input validation or constraints visible. The tabId parameter in take_screenshot, activate_tab, and get_dom_snapshot is described minimally; no format, regex, length, or enum constraints are declared.
No security practices evident. Tool definitions and package.json show no credential injection, permission gating, scope declarations, or audit logging. The aggregator-server accepts WebSocket connections from the browser extension without visible auth, and the MCP server routes commands through it. No rate limiting or input sanitization is documented.