A side-by-side look at the Arc Control (macOS) and Gecko 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 Gecko 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.list_tabs, open_tab, get_active_tab.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Browser Automation | Browser Automation |
| Quality signal | 56/100 · Good | 51/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 1 | 2 |
| Directory activity | 1 views 0 installs 0 upvotes | 0 views 0 installs 0 upvotes |
| Tools | 38 | 36 |
| Full listing | View Arc Control (macOS) | View Gecko 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.list_tabsList all open tabs (title, URL, browserId, active, pinned).open_tabOpen a new tab at a URL; **returns the new tab's `browserId`** so you can target it.get_active_tabReturn the active tab's title, URL and browserId.navigate_tabNavigate an existing tab to a URL.close_tabClose a tab.read_pageRead a tab's content as clean Markdown (or HTML / accessibility tree). Output is capped (default 25 KB) to protect the context.findFast element locator** — search a page server-side by visible text and/or tag; returns a compact list of ready-to-use CSS `selector`s (~1 KB) instead of the whole HTML. Use it to find a button/link/field, then act on the selector.snapshotStructured page map: Markdown with inline `fp:` refs + an element selector map — locate elements without grepping HTML, then act via a `ref`.screenshotCapture a screenshot of a tab (viewport or full page).launch_floorpEnsure Floorp is running — launches it if the API isn't reachable (Windows).launchStart any Firefox-based browser (Firefox, LibreWolf, Zen…) with Marionette enabled so gecko-mcp can drive it.clickClick an element by CSS selector **or a `ref` from `snapshot`**; auto-scrolls it into view first.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": {
"arc-control-macos": {
"command": "npx",
"args": [
"-y",
"arc-control-mcp@latest"
]
}
}
}
{
"mcpServers": {
"gecko-mcp": {
"command": "npx",
"args": [
"-y",
"gecko-mcp"
]
}
}
}