Hunch MCP server
io.github.PrithviSeran/hunch·v0.6.6·22 starsFocus-free macOS control for AI agents: drive your real Mac apps in the background, no stolen focus.
22 stars213 downloads/wk
Reviews
Write oneNobody has reviewed Hunch yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
Hunch tools (32, 3 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
actapp_capabilitiesapp_recoverapp_targetapplescriptwrite actionRun AppleScript to control scriptable native apps FOCUS-FREE via Apple Events — the app's own command layer, not its UI/keyboard/focus. Unlocks Mail, Messages, Notes, Reminders, Calendar, Music, Finder, Safari, Keynote, etc. (e.g. 'tell application "Music" to play', or 'tell application "Safari" to get URL of current tab of front window'). Returns the script's output or the error.
clipboard_getRead the clipboard's text — focus-free (no ⌘C needed).
clipboard_setwrite actionPut text on the clipboard — focus-free (move data around without ⌘C/⌘V keystrokes).
file_opFocus-free filesystem operations by path: op='move' or 'copy' (src -> dst; dst may be a folder or a new path), or op='mkdir' (create a folder at src). For MULTIPLE operations pass batch=[{"op","src","dst"},...] and they all run in ONE call — sorting a folder is one call, not one per file. To delete, use `trash`.
findSearch an app's WHOLE accessibility tree for matching elements — the cheap way to locate one control in a huge window without reading a full snapshot. Filters: `role` (e.g. "button", "AXTextField", "row" — case-insensitive, "AX" prefix optional) and/or `name_contains` (case-insensitive substring of the element's title/description/value). Returns one line per match: an ancestor breadcrumb, then the
focus_appBring an app to the front (reliable OS call), and target it for snapshots. ALWAYS pass `reason` — one short sentence for WHY you're switching the user's view (shown to them in the focus warning).
launch_appLaunch or focus an app, then target it (reliable OS call — use instead of clicking Dock icons). In simultaneous mode it launches in the BACKGROUND so it doesn't steal your view. Set force_accessibility=True for an Electron/Chromium app (Spotify, Discord, Slack, Notion, VS Code) whose tree reads empty — it relaunches the app so its accessibility tree becomes visible to snapshot. Pass `reason` — one
list_appsList the running GUI apps you can target with snapshot(app=...).
list_credentialsList the service NAMES the user has saved credentials for (e.g. "google", "openai"). Returns names + kind ONLY — never any values. Two kinds: username+password logins (use web_fill_login) and single protected values like API keys (use web_fill_secret).
notify_userAlert the user when Hunch needs them SHORTLY — to finish a login, approve a 2FA / verification prompt, solve a captcha, or make a decision. Brings the Hunch window back up (or fires a desktop notification when running outside the app and the user enabled `notifications.user_attention`). Call this the moment you hit a step only the human can do, so they don't have to watch the screen.
open_fileOpen a file/folder/URL with its default app (or a named app) — focus-free launch. Also opens web URLs and app deep-links (e.g. 'spotify:track:...', 'mailto:...').
quit_appQuit an app via the OS — reliable regardless of focus (use instead of ⌘Q, which is unreliable on background apps).
request_focusAsk the user's permission BEFORE a focus-stealing step you'll do via OTHER tools (e.g. focus_app / launch_app bringing an app to the front). Pops a one-click 'Go ahead / Cancel' dialog and returns their choice. You do NOT need this for `act`'s key / click_xy / ref-less type — act pops the same dialog automatically. If approved, do the action, then return focus to the user's previous app when done.
reveal_in_finderReveal/select item(s) in a Finder window by path. (This one does bring Finder forward — it's an explicit 'show me these files' action.)
screenshotSee the screen as a PNG image — for surfaces the tree genuinely can't show (canvas apps, an image, a photo/file-preview thumbnail). NOT for reading UI you could get from `snapshot`: if the tree looked thin, `click` into the pane and re-`snapshot` instead. A screenshot only shows the FRONTMOST app, so in the background it usually shows the user's OTHER app, not your target — and it can't be acted o
simultaneous_modeTurn simultaneous mode on/off. When ON, Hunch never steals your cursor/keyboard or switches your view: it reads apps WITHOUT bringing them forward, launches apps in the background, runs only the focus-free actions (click/select/set-a-field by ref), and REFUSES shared-input actions (typed keystrokes, key combos, pixel clicks) that would disrupt you. Background AX coverage is operation- and state-de
snapshotSee the screen as an accessibility tree. Each element is one line tagged with a [ref] like [e12]; you act on elements by ref. Pass an app name to target that app's focused window, or leave blank for the frontmost app.
trashMove file(s)/folder(s) to the Trash BY PATH — FOCUS-FREE and reversible. Use this to delete files instead of driving Finder + ⌘⌫ (which steals focus and is fragile). Accepts absolute or ~ paths. Files go to the Trash, so it's recoverable.
web_actwrite actionExecute focus-free page actions on the bound Safari or CDP app, then return the updated tree. Each: {"action":"click","ref":"e12"} | {"action":"type","ref":"e12","text":"hi"} | {"action":"click_xy","x":500,"y":250} | {"action":"drag","from_x":10,"from_y":20, "to_x":200,"to_y":220} | {"action":"key","key":"return"} | {"action":"navigate","url":"https://..."}. `type` REPLACES a field's content (no m
web_fill_loginFill the CURRENT CDP page's login form (username + password) using the user's SAVED credential for `service`, WITHOUT the values ever entering your context. You pass ONLY the service name; Hunch reads the secret from the macOS Keychain and types it straight into the page, returning only which fields were filled. Call web_open first and make sure the login form is visible. For two-step logins (e.g.
web_fill_secretType the user's SAVED protected value (API key / token) for `service` into a field on the CURRENT CDP page, WITHOUT the value ever entering your context. web_snapshot first and pass the target field's `ref`; Hunch reads the secret from the macOS Keychain and types it straight into that field, replacing its content — you only learn that it was filled. Omit `ref` to type at the currently-focused ele
web_loginSign into the persistent Hunch CDP profile ONCE (there is no way to reuse the user's existing browser login over CDP — modern Chrome + site device-bound cookies prevent it). `app` is the BROWSER name (default "Google Chrome"); `url` is the site's login/home page (e.g. "https://mail.google.com/") — do not pass a website as `app`. Opens the browser in the BACKGROUND at that URL (it does NOT steal fo
web_openOpen Safari through the Hunch extension, or Chromium/Electron through CDP, for FOCUS-FREE background control — read, click, and type in the BACKGROUND without stealing your cursor/keyboard or switching your view. This is the way to drive these apps simultaneously with the user (AX can't). Then use web_snapshot / web_act.
web_restartRecover a BROKEN CDP browser by quitting and reopening it fresh. Kills only the Hunch CDP instance (never the user's normal browser), relaunches on the SAME persistent profile (login kept), reloads `url` if given, and returns the fresh tree.
web_screenshotPNG of the CDP-controlled page ITSELF (focus-free, via CDP) — for genuinely visual web content the tree can't convey (a chart, canvas, image, rendered PDF). Use THIS, never the OS `screenshot` tool, for anything in the background browser: the OS one grabs the physical screen and would capture the user's own foreground window instead of this page. Call web_open first.
web_snapshotLook at the bound Safari or CDP browser/Electron page as an accessibility tree ([ref] per element). Call web_open first.
web_switch_tabSwitch the CDP session to a specific browser tab by index (see web_tabs), then web_snapshot to read it. Use when auto-follow landed on the wrong tab, or to return to an earlier one.
web_tabsList the open browser tabs/windows in the bound Safari or CDP session — index, title, URL, and which is current (*). New tabs opened by a click or form are AUTO-FOLLOWED on the next web_snapshot; use web_switch_tab only to override that (go back to a prior tab, or pick a different one).
Public scan report
scanner v0.1.10 · 2026-10-14 · same rubric, same numbers if you re-run it
- Code scan32 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 4 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
How Hunch compares
Against every graded Productivity MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 92/100
- higher than 90% of 1,299 Productivity servers
- Tools
- 32
- the typical Productivity server has 7
- Tools that change things
- 9%
- typical: 0%. Fewer write tools means less an agent can break
- GitHub stars
- 22
- more than 83% of 854 Productivity servers
- Downloads a week
- 213
- more than 72% of 427 Productivity servers with a package
What its tools let an agent do: 26 read · 1 create · 3 change · 1 delete · 1 send or post
Install Hunch in Claude Code, Cursor or VS Code
claude mcp add hunch -- uvx hunch-sdk
What the publisher says
From the Hunch repository's README, as published. We do not edit it. Read it on GitHub
<!-- mcp-name: io.github.PrithviSeran/hunch -->
Hunch
Drive your Mac with any LLM: focus-free, in the background, over MCP.
Hunch is an MCP server that gives an LLM agent hands on your Mac: your installed apps, your logged-in sessions, your files, without taking over your screen. While you keep working in the foreground, an agent can read a background app's UI, click its buttons, drive Mail or Music by AppleScript, fill a web form, or move files. It works on real native apps, not just a browser.
Works best with modern LLMs. Hunch ships a detailed playbook as MCP server instructions;
capable tool-using models (Claude Sonnet/Opus-class and up) follow it well. Smaller models may
pick clumsier paths (screenshots and keystrokes instead of tree reads and clicks).
The four layers
Hunch always prefers the most direct layer. It's faster, more reliable, and (except the last) never touches your screen:
A gated last resort (screenshot + coordinate clicks/keystrokes) exists for apps whose accessibility tree is truly empty. It steals focus, so it asks you first.
For focus-free visual work in Safari, open a dedicated extension-owned window with webopen(..., app="Safari", newwindow=True). webscreenshot captures that background window, and webact can use the returned pixel coordinates without moving the shared mouse, keyboard, or foreground window. The extension remains necessary: it owns the isolated Safari window and dispatches renderer-local actions that a physical screen capture cannot.
How it works (no server, no cloud)
"MCP server" undersells how local this is. hunch serve is a plain Python process that your MCP host (Claude Desktop, Cursor, …) spawns as a child process and talks to over JSON-RPC on stdin/stdout (MCP's stdio transport). There is no HTTP endpoint, no port Hunch listens on, no daemon, and no telemetry. When your host quits, Hunch is gone.
The tools are direct macOS API calls in-process: the Accessibility framework via pyobjc, osascript for AppleScript, OS APIs for files/clipboard, a local WebSocket to Chromium's DevTools port, and the signed local Safari extension bridge. The optional Safari companion uses an authenticated loopback connection solely to relay typed commands to Apple's sandboxed extension. Browsing traffic still comes from the selected browser. What the model sees is whatever the tools return through your host; nothing else leaves the machine.
Benchmarks
Hunch is measured against other macOS computer-use agents on a real, logged-in Mac in mac-agent-bench — same brain, different hands: identical claude -p per task, only the MCP adapter differs. It scores task success with programmatic checkers and disturbance: how much the agent hijacks your cursor and foreground while it works.
Across 5 complex multi-step tasks (n=3):
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Hunch: common questions
- Is Hunch MCP server safe?
- Yes, by our scan: it is graded A (92/100). Read the Hunch safety report
- How do I install Hunch?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does Hunch need an API key?
- Not as far as the registry entry and our scan can tell: no credentials are declared or required.
- Is Hunch maintained?
- The last commit was 24 days ago (2026-10-11). The latest release is v0.6.6.
- What can I use instead of Hunch?
- Servers from other publishers that do the same job: Argent MCP server, Flutter MCP Toolkit MCP server and iPhone Use MCP server. Compare all Hunch alternatives.
- How does Hunch compare with other Productivity MCP servers?
- safety score 92/100 (higher than 90% of 1,299 Productivity servers); tools 32 (the typical Productivity server has 7); tools that change things 9% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.
Alternatives to Hunch
Same job from other publishers: the closest match first, then the best rated.
- ArgentDrive iOS Simulators, Android emulators, TVs and Electron/web apps from your coding agentnot reviewedWidely usedA
Flutter MCP ToolkitInspect and drive Flutter debug apps/games: semantic snapshots, search, and custom client toolsnot reviewedGrowingA
iPhone UseDrive a real iPhone from a Mac: read the screen as text, tap, type, scroll, replay saved flows.not reviewedGrowingB- TailscaleDrive a Tailscale node and its tailnet through the CLI and the control-plane APInot reviewedGrowingB
- gflow-cliDrive Google Flow from an agent: Veo video and Imagen image generationnot reviewedEstablishedA