A side-by-side look at the Arc Control (macOS) and MacOS MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Arc Control (macOS) for browser automation work as a local process; choose MacOS MCP for browser automation as a local process. You can also run both side by side in one mcpServers block.
list_tabs, get_current_tab, switch_to_tab.Click, Type, Scroll.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Browser Automation | Browser Automation |
| Quality signal | 56/100 · Good | 60/100 · Good |
| 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 | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 1 | 208 |
| Directory activity | 1 views 0 installs 0 upvotes | 4 views 0 installs 0 upvotes |
| Tools | 38 | 10 |
| Full listing | View Arc Control (macOS) | View MacOS MCP |
list_tabsEvery tab, or narrow with `scope: "own"`, `query`, `space`, `window_id`. Rows are flagged `mine` and `isActive`.get_current_tabThe tab a call with no `tab_id` would act on.switch_to_tabMake a tab active in its window. `activate` also brings Arc to the front. Waits for you to stop typing.close_tabClose one tab.close_own_tabsClose every tab this agent opened, leaving the user's alone. `include_stale` also closes tabs leaked by a dead previous run of the same label.arc_statusArc's version and whether it is the frontmost app, owned tabs, the agent window (id, placement, display, minimized), whether Accessibility is available, your current idle time, whether the agent space exists, what a call with no `tab_id` resolves to (reported separately for read-only and for changi…open_urlOpen a URL in the agent window, launching Arc if needed. Waits for you to stop typing, and reports `focusRestored` and `waitedForUserMs`. Options for `new_tab`, target `space`, `little_arc`, `activate`, `wait_until_loaded`.go_backMove a tab through its history, verified by checking the URL actually changed.reload_tabReload a tab.wait_for_loadPoll until the document is ready, optionally until the URL contains a substring. Also reads Arc's `loading` flag (see [Loading tabs](#loading-tabs-and-stop_loading)), so a hung page shows up as `ready: "loading"` instead of a stalled call.stop_loadingPress the stop button on a tab that will not finish loading, which also unblocks every page tool on it.get_page_contentVisible text, whole page or every element matching a selector, joined. Always reports `matched`, so a partial answer is never silent, and flags truncation.ClickClick at coordinates with support for left, right, and double-clickTypeType text at cursor position, optionally clearing existing textScrollScroll vertically or horizontally in focused window or regionsMoveMove mouse pointer or drag to coordinatesShortcutPress keyboard shortcuts (Cmd+C, Cmd+Tab, etc.)AppLaunch applications, manage windows (resize/move), switch between apps. Supports app names and bundle IDsDesktopCreate a new Mission Control Space (virtual desktop) via Accessibility, verifying the space count increasedShellExecute commands or AppleScript. Use `mode='osascript'` for AppleScriptScrapeExtract and convert webpage content to Markdown formatWaitPause execution for a defined durationPaste 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": {
"arc-control-macos": {
"command": "npx",
"args": [
"-y",
"arc-control-mcp@latest"
]
}
}
}
{
"mcpServers": {
"macos-mcp": {
"command": "uvx",
"args": [
"macos-mcp"
]
}
}
}