Arc browser MCP for macOS: agent window, snapshots, DevTools input, guardrails
Connect Runs on your machine
claude mcp add arc-control-mcp -e ARC_MCP_LABEL=<ARC_MCP_LABEL> -e ARC_MCP_SPACE=<ARC_MCP_SPACE> -e ARC_MCP_STATE_DIR=<ARC_MCP_STATE_DIR> -e ARC_MCP_WINDOW=<ARC_MCP_WINDOW> -e ARC_MCP_WINDOW_PLACEMENT=<ARC_MCP_WINDOW_PLACEMENT> -e ARC_MCP_IDLE_MS=<ARC_MCP_IDLE_MS> -e ARC_MCP_IDLE_WAIT_MS=<ARC_MCP_IDLE_WAIT_MS> -e ARC_MCP_ARC_DATA_DIR=<ARC_MCP_ARC_DATA_DIR> -e ARC_MCP_ALLOW_HISTORY=<ARC_MCP_ALLOW_HISTORY> -e ARC_MCP_CDP=<ARC_MCP_CDP> -e ARC_MCP_CDP_PORT=<ARC_MCP_CDP_PORT> -e ARC_MCP_ALLOWED_ORIGINS=<ARC_MCP_ALLOWED_ORIGINS> -e ARC_MCP_BLOCKED_ORIGINS=<ARC_MCP_BLOCKED_ORIGINS> -e ARC_MCP_BLOCK_READS=<ARC_MCP_BLOCK_READS> -e ARC_MCP_READ_ONLY=<ARC_MCP_READ_ONLY> -e ARC_MCP_AUDIT_LOG=<ARC_MCP_AUDIT_LOG> -- npx -y [email protected]
{
"mcpServers": {
"arc-control-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"ARC_MCP_LABEL": "<ARC_MCP_LABEL>",
"ARC_MCP_SPACE": "<ARC_MCP_SPACE>",
"ARC_MCP_STATE_DIR": "<ARC_MCP_STATE_DIR>",
"ARC_MCP_WINDOW": "<ARC_MCP_WINDOW>",
"ARC_MCP_WINDOW_PLACEMENT": "<ARC_MCP_WINDOW_PLACEMENT>",
"ARC_MCP_IDLE_MS": "<ARC_MCP_IDLE_MS>",
"ARC_MCP_IDLE_WAIT_MS": "<ARC_MCP_IDLE_WAIT_MS>",
"ARC_MCP_ARC_DATA_DIR": "<ARC_MCP_ARC_DATA_DIR>",
"ARC_MCP_ALLOW_HISTORY": "<ARC_MCP_ALLOW_HISTORY>",
"ARC_MCP_CDP": "<ARC_MCP_CDP>",
"ARC_MCP_CDP_PORT": "<ARC_MCP_CDP_PORT>",
"ARC_MCP_ALLOWED_ORIGINS": "<ARC_MCP_ALLOWED_ORIGINS>",
"ARC_MCP_BLOCKED_ORIGINS": "<ARC_MCP_BLOCKED_ORIGINS>",
"ARC_MCP_BLOCK_READS": "<ARC_MCP_BLOCK_READS>",
"ARC_MCP_READ_ONLY": "<ARC_MCP_READ_ONLY>",
"ARC_MCP_AUDIT_LOG": "<ARC_MCP_AUDIT_LOG>"
}
}
}
}
{
"mcpServers": {
"arc-control-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"ARC_MCP_LABEL": "<ARC_MCP_LABEL>",
"ARC_MCP_SPACE": "<ARC_MCP_SPACE>",
"ARC_MCP_STATE_DIR": "<ARC_MCP_STATE_DIR>",
"ARC_MCP_WINDOW": "<ARC_MCP_WINDOW>",
"ARC_MCP_WINDOW_PLACEMENT": "<ARC_MCP_WINDOW_PLACEMENT>",
"ARC_MCP_IDLE_MS": "<ARC_MCP_IDLE_MS>",
"ARC_MCP_IDLE_WAIT_MS": "<ARC_MCP_IDLE_WAIT_MS>",
"ARC_MCP_ARC_DATA_DIR": "<ARC_MCP_ARC_DATA_DIR>",
"ARC_MCP_ALLOW_HISTORY": "<ARC_MCP_ALLOW_HISTORY>",
"ARC_MCP_CDP": "<ARC_MCP_CDP>",
"ARC_MCP_CDP_PORT": "<ARC_MCP_CDP_PORT>",
"ARC_MCP_ALLOWED_ORIGINS": "<ARC_MCP_ALLOWED_ORIGINS>",
"ARC_MCP_BLOCKED_ORIGINS": "<ARC_MCP_BLOCKED_ORIGINS>",
"ARC_MCP_BLOCK_READS": "<ARC_MCP_BLOCK_READS>",
"ARC_MCP_READ_ONLY": "<ARC_MCP_READ_ONLY>",
"ARC_MCP_AUDIT_LOG": "<ARC_MCP_AUDIT_LOG>"
}
}
}
}
{
"servers": {
"arc-control-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"ARC_MCP_LABEL": "<ARC_MCP_LABEL>",
"ARC_MCP_SPACE": "<ARC_MCP_SPACE>",
"ARC_MCP_STATE_DIR": "<ARC_MCP_STATE_DIR>",
"ARC_MCP_WINDOW": "<ARC_MCP_WINDOW>",
"ARC_MCP_WINDOW_PLACEMENT": "<ARC_MCP_WINDOW_PLACEMENT>",
"ARC_MCP_IDLE_MS": "<ARC_MCP_IDLE_MS>",
"ARC_MCP_IDLE_WAIT_MS": "<ARC_MCP_IDLE_WAIT_MS>",
"ARC_MCP_ARC_DATA_DIR": "<ARC_MCP_ARC_DATA_DIR>",
"ARC_MCP_ALLOW_HISTORY": "<ARC_MCP_ALLOW_HISTORY>",
"ARC_MCP_CDP": "<ARC_MCP_CDP>",
"ARC_MCP_CDP_PORT": "<ARC_MCP_CDP_PORT>",
"ARC_MCP_ALLOWED_ORIGINS": "<ARC_MCP_ALLOWED_ORIGINS>",
"ARC_MCP_BLOCKED_ORIGINS": "<ARC_MCP_BLOCKED_ORIGINS>",
"ARC_MCP_BLOCK_READS": "<ARC_MCP_BLOCK_READS>",
"ARC_MCP_READ_ONLY": "<ARC_MCP_READ_ONLY>",
"ARC_MCP_AUDIT_LOG": "<ARC_MCP_AUDIT_LOG>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
ARC_MCP_LABELOptional | Names this agent's tab ownership. Two agents with different labels never see each other's owned tabs. Defaults to "default". |
ARC_MCP_SPACEOptional | With ARC_MCP_WINDOW=space, the Arc space new tabs open into, when a space with that name exists. Arc will not let a script create a space, so make it by hand. Defaults to "Agent". |
ARC_MCP_STATE_DIROptional | Directory where per-session tab ownership is recorded, so a restarted agent can clean up the tabs its previous run left behind. Defaults to ~/Library/Application Support/arc-control-mcp. |
ARC_MCP_WINDOWOptional | "dedicated" keeps agent tabs in one separate agent window, never the user's own. "space" puts them in the Agent space of the user's window. Defaults to "dedicated". |
ARC_MCP_WINDOW_PLACEMENTOptional | Where the agent window goes once, at creation: "auto" (largest non-main display, else where Arc puts it), "second-display", "minimized" (experimental) or "none". Needs Accessibility. Defaults to "auto". |
ARC_MCP_IDLE_MSOptional | How many milliseconds the user must have been idle before the server does anything visible. 0 turns the activity gate off. Defaults to 1500. |
ARC_MCP_IDLE_WAIT_MSOptional | How many milliseconds to wait for that pause before failing with userActive true. Defaults to 15000. |
ARC_MCP_ARC_DATA_DIROptional | Directory the local data tools (sidebar_tree, find_stale_tabs, search_archive, search_history) read Arc's files from. Defaults to ~/Library/Application Support/Arc. |
ARC_MCP_ALLOW_HISTORYOptional | Set to 1 to let search_history run. Off by default, and any other value leaves it off. |
ARC_MCP_CDPOptional | Set to 0 to disable the DevTools engine (trusted input, screenshots, console and network capture). On by default, and inert until Arc is launched with --remote-debugging-port. |
ARC_MCP_CDP_PORTOptional | The DevTools port to probe on 127.0.0.1. The host is fixed. Defaults to 9222. |
ARC_MCP_ALLOWED_ORIGINSOptional | Guardrail. Comma list of origins the agent may touch (host, *.host, scheme://host[:port], file://, about:). Anything not listed is refused. Unset means no allow list. |
ARC_MCP_BLOCKED_ORIGINSOptional | Guardrail. Comma list of origins the agent may not touch. Wins over the allow list. Unset means no block list. |
ARC_MCP_BLOCK_READSOptional | Set to 1 to apply the origin lists to read tools as well as changing ones. Off by default. |
ARC_MCP_READ_ONLYOptional | Set to 1 to expose only the read-only tools. Off by default. |
ARC_MCP_AUDIT_LOGOptional | Path of a file that gets one JSON line per changing call (time, tool, tab, origin, ok, error), never typed values or script code. Unset means no audit log. |
Details
| Package | [email protected] (NPM, stdio) |
| First published | 5 Oct 2026 |
| Last updated | 5 Oct 2026 |
| Registry name | io.github.DB-25/arc-control-mcp |
More browser automation servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
