Skip to main content
Glama
DB-25

arc-control-mcp

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ARC_MCP_LABELNoNames this agent's tab ownership. Two agents with different labels never see each other's owned tabs.default
ARC_MCP_SPACENoThe Arc space new tabs open into, when a space with that name exists.Agent
ARC_MCP_STATE_DIRNoWhere tab ownership is recorded, so a restarted agent can clean up the tabs its previous run left behind.~/Library/Application Support/arc-control-mcp

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_tabsA

List Arc tabs. Rows are flagged 'mine' for tabs this agent opened and 'isActive' for the tab the user is on. Defaults to every tab; pass scope 'own' to narrow.

get_current_tabA

Get the tab a call with no tab_id would act on: this agent's current tab, or the active tab if it has none.

switch_to_tabA

Make a tab the active tab in its window. Changes what the user sees, so prefer reading a tab by id when you only need its content.

close_tabA

Close one tab. With no tab_id this closes whatever a bare call resolves to, which is this agent's current tab or, if it has none yet, the tab the user is actively looking at. Pass an explicit tab_id from list_tabs unless you are certain. Closing cannot be undone and tab ids are not reused. To clean up after yourself, prefer close_own_tabs.

close_own_tabsA

Close every tab this agent opened, leaving the user's tabs alone. Tabs leaked by a previous run of this label are left alone too unless include_stale is set.

arc_statusA

Report Arc state: which tabs this agent owns, whether the agent space exists, what a call with no tab_id resolves to, and how many tabs a previous run of this label left behind.

open_urlA

Open a URL in Arc. Launches Arc if needed. New tabs go into the agent space when one exists, otherwise the main window. Arc auto-selects new tabs, so the previous selection is put back unless you pass activate.

go_backA

Navigate a tab back in history. Goes through the page, so it works on a background tab, which Arc's own back command does not, and the result is checked against the tab url rather than assumed.

go_forwardA

Navigate a tab forward in history. Goes through the page and confirms the tab really moved before reporting success.

reload_tabA

Reload a tab, then confirm the document really was replaced rather than assume it. Works on a background tab. Takes wait_until_loaded and timeout_ms like the other navigating tools, and returns from, to and the tab. Fails with ok false when the tab is still showing the document that was there before, which is what a slow server or a page holding on to unload looks like from outside.

wait_for_loadA

Poll until a tab has finished loading and the document is ready. Use after an action that triggers navigation.

get_page_contentA

Get the visible text of a page, or of every element matching a selector joined with blank lines. Always reports "matched", so a partial answer is never silent. Nested matches repeat their text, so prefer a leaf-ish selector.

get_htmlA

Get the HTML of a page or element. Use when you need markup, attributes or structure rather than text. Returns one element only: it reports how many matched and takes nth to pick a different one.

query_elementsA

Find elements and return structured details: text, value, href, visibility, disabled state and attributes. The main way to see what is on a page before acting on it. "text=" matching is substring, with exact matches ranked first; pass exact to require an exact match.

get_linksA

List links on the page with their text and resolved href. Pass unique to collapse repeated href and text pairs, which navigation and footers produce in bulk.

get_page_infoA

Page overview: title, url, ready state, meta description, headings, form and frame counts. Cheap orientation before deciding what to do.

clickA

Click an element. Accepts a CSS selector or "text=Label". Scrolls it into view and dispatches a real pointer sequence, so framework handlers fire. "text=Label" matches on visible text as a substring, with exact matches ranked first, so a short label also matches longer ones. Check the returned "matches" count, and pass exact when it is above 1. Returns urlBefore, the url as it was immediately before the click: the tab snapshot can be taken before a navigation settles, so follow with wait_for_load when the click navigates.

fillA

Set the value of an input, textarea or contenteditable. Uses the native setter and fires input and change, so React and similar frameworks register it. Fails with an error naming the tag when the target cannot be filled: a heading or other non-input, a disabled or readonly field, or a (use select_option for those). "text=Label" matches on visible text as a substring, with exact matches ranked first, so a short label also matches longer ones. Check the returned "matches" count, and pass exact when it is above 1.

select_optionA

Choose an option in a select element, by exact option value or exact visible label. When nothing matches, the failure lists the options that do exist, so the next call can pick a real one.

press_keyA

Dispatch a key press to an element, or to the focused element when no selector is given. Handles named keys (Enter, Escape, Tab, ArrowDown) and single printable characters. Returns only a minimal identity for the element that received the key (tag plus whichever of id, name, type and aria-label exist); use query_elements when you need the full picture.

scrollA

Scroll the page, or scroll an element into view. Page scrolls report scrollY, pageHeight and viewport, so you can tell how much is left.

wait_for_selectorA

Poll until an element appears, becomes visible, or disappears. Use after a click that loads content. On timeout it says so explicitly with waitedMs and the last counts, and a broken selector or page error fails straight away instead of burning the whole timeout. The visible state ignores screen-reader clipping (boxes under 2x2 px, inset clip-path), which nothing can actually click.

list_spacesA

List Arc spaces in the front window, with tab counts and which is active. Tabs pinned to the top of the sidebar (location topApp) belong to no space, so the reported tabsInSpaces plus topAppCount is what reconciles with totalTabs. Counts cover the front window only, while list_tabs covers every window.

focus_spaceA

Switch the front Arc window to a space. This changes what the user sees, so it is rarely needed: tabs in an unfocused space are still fully readable and scriptable.

execute_javascriptA

Run JavaScript in a tab and return the result. A bare expression, or a statement body that uses return, both work. The helper library is available as A (A.all, A.one, A.click, A.setValue, A.describe, A.visible).

batchA

Run several tools in order in one call, passing the same tab through. Stops at the first failure unless continue_on_error is set. Use this to cut round trips: fill, fill, click, wait. Results are capped at 60000 characters across all steps: past that the batch stops early and reports truncated, so pass max_chars to reading steps or split a read-heavy sequence across calls.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DB-25/arc-control-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server