Nova
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
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
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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). |
| 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_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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 35 tools
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.
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.
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.
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.