Model Context Protocol server for Safari browser automation with dev tools access
Safari MCP server has 13 tools with consistent naming (verb_noun pattern) and complete input schemas. However, descriptions are minimal (10-50 chars, well below the 194-char baseline), parameter descriptions lack depth, and output schemas are entirely undocumented. No error handling guidance, no recovery paths, and no tool annotations. Naming is clear but descriptions fail to explain WHEN to use each tool or what it returns, forcing LLMs to guess. This is typical of community servers that prioritize schema completeness over LLM-optimized guidance.
Clear captured console logs for a session
Clear captured network logs for a session
Close a Safari automation session
Execute JavaScript in the browser context
Get browser console logs for debugging with optional filtering
Get network activity logs for performance analysis
Get current page URL and title
Output schemas completely undocumented. No tool returns a documented schema, LLMs cannot predict what fields to expect or plan downstream calls. E.g., safari_take_screenshot returns binary data but this is not specified.
Descriptions are too brief (10-50 chars vs. 194-char baseline). Most tools lack context on WHEN to use them, WHAT they return, or HOW they differ from similar tools. E.g., 'Get browser console logs for debugging with optional filtering' (52 chars) does not explain output format, filtering behavior, or session lifecycle.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Get page performance metrics
Inspect a DOM element and get its properties
List all active Safari sessions
Navigate to a URL in Safari
Start a new Safari automation session with dev tools access
Take a screenshot of the current page
No error handling or recovery guidance. Tools do not document what errors can occur (invalid sessionId, network failure, timeout) or what the LLM should do next. E.g., if safari_navigate fails, should the LLM retry, check session status, or start a new session?
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints. E.g., safari_clear_console_logs is destructive but unmarked; safari_get_console_logs is read-only but unmarked.
Parameter descriptions lack depth. 'sessionId' appears in 13 tools but is never explained: Is it a UUID? A user-provided string? How long does a session persist? What happens if you pass an invalid sessionId?