Skip to main content
Glama

ui

Read-only

Read a window's accessibility tree (AT-SPI) and return named controls with global click points, so agents can target elements without screenshots or pixel guessing.

Instructions

Read a window's accessibility tree (AT-SPI) and return its elements with GLOBAL click points, so you can target a control by NAME with no screenshot and no pixel guessing. window is an address from desktop (default: the focused window). name filters to elements whose accessible name contains it (case-insensitive); actionable (default) keeps only interactive roles (buttons, entries, menu items, ...); with a name that matches none of those, it keeps named elements in other roles that have an accessibility action (a web app's list row), with the action's name as action. Returns [{role, name, x, y, clickable}] where x,y is the click point: focus the window, then click it with pointer (the window must be visible to receive the click, and focusing can move it, so read again after focusing), or do both in one call with click_ui. Controls that carry a CURRENT VALUE also report it: value (text typed into an entry, or a slider/spinner number), percent for a slider's position, checked for a box or toggle. Password fields never report contents, and many dropdowns expose no value at all, so read the screen with screenshot when a rendered value matters. Not every app exposes a tree (terminals, and Electron/Chrome without --force-renderer-accessibility, expose little or nothing); when it does not, fall back to screenshot + zoom.

Input Schema

NameRequiredDescriptionDefault
nameNo
windowNo
actionableNo

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.9.4

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint, so the description carries real extra weight: password fields never report contents, many dropdowns expose no value, terminals and Electron/Chrome without --force-renderer-accessibility expose little or nothing, and focusing can move the window (requiring a re-read). These are non-obvious operational traits beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and targeting model are front-loaded, and most sentences earn their place by preventing a failed click. It is dense and somewhat overloaded, however — the value/percent/checked enumeration and the parenthetical about dropdown values push it toward an inline manual rather than a crisp definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter read tool with rich annotations and an output schema, nothing an agent needs is missing: it knows the return shape, the interaction sequence, the scoping defaults, and the failure modes with fallbacks. Return-value detail is technically redundant given the output schema but does no harm.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (titles and defaults only), so the description must compensate and does: `window` is an address from desktop defaulting to the focused window, `name` is a case-insensitive substring filter with defined fallback behavior for non-interactive roles, and `actionable` defaults true and keeps only interactive roles. This adds meaning well beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Read a window's accessibility tree (AT-SPI)') and states the payoff ('GLOBAL click points ... no screenshot and no pixel guessing'), which cleanly separates it from the screenshot and zoom siblings. An agent can identify the tool's job without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It routes explicitly to alternatives and states conditions: click the returned point with `pointer`, do both in one call with `click_ui`, read the screen with `screenshot` when a rendered value matters, and fall back to 'screenshot + zoom' when an app exposes no tree. Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.