MCP server for full Mac control — browser, apps, system commands
18 tools with complete input schemas and descriptions, but significant quality gaps. Naming is verb-forward (browser_*, run_*, etc.) and mostly clear. Descriptions average ~60 chars, below the 194-char baseline, and lack context on WHEN to use tools or what they return. No output schemas documented. Parameter descriptions are minimal; many lack format/constraint guidance. Error handling is absent, no recovery guidance, no categorization of retryable vs fatal errors. Security concerns: run_command accepts arbitrary shell commands with no sanitization or permission gates. keystroke and click_at require Accessibility permission but don't document this prerequisite clearly. No audit logging or rate limiting visible. Tools like browser_evaluate expose arbitrary JavaScript execution without sandboxing. Composition is reasonable (single responsibility per tool), but chaining is weak, no documented output fields to support downstream tool calls.
Click an element on the page by CSS selector or visible text.
Close the current browser tab.
Run JavaScript code on the current page and return the result.
Navigate the browser to a URL. Opens Chrome if not running.
Open a new browser tab, optionally navigating to a URL.
Read the text content of the current page or a specific element.
Take a screenshot of the current page.
run_command accepts arbitrary shell commands with no input sanitization, validation, or permission gates. Agents can execute destructive commands (rm -rf /, kill processes, modify system files) without confirmation or audit trail. No dry-run or confirmation pattern.
browser_evaluate runs arbitrary JavaScript on the page with no sandboxing or validation. Agents can exfiltrate data, modify page state, or trigger unintended side effects. No description of what the tool returns or how to use results.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields. E.g., browser_tabs returns a list but structure is undocumented; browser_read returns text but max length and truncation behavior are unclear.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Scroll the page up or down.
Switch to a different browser tab by index.
List all open browser tabs.
Type text into an input field.
Wait for an element to appear on the page.
Click at specific screen coordinates. Requires Accessibility permission.
Get the name of the currently active (frontmost) application.
Send keystrokes to the frontmost application via AppleScript. Requires Accessibility permission.
Open any Mac application by name.
Take a screenshot of the entire Mac screen (not just browser).
Run a shell command on the Mac and return the output.
Descriptions are too brief (avg 60 chars vs 194-char baseline). Missing WHEN to use each tool, prerequisites (e.g., keystroke/click_at require Accessibility permission), and what the tool returns. LLMs cannot reliably select the right tool or understand output.
No error handling or recovery guidance. Tools fail silently or return raw errors. No categorization of retryable vs fatal errors. No actionable error messages (e.g., 'Element not found. Try browser_wait() first' or 'Command timed out after 30s. Increase timeout or simplify command').