03/Work, selected
03 / 08
arc-control-mcp launch film: text alternative Landscape and vertical cuts share one timeline and run 17 seconds, silent apart from a quiet music bed and a few soft interface sounds. Nothing is spoken. In the vertical cut the transcript sits above the browser window instead of beside it. 0:00 to 0:03 HOOK On screen: ARC-CONTROL-MCP 0.3.0 (small label) On screen: "Agents drive your browser." On screen: "Your tab stays yours." (the word "yours." is in an italic serif) Visual: a near-black purple field with a faint drifting grid. The two lines of white type arrive word by word, then hold. A thin violet line draws under them. At about 2.5s the first line leaves and the second line moves to the top of the frame and shrinks (vertical cut) or fades (landscape). 0:03 to 0:05 THE AGENT IS GIVEN A TASK On screen (terminal, typed): "> Fill in the contact form. Leave my tabs alone." Visual: two windows rise into view. On one side a terminal titled "claude code"; on the other a browser window labelled "Arc" showing the viewer’s own page, "Saturday itinerary" (09:40 Train to the coast, 11:15 Walk the harbor loop, 13:00 Lunch, somewhere with a view in the landscape cut). The sidebar lists a "Personal" space with "Saturday itinerary" selected, and an empty "Agent" space reading "no tabs". A tag reads "Your tab, selected". The article keeps slowly scrolling and a text caret blinks, showing the viewer is reading. 0:04.5 to 0:05.5 FIRST TOOL CALL: arc_status On screen: "arc_status" On screen: "agent space: Agent" On screen: "read-only, no tab_id: active tab" On screen: "changing, no tab_id: refused" Visual: a tool call line with a violet dot, then three result lines. It states that a tool that changes a tab is refused when no tab is named. 0:05.5 to 0:07 OPEN A PAGE WITHOUT TAKING YOUR TAB On screen: "open_url", url "https://forms.example.org/contact" On screen: "opened in space Agent" On screen: "previous selection restored" On screen (browser): "Contact form" appears under the Agent space; "Selection restored" notice Visual: at 5.9s a new "Contact form" row appears in the Agent space. For a fraction of a second the new row is highlighted as selected, then the highlight snaps back to "Saturday itinerary". A small notice with an orange dot reads "Selection restored" (bottom of the sidebar in the vertical cut, top right of the page in the landscape cut). A light-coloured card labelled "Agent space, background tab" slides up over the lower part of the browser window showing a contact form, loading for a moment. 0:07 to 0:08 READ THE PAGE: get_page_content On screen: "get_page_content", selector "form" On screen: "matched: 1" Visual: a violet outline traces the whole contact form in the agent card. 0:08 to 0:10 FILL THE FORM: fill, fill On screen: "fill", selector "text=Name", value "Ada" ; "matched: 1" On screen: "fill", selector "text=Email", value "ada@example.org" ; "matched: 1" Visual: the outline moves to the Name field and the name "Ada" is typed in; then to the Email field and "ada@example.org" is typed in. The viewer’s own page behind it does not change. 0:10 to 0:10.5 CLICK: click On screen: "click", selector "text=Send" ; "matched: 1" On screen (form button): "Send" then "Sent" Visual: the Send button is outlined, presses down, and turns green with the label "Sent". 0:10.4 to 0:11 CLEAN UP: close_own_tabs On screen: "close_own_tabs" On screen: "closed: 1" Visual: the agent card slides away, the "Contact form" row leaves the sidebar and the Agent space returns to "no tabs". "Saturday itinerary" is still selected and still scrolling. 0:11 to 0:14 THE TOOL LIST On screen: a counter climbing from 1 to 26, with the label "TOOLS" and then "IN SIX MODULES" On screen, scrolling list with module tags, in order: Tabs: list_tabs, get_current_tab, switch_to_tab, close_tab, close_own_tabs, arc_status Navigation: open_url, go_back, go_forward, reload_tab, wait_for_load Content: get_page_content, get_html, query_elements, get_links, get_page_info Interaction: click, fill, select_option, press_key, scroll, wait_for_selector Spaces: list_spaces, focus_space Scripting: execute_javascript, batch Visual: the windows give way to a black screen. A large white number counts up while the 26 tool names appear one after another in a monospaced list, the newest briefly highlighted in pale violet, each with a small violet module label on the right. The list scrolls up as it fills (a tall column in the vertical cut). The counter ends on 26. 0:14 to 0:17 END CARD On screen: "arc-control-mcp" On screen (typed into a command box): "$ npm i arc-control-mcp" On screen: "BUILT BY DHRUV KAMALESH KUMAR" (small monospaced capitals; two lines in the vertical cut) Visual: the product name lands in large white type with a thin violet line beneath it. An install command is typed into a rounded box with a blinking cursor. The credit fades in last. A slow push-in continues to the end while the music fades out. Notes: the page names, "forms.example.org", "notes.example.org", and the name and email entered are invented stand-ins.
01/The problem
The Chrome MCP server can’t be pointed at Arc.
The bundled Chrome MCP server cannot be pointed at Arc, and Arc’s scripting dictionary differs from Chrome’s in exactly the places that matter.
02/What I built
50 tools that let an agent use the browser I’m signed in to, in a window of its own.
- 01
50 tools in twelve modules read pages, click, fill forms and run JavaScript over Apple Events, using the browser I am already signed in to. A page snapshot gives every element a ref the agent can act on, so it never guesses selectors.
- 02
An optional DevTools engine adds real clicks and typing that sites treat as a person, screenshots of background tabs, and console and network logs.
- 03
Agent tabs live in one window of their own on my second display, anything that could move focus waits until I stop typing, and failures are reported as failures, never as a success that did not happen.
- 04
Two runtime dependencies (the MCP SDK and Zod), no build step, CI, and a changelog and security policy.
03/Architecture
A tool call goes in, Apple Events run it, the page comes back.
An agent calls a tool over MCP. The server runs it through Apple Events, or the DevTools engine for real input and screenshots, in a tab inside the agent’s own window, and the result goes back to the agent.
04/Outcomes
Fifty tools, published on npm.
50
35
Test files
Cover the tool schemas, argument validation, the agent window and focus guard, the DevTools engine against a real Chromium, and live runs against Arc. There is no benchmark of agent task completion.
From the repoSource: github.com
100
npm downloads, last month
Month ending October 1, 2026. Registry counts include automated installs.
Third partySource: api.npmjs.org
- Evaluation
Tested
Sixteen test files cover the advertised tool schemas, argument validation, timeouts, batch limits and an integration run. There is no benchmark of how often an agent completes a task with it.
- What broke
A page script that threw was reported as ok: true, so a four-step batch in which nothing happened looked fully successful. An agent that drove the running server found it on 31 August 2026, in the 0.1.x builds I had been running. npm has only ever carried 0.3.0, which validates every argument and marks failures isError. The public git history starts at that release, so the fix is recorded in the changelog and the review rather than the commit log.
- Reversed
A call with no tab_id used to fall back to the tab you were looking at, and an agent used that to navigate and reload a tab a person was reading. Tools that change a tab now refuse instead; only read-only tools may fall back.
- Privacy
The server runs JavaScript in your signed-in browser. That is not a sandbox, and the threat model says so. The one guard is aimed at an agent’s mistake, not a hostile agent, and page content is treated as untrusted data.
- Cost
Every call spawns an osascript process, a few hundred milliseconds each. That is why tab_id is not mandatory on every tool.
06/Stack
Built with
- Node.js
- MCP SDK
- Zod
- JXA
- Apple Events
- GitHub Actions
07/In use
The work, up close
08/Links
