MCP server for macOS screen control — screenshot, click, type, scroll, and window management
Server has 13 tools with complete Zod schemas and descriptions. Naming follows verb_noun convention (screenshot, click, type_text, etc.). Descriptions are present but brief (avg ~60 chars, below the 194-char baseline). Parameter descriptions are minimal, many lack context on constraints, ranges, or when to use them. Output handling is inconsistent: screenshot returns structured image+text; most others return raw JSON. No error recovery guidance. Missing idempotency hints for destructive operations (click, drag, type_text). No permission gates or audit trail patterns.
Bring an application to the foreground
Left click at screen coordinates
Double click at screen coordinates
Click and drag from one point to another
Get the current mouse cursor position
Get the screen dimensions (pixel and point sizes, scale factor)
Press a key combination. Examples: cmd+c, ctrl+shift+a, return, escape, cmd+shift+4, alt+tab
Minimal parameter descriptions lack constraints and context. E.g., 'X coordinate' does not specify valid range, units (pixels vs points), or screen bounds. LLMs cannot validate inputs without explicit constraints.
No error recovery guidance. Tools return raw JSON success/failure without actionable next steps. E.g., if click fails due to permission, the response should hint 'Grant Screen Recording permission in System Settings.'
Destructive operations (click, type_text, drag, activate_app) lack idempotency hints or confirmation patterns. Agents cannot know if retrying is safe or if it will duplicate actions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
List all visible windows on screen. Returns window IDs, app names, titles, and bounds.
Move the mouse cursor to screen coordinates
Right click at screen coordinates
Capture a screenshot of the macOS screen. Returns base64-encoded PNG image data. Requires Screen Recording permission.
Scroll at screen coordinates in a direction
Type a string of text at the current cursor position
Output schema inconsistency. screenshot returns structured {type, data, mimeType} + text; most others return raw JSON.stringify(result). Agents cannot reliably parse or chain results.
No permission gates or audit trail. Tools execute immediately without verifying user/agent authority or logging who called what. Sensitive operations (activate_app, type_text) should require permission checks.