A side-by-side look at the Hammerspoon and Desktop Touch MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Hammerspoon for os automation work as a local process; choose Desktop Touch MCP for os automation as a local process. You can also run both side by side in one mcpServers block.
hs_list_windows, hs_focus_window, hs_move_window.DESKTOP_TOUCH_MCP_HOME, GITHUB_TOKEN, GH_TOKEN, DESKTOP_TOUCH_MCP_ALLOW_UNVERIFIED.desktop_discover, desktop_act, desktop_state.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | OS Automation | OS Automation |
| Quality signal | 53/100 · Good | 65/100 · Great |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | No auth required |
| Pricing | Not declared | Free |
| Required env vars | None listed | DESKTOP_TOUCH_MCP_HOMEGITHUB_TOKENGH_TOKENDESKTOP_TOUCH_MCP_ALLOW_UNVERIFIED |
| Verified owner | Community listing | Community listing |
| GitHub stars | 2 | 22 |
| Directory activity | 0 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 75 | 23 |
| Full listing | View Hammerspoon | View Desktop Touch MCP |
hs_list_windowsAll visible windows with app, title, frame, idhs_focus_windowBring window to front by id or title matchhs_move_windowMove/resize window by idhs_window_layout16 presets (halves, thirds, quarters, grid, cascade, center…) + custom fractional layoutshs_save_layoutSnapshot all window positions as a named layouths_restore_layoutRestore a saved layout (matches by app + title)hs_list_layoutsList saved layout nameshs_spaces_listAll spaces per screen with active markershs_spaces_activeCurrently focused space + screenhs_spaces_gotoSwitch by ID or indexhs_spaces_move_windowMove window to another space (optionally follow)hs_spaces_addCreate a new spacedesktop_discoverObserve the desktop. Returns interactive entities with leases (UIA, CDP, Terminal, Visual SoM).desktop_actPerform actions (click, type, set a value, select) on entities via lease validation. Returns semantic diffs — plus an optional `roiCapture` (changed-region PNG + next-target preview) on visual-only targets.desktop_stateLightweight check of focus, active window, cursor, and Auto-Perception attention signal.screenshotMulti-mode capture: `detail='text'` (UIA/OCR), `diffMode` (P-frame), `dotByDot` (1:1), and `background`. Returns a cheap `screenshot://by-ref/{id}` link to the saved image instead of inlining pixels every time.screenshot_queryInspect and prune the on-disk screenshot cache behind the by-ref links: `screenshot_query` lists saved captures without re-reading pixels; `screenshot_gc` reclaims space by retention policy (dry-run by default).workspace_snapshotInstant session orientation: all window thumbnails + UI summaries in one call.server_statusDiagnostic check for native engine health and feature activation.keyboardSend keyboard input. Supports background input (WM_CHAR) and IME-safe clipboard bypass.mouse_clickPrecision coordinate-based interaction with homing and force-focus protection.scrollMulti-strategy: `raw` (notches), `to_element`, `smart` (virtual lists), and `capture` (stitch).click_elementLegacy UIA-based click by name/ID (fallback when entities are unavailable).browser_openIdempotent debug-mode launch and reliable navigation.Paste 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": {
"hammerspoon": {
"command": "npx",
"args": [
"-y",
"hammerspoon-mcp"
]
}
}
}
{
"mcpServers": {
"harusame64-desktop-touch-mcp": {
"command": "npx",
"args": [
"-y",
"@harusame64/desktop-touch-mcp"
],
"env": {
"DESKTOP_TOUCH_MCP_HOME": "YOUR_DESKTOP_TOUCH_MCP_HOME_HERE",
"GITHUB_TOKEN": "YOUR_GITHUB_TOKEN_HERE",
"GH_TOKEN": "YOUR_GH_TOKEN_HERE",
"DESKTOP_TOUCH_MCP_ALLOW_UNVERIFIED": "YOUR_DESKTOP_TOUCH_MCP_ALLOW_UNVERIFIED_HERE"
}
}
}
}