Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

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
ax_activateA

Activate one actionable node from the immediately preceding ax_read using its snapshot_id and node_id. This generation-safe action fails closed when the UI has been read again. Paired-page nodes use their captured Chrome Session/route and provider IDs; DOM errors never use native/coordinate fallback. Native nodes use the web DOM bridge for scriptable browser content, native AX/UIA activation otherwise, then a freshly verified element-center fallback. The result reports route=chrome_extension|ax|uia|web_dom|element_center. An accepted current actionable token consumes that generation before provider dispatch, so rerun ax_read after any result.

ax_clickA

Legacy query action through macOS Accessibility or Windows UI Automation — no coordinates, no cursor movement, works in the background (the app need not be frontmost). query is a case-insensitive substring of the element's accessibility role or label/title (e.g. "Send", "Search"). Ambiguous matches fail closed. Prefer fresh ax_read + ax_activate for exact, generation-safe actions.

ax_focusA

Legacy query action that focuses a control through macOS Accessibility or Windows UI Automation. Background, no cursor. Ambiguous substring matches fail closed; prefer a fresh ax_read node whenever possible.

ax_readA

Canonical ax:read capability. target=paired_page selects only the already consented Chrome document, before native targeting; mutually exclusive with window. Page nodes have provider=chrome_extension and no native marks/global bounds; page failures require inspection/re-pairing and never native or pixel fallback. target=native (default) reads visible semantic UI directly from macOS Accessibility or Windows UI Automation without taking a screenshot. Returns an ephemeral snapshot_id, deterministic node ids, role/name/description/value/actions/state, optional global-logical bounds, explicit coverage/fallback status, and actionable marks. mode=all (default) combines controls with labels/static text/headings; interactive or content narrows the view. Call ax_activate(snapshot_id,node_id) on a fresh actionable node. If coverage is absent/partial, use focused OCR for missing rendered text, then screenshot/zoom only for visual-only pixels. permission_denied means grant Accessibility; do not hide it with a screenshot fallback.

ax_set_valueA

Legacy query action that sets a control value through macOS Accessibility or Windows UI Automation. Background, no cursor. Ambiguous substring matches fail closed; prefer a fresh ax_read node whenever possible.

batch_actionsA

Execute a sequence of input actions (mouse_move, left_click, right_click, double_click, scroll, key_combo, type_text, wait) in one call to reduce round-trips, at most 64 actions. Coordinates are in screenshot space. Stops at the first failure and returns completed indices/results, failed_index/reason, and a not_executed half-open range. The failed action may have partial side effects. No retry or rollback. Get fresh ax_read state before deciding what to retry; use a screenshot for visual outcomes.

chrome_activateA

Semantically activate one exact actionable node from the immediately preceding chrome_read snapshot. Fails closed on stale snapshot, route, capability, or DOM identity; coordinate fallback is forbidden.

chrome_focusA

Focus one exact focus-capable node from the immediately preceding chrome_read snapshot. Fails closed instead of guessing or clicking.

chrome_pairA

Begin an explicit 30-second pairing request for the active Chrome page. The user must inspect the origin and click Pair in the Nova extension popup. Success binds the exact tab, documentId, page nonce, and new epoch; it never grants access to another tab or later navigation.

chrome_readA

Read a bounded semantic DOM snapshot from the exact paired Chrome document. Sensitive fields and invalid/presentation ARIA nodes are excluded. Returns an ephemeral snapshotId and exact nodeIds; run this immediately before every Chrome mutation. No screenshot or coordinates are used.

chrome_releaseB

Explicitly release the currently paired Chrome document, revoke its epoch, in-flight requests, and unexpired receipts.

chrome_scrollB

Semantically scroll one exact scroll-capable node (including root when exposed) from the immediately preceding chrome_read snapshot. Direction is up/down/left/right and amount is line/half_page/page; no coordinates.

chrome_set_valueA

Set one exact non-sensitive text control from the immediately preceding chrome_read snapshot. Password, payment, OTP, file, hidden, and explicitly sensitive controls are unavailable. Plaintext is never logged or echoed; success returns only UTF-8 byte length and SHA-256.

chrome_statusA

Report whether Nova's Chrome Native Messaging host is connected and whether one exact top-level document is currently paired. Call this before Chrome semantic work; it never inspects page content.

click_markA

Compatibility activation by the mark NUMBER shown by the most recent ax_read/read_ui or screenshot(marks=true). Prefer ax_activate with snapshot_id/node_id because it rejects stale generations. Web-page content in a scriptable browser (Safari, Chrome, Arc, Edge, Brave, …) is clicked through the page's OWN JavaScript engine (an Accessibility press is a silent no-op on web content), native controls through the Accessibility tree; if neither applies it falls back to a click at the element's center. Numbers go stale when the UI changes, so run a fresh ax_read immediately before acting.

cursor_positionA

Get the current mouse cursor position. Returns (x, y) in logical coordinates.

double_clickA

Grounded double click in the most recent capture's pixel space. Pass source=ocr_center for an OCR-returned center; otherwise the reported route defaults to visual_coordinate.

dump_axA

DEBUG: dump the target app's Accessibility tree (roles, subroles, labels, actions, frames) as indented text — to diagnose why some elements are not exposed. Targets the current AX/UIA app (or frontmost).

inspect_appA

Inspect a running macOS application's interaction options, or discover running Chromium applications when app is omitted. Returns a concise identity, status, native route and next step; details=true adds diagnostics. Read-only: no app launch, focus, permission request, page content, or browser attachment. Use optionally for setup/discovery; ordinary native interaction still starts with ax_read.

key_comboC

Simulate a key combination (e.g., "cmd+c", "shift+tab").

left_clickA

Last-resort grounded left click in the most recent capture's pixel space. Pass source=ocr_center when x/y came from focused OCR; otherwise source=visual_coordinate (the default) means a focused screenshot/zoom. The result reports that route.

list_applicationsA

List all installed applications on the system.

list_windowsA

List all visible windows across all applications.

mouse_moveB

Move the mouse cursor to the given (x, y) coordinates (in screenshot space).

ocrA

Read on-screen TEXT via the platform OCR engine (Apple Vision on macOS, Windows.Media.Ocr on Windows). Captures the display (or window="") and returns the recognized text lines, each with a clickable center in the same pixel space as a screenshot — so you can both READ the text and click a line with left_click(x, y). Returns text only (no image), so it is a cheap, fast way to pull text off the screen. Best when use it after ax_read reports absent/partial coverage and you need rendered TEXT from a surface where semantic nodes are empty or sparse — canvas, games, image-rendered or custom-drawn views — or to grab a lot of text at once without parsing a screenshot. For native/web UI with an Accessibility/UIA tree, ax_read + ax_activate is still more precise. mode=auto (default) tries fast recognition first and only falls back to accurate for empty/low-confidence output; mode=fast minimizes latency and mode=accurate forces maximum quality. roi={x,y,width,height} scopes OCR in the CURRENT image's pixels: the rectangle is strictly validated, mapped to the desktop, and re-captured through the native region path (never cropped from a downscaled JPEG). roi and window are mutually exclusive. Languages default to Simplified Chinese + English; pass languages=[...] (BCP-47) to override.

open_applicationA

Launch or focus an application by name (e.g., "Safari", "Slack").

read_clipboardA

Read the current system clipboard contents as text.

read_uiA

Compatibility alias for ax_read, backed by the exact same semantic traversal, renderer, snapshot generation, and action cache. Prefer the canonical ax_read name in new prompts and integrations.

right_clickB

Grounded right click in the most recent capture's pixel space. Pass source=ocr_center for an OCR-returned center; otherwise the reported route defaults to visual_coordinate.

screenshotA

Visual fallback after ax_read and, for missing rendered text, OCR. Capture the whole main display or a single window with window="" — and return a base64 JPEG plus a text note with its pixel dimensions. ALL coordinate-taking tools (mouse_move, *_click, scroll) expect coordinates in THIS image's pixel space — origin (0,0) top-left, x right, y down — so read target positions directly off the returned image; subsequent clicks are mapped through it automatically. PREFER window="" (substring of its title or app name) over the whole display whenever you are working inside one app: a full-display shot is downscaled to ~1280px wide, so small UI (list rows, sidebar items, buttons) becomes only a few pixels — too small to read or click accurately. A window capture is larger and sharper, returns a smaller image (fewer pixels → less context, faster turn), and clicks map into the window automatically. marks is ON by default: it boxes+numbers actionable elements (needs Accessibility) and lists each as [N] for compatibility with click_mark. Prefer a fresh ax_read + ax_activate for semantic controls. A magenta coordinate grid (for reading x/y) is shown automatically when marks is off and hidden when it is on; pass grid=true to force both, or marks=false for pure coordinate mode. If a target is still too small to click, use zoom_region to magnify part of this image.

scrollC

Scroll at the given (x, y) position. Positive lines = up, negative = down.

type_textC

Type a string of text into the currently focused element.

waitB

Wait for a specified number of seconds before returning.

write_clipboardC

Write text to the system clipboard.

zoom_regionA

Zoom into a rectangle of the CURRENT image (the last screenshot's pixel space) and re-capture it at native resolution — a sharp, legible magnified view. Only that rectangle is captured (not the whole display), so it is also smaller and quicker to take than a full-display shot. Use it to read exact positions on surfaces that expose no marks (canvas/games, custom-rendered views) before clicking, or to stay scoped while working inside one area. Pass x, y, width, height in the current image's pixels (width,height > 0). The returned image becomes the new coordinate space, and clicks afterward map into the zoomed region automatically. marks defaults OFF (read coordinates off the overlaid grid); grid defaults ON. Take a screenshot first so there is an image to zoom into.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 35 tools

Disambiguation2/5

Two parallel semantic pipelines cover the same Chrome automation ground: ax_read/ax_activate with target=paired_page versus chrome_read/chrome_activate, with no clear rule for when to pick which. Clicking a UI element can also be done through ax_activate, chrome_activate, click_mark, or left_click, and legacy ax_click/ax_focus/ax_set_value plus the read_ui alias add further alternatives. Descriptions label preferred vs legacy vs compatibility routes, but the boundaries remain blurry enough to invite misselection.

Naming Consistency3/5

There is a common verb_noun pattern in tools like read_clipboard, write_clipboard, click_mark, open_application, type_text, zoom_region, and inspect_app, and the ax_ and chrome_ families are internally consistent. However, many tools break that pattern: action-only names (scroll, wait, screenshot, ocr), noun_noun names (cursor_position, batch_actions, key_combo), and adjective_noun names (left_click, right_click, double_click). The set is readable but lacks one predictable convention.

Tool Count2/5

At 35 tools, the server exceeds the well-scoped 3-15 range and sits in the too-many category. Several tools are explicitly legacy, compatibility, or debug variants (ax_click, ax_focus, ax_set_value, read_ui, click_mark, dump_ax), and the ax_* versus chrome_* Chrome pipelines duplicate capability rather than each earning a distinct place. The broad computer-use domain justifies a rich surface, but this set could be consolidated.

Completeness4/5

Coverage is strong across the apparent domain: native UI read/action, Chrome semantic lifecycle (pair, status, read, activate, focus, set value, scroll, release), visual fallbacks (screenshot, OCR, zoom), low-level input (mouse, keyboard, clipboard, scroll), and application/window discovery. Gaps such as drag-and-drop, hover, window manipulation, and conditional waits are real but minor and usually workable through existing primitives.

Maintenance

ActivityActive
ResponsivenessResponsive