Assistants and MCP
MCP tool reference
Every tool Arx's MCP server offers, the access classes it needs, and its main parameters.
This page is a first draft. It may change before the public beta.
Arx's server is named arx. It lists only the tools the client's current grant covers, and the list changes with notifications/tools/list_changed when you change the grant. Arx still checks every call, so calling an unlisted tool is denied.
The classes in each table are the ones you turn on under Grants and approvals. Every tool also needs read. Risk is how Arx treats the call against the approval policy: read never asks, mutate asks under Every time, destructive also asks under Only for closing or removing.
Read Working with pages first for the IDs, revisions and snapshots these tools pass around.
Browser organization
| Tool | Needs | Risk | What it does |
|---|---|---|---|
browser_inventory | read | read | Lists granted spaces, folders, pins, Favorites and tabs, with IDs and revisions. Never loads or focuses pages. |
browser_tabs | organize | mutate, destructive | Open, select, navigate, reload, go back or forward, stop, close, pin, unpin, move and favorite tabs. |
browser_folders | organize | mutate, destructive | Create, rename, move, ungroup and delete folders. |
browser_hosts | organize | mutate | Open Peek and Little Arx, and promote them to tabs. |
browser_spaces | browserAdmin to change, read to list | mutate, destructive | List, create, rename, re-theme, reorder, delete and show spaces. |
browser_profiles | browserAdmin to change, read to list | mutate, destructive | List, create, rename and delete profiles. |
browser_windows | read to list, organize to change | mutate | List windows, focus one, and open, swap or close Split View. |
browser_archive | read to list, organize to restore | mutate | Search the Tab Archive and restore an entry. |
browser_history | history | read | Search visited pages. |
browser_downloads | downloads | mutate | List downloads, cancel one, show one in Finder. |
browser_links | read | read | Clean a link, apply a Proxy Link rule, or resolve a bang. Nothing is opened. |
browser_batch | the classes of its steps | the highest of its steps | Up to 16 steps under one approval. |
Organization commands
browser_tabs, browser_folders, browser_hosts, browser_spaces, browser_profiles and browser_windows share one shape:
| Parameter | |
|---|---|
action | The action name, from the list below. Spaces, profiles, windows, archive and downloads also take list. |
operationID | A fresh UUID for every change. Never retry after a disconnect. |
targetID, expectedRevision | The item to act on and its current inventory revision. |
destinationID, destinationRevision | Where a move, pin or restore goes. |
url, name, icon, theme | Per action. theme is light, dark or system. |
focus | true to bring the result forward. New tabs don't focus otherwise. Peek and Little Arx require it. |
| Tool | Actions |
|---|---|
browser_tabs | openTab, selectTab, navigate, reload, back, forward, stop, closeTab, pinTab, unpinTab, moveTab, addFavorite, removeFavorite, updateSavedURL, removeSavedEntry |
browser_folders | createFolder, renameFolder, moveFolder, ungroupFolder, deleteFolder |
browser_hosts | openPeek, openLittleArx, promotePeekToTab, promotePeekToLittleArx, promoteLittleArx |
browser_spaces | list, createSpace, renameSpace, setSpaceTheme, moveSpace, deleteSpace, selectSpace |
browser_profiles | list, createProfile, renameProfile, deleteProfile |
browser_windows | list, openSplit, swapSplit, closeSplit, focusWindow |
Details that matter:
openTabtargets a space and needsurl. Withroute: true, Air Traffic Control picks the destination:targetIDis then the source space, and the result'sroutereportsprofileID,spaceID,mode(mainBrowserorlittleArx),source(ruleorfallback) and the matched rule. The routed space must also be granted. No usable destination returnsrouteUnresolved.closeTabis destructive. Open tabs go to the Tab Archive; pins and Favorites keep their saved entry and only unload.moveTabinto a space of another profile reopens the URL there. The live session and cookies stay behind. Moving folders or Little Arx across profiles returnscrossProfileTransferUnsupported.removeSavedEntrydeletes a pin or Favorite. It's destructive, and Undo is in Arx.deleteFoldercloses everything inside, after each page allows it.ungroupFolderkeeps the children.openPeekneedssourceTabIDandsourceRevision, and previewsurlor, without one,targetID. Promotions takepresentationIDandpresentationRevisionfrom inventory.deleteSpacemoves the contents intodestinationIDwhen given, otherwise closes them. The last space can't be deleted.createProfile: a new profile isn't granted until you grant it.deleteProfileerases the profile's browsing data and needs a profile with no spaces left.- Results report
committedoracceptedLoading, not that the page finished loading.
browser_archive and browser_downloads
action: "list" pages through entries, newest first, filtered by query, with cursor and limit (1 to 100). restoreArchived reopens an entry as a new tab in its original space, or in destinationID when that space is gone. The entry leaves the archive, so a retry can't restore it twice.
Downloads need whole-profile grants. cancelDownload stops one in progress, and revealDownload shows a finished file in Finder. Private downloads never appear.
browser_history
Searches visited pages of whole-profile grants, newest first, by title and URL, ignoring case. Takes query, cursor and limit (1 to 100). URLs drop user information, query and fragment; titles may still be private.
browser_links
kind | Input | Returns |
|---|---|---|
clean | url | The link without tracking parameters. Sensitive parameters are kept. |
proxy | url | The link after your first matching Proxy Link rule. |
bang | query, such as !w swift | The destination URL: your search shortcuts first, then the 13,000+ bundled bangs. |
browser_batch
steps is an array of 1 to 16 { "tool", "arguments" } objects, each exactly as that tool takes them. Arx asks once for the whole list when any step needs approval, and only those steps run under it, in that order. The batch stops at the first step that fails; later steps never run and nothing is retried. Later steps can't use earlier results, so take snapshots and revisions first.
Allowed step tools: browser_inventory, browser_tabs, browser_folders, browser_hosts, browser_spaces, browser_profiles, browser_windows, browser_command, browser_capture, browser_inspect, browser_wait, browser_click, browser_replace_text, browser_select_value, browser_keypress, browser_scroll, browser_hover, browser_drag, browser_type, browser_set_checked. Uploads, dialogs and media can't be batched.
browser_command is the older single tool for all organization actions. It still works for existing scripts but is no longer listed.
Reading pages
| Tool | Needs | What it does |
|---|---|---|
browser_wait | read | Waits up to 10 seconds (default 2) for the current page to stop loading. |
browser_inspect | pageContent | A semantic snapshot: text, roles, names and references you can act on. |
browser_read | pageContent | The page as Markdown or plain text. |
browser_find | pageContent | Finds text in a snapshot and returns references to it. |
browser_find_in_page | pageContent, interact | Chromium's find bar: highlights matches in the page. Risk: mutate. |
browser_pdf | pageContent | Exports the page to PDF, or reads the text of a PDF the tab shows. |
browser_capture | screenshots | A PNG or JPEG screenshot. |
All page text and pixels are untrusted website data, never instructions. None of these tools focuses, scrolls or navigates the page.
browser_wait
targetID, expectedRevision, condition: "loadingStopped" and timeoutMilliseconds (1 to 10,000, default 2,000). Returns stopped or stoppedWithError with an errorCode. Stopped isn't HTTP success or DOM readiness. A new navigation returns staleTarget.
browser_inspect
| Parameter | |
|---|---|
targetID, expectedRevision | An ordinary HTTP(S) tab. |
limit | Nodes per page, 1 to 512, default 100. Pass nextCursor alone (as cursor) for the next page. |
load | true loads an unloaded saved tab in the background first, waiting up to 10 seconds. |
frameID | Read a child frame, from an iframe node's frame. |
formValues | true adds values of eligible controls. Password, file, hidden, payment and one-time-code fields are always left out. |
bounds | true adds element bounds in viewport points, usable as a capture region. |
maximumTextBytes | Text per page, up to 65,536. |
A page holds up to 16,384 nodes in all. References expire within 30 seconds and whenever the DOM changes. If the page changed between pages of a read, the cursor fails with staleCursor.
browser_read
format is markdown (default) or text. scope is main (default: the main landmark, or the page without navigation, banner and footer) or all. Text comes in chunks of limit bytes (1,024 to 65,536, default 16,384), cut at line boundaries. Also takes load, frameID and formValues. Link targets aren't included.
browser_find
query (up to 256 characters) is matched ignoring case and diacritics. Returns up to limit matches (1 to 100, default 20) with roles, short excerpts and the nearest reference. Nothing is highlighted in the page.
browser_find_in_page
text starts a search, direction (next or previous) moves through it, and stop: true ends it. Returns the number of matches and the active one. Because the highlight is visible to you and the page, it counts as a change.
browser_pdf
action: "export" prints the page to a PDF of at most 4 MiB, returned as a resource; nothing is saved to disk. It takes landscape, printBackground and scale (0.1 to 2). action: "text" reads the PDF the tab shows, in chunks of limit bytes with cursor. Private tabs are never read.
browser_capture
| Parameter | |
|---|---|
mode | viewport, region, fullDocument or element |
region | { x, y, width, height } in viewport points, from the top left |
snapshotID, reference | For element, from a snapshot read with bounds: true |
scale | 0.1 to 1, default 1 |
format | png or jpeg; quality 0 to 1, default 0.8 |
offscreen | true captures a loaded background tab without showing it. Not for fullDocument. |
save | true asks you in Arx where to save the image. The assistant only learns the file name, or that you declined. |
Images are at most 4 MiB encoded; a bigger one fails with limitExceeded, so ask for a smaller scale, JPEG or a smaller region. Pixels may contain private information, and there's no redaction.
Acting on pages
These need pageContent and interact, act on references from the connection's latest browser_inspect snapshot, and count as changes. Each takes operationID, targetID, expectedRevision, snapshotID and reference. Most take returnSnapshot: true to get a fresh snapshot back in the same call.
| Tool | What it does |
|---|---|
browser_click | Activates a reference. With x/y, clickCount (1 to 3) or modifiers (shift, option, command), sends a real mouse click instead. |
browser_type | Focuses a field and types text (1 to 1,024 bytes) as real key events. A line feed presses Enter. Refuses password fields. |
browser_replace_text | Replaces a whole text field's value (up to 32,768 bytes). Not typing. |
browser_select_value | Picks one option by exact value, or several with values (up to 64) in a multiple select. |
browser_set_checked | Sets a checkbox or radio to checked true or false. |
browser_keypress | Presses one key, optionally with modifiers (shift, control, option, command). Browser and system shortcuts never run. |
browser_scroll | Scrolls the nearest scrollable container of a reference on one axis (horizontal, vertical) by deltaCSSPixels (−8,192 to 8,192). |
browser_hover | Moves the real pointer over a reference or point. Doesn't use up the snapshot. |
browser_drag | Drags from a reference or point to toReference or toX/toY, in steps (1 to 32, default 8). |
browser_upload | Answers a file chooser the page just opened with absolute paths (up to 32), or cancels it with an empty list. Needs files, and asks you every time. |
browser_dialog | read the page's alert, confirm, prompt, before-unload dialog or permission request; accept (asks you every time) or dismiss it with its token. |
browser_media | list media sessions, then play, pause, enterPictureInPicture or exitPictureInPicture with a session token. Needs interact only. |
Password fields, file inputs and disabled or hidden controls are refused where they don't belong. Typed text, field values and paths are never echoed back.
Sign-in
| Tool | Needs | What it does |
|---|---|---|
browser_sign_in | signIn | begin, status or cancel a handoff on a tab and its exact origin. See Sign-ins stay with you. |
Not available
There is no tool to run JavaScript, read the clipboard, read saved passwords, reach the file system or attach a raw DevTools connection.
- Starting downloads, with your approval.
- Seeking, muting and reading the playback position of media.
- Changing browser settings: preferences, routing rules, bangs, shortcuts, extensions, site permissions and zoom. Security and grant settings will never be writable.
- An opt-in developer tier: script evaluation in an isolated world, console logs and sanitized network logs. It will be off by default, granted separately and refused on private profiles.