A side-by-side look at the Mac Control MCP and Clickr MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Mac Control MCP for os automation work as a local process; choose Clickr for os automation. You can also run both side by side in one mcpServers block.
capture_screen, capture_screen_v2, capture_window.check_permissions, list_displays, list_windows.Rows where the two servers differ are marked.
| Spec | C Clickr | |
|---|---|---|
| Category | OS Automation | OS Automation |
| Quality signal | 55/100 · Good | 49/100 · Fair |
| Install command | Confirmed | Not confirmed yet |
| Transport | Local subprocess (stdio) | — |
| Auth | Not declared | No auth required |
| Pricing | Not declared | Free |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 18 | 1 |
| Directory activity | 3 views 0 installs 0 upvotes | 0 views 0 installs 0 upvotes |
| Tools | 10 | 19 |
| Full listing | View Mac Control MCP | View Clickr |
capture_screenmain display (or a rectangular region within it) to a PNG file, returns the file path + width/height. Simple, synchronous, no size limits applied.capture_screen_v2main display only, but stores the PNG as a content-addressed artifact under `~/.mac-control-mcp/artifacts/<sha256>.png` and returns `{content_ref, bytes, sha256}`. Defaults to `inline=false` and downscales to `max_dimension`/`max_bytes` (4000px / 4MB by default) specifically to avoid blowing up an…capture_windowscreenshots one specific window by PID (optionally filtered by `title_contains`), not the whole display.capture_displayscreenshots one specific physical display by its index from `list_displays`, for multi-monitor setups.list_elementslists actionable elements for a PID (a flat, practical "what can I click" view).find_elementreturns the *first* element matching a role/title filter for a PID.find_elementssame matching as `find_element`, but returns *all* matches, not just the first.query_elementsregex search over role/title/value (falls back to case-insensitive substring on invalid regex); use when a plain role/title filter isn't precise enough.get_ui_treewalks the *full* accessibility tree of a process, including containers, and assigns stable element IDs for follow-up calls. Heavier than `list_elements`/`find_element(s)`, but the only one that gives you structure/hierarchy.ax_tree_augmentedlike `get_ui_tree`, but does one OCR pass and geometrically joins OCR-derived labels onto AX nodes that have no native label. Use it specifically for Electron/Chromium/Canvas apps where the native AX tree is sparse and unlabeled; it's the expensive option (an OCR pass), so reach for `get_ui_tree` f…check_permissionsReport Accessibility / Screen Recording status and how to fix themlist_displaysEvery display's position and size in global pointslist_windowsOn-screen windows with app, title, and boundslist_appsRunning applications with pid and bundle idfind_elementsLocate controls as text with exact click coordinates — prefer over screenshotread_textOn-device OCR of a region; returns text, no imageelement_atDescribe the accessibility element at a coordinatescreenshotCapture a display, region, window, app, or the whole desktopclickClick at a global coordinate, with modifiers and multi-clickmove_mouseMove the pointer (hover states)dragPress, drag along an interpolated path, releasescrollScroll the wheel, optionally after moving the pointerPaste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"mac-control-mcp": {
"command": "npx",
"args": [
"-y",
"mac-control-mcp"
]
}
}
}
No confirmed install command for Clickr yet — follow the setup steps linked from its listing page rather than a guessed package name.