Skip to main content
Glama

mac_find

Read-onlyIdempotent

Search a macOS app's accessibility tree by role, title, value, text, or identifier to locate UI elements and return element-indexed matches for targeted actions.

Instructions

Search an app's accessibility tree for elements by role (e.g. button, textfield, checkbox, row), title, value, text (title or value) or id (AXIdentifier); substring match, case-insensitive, unless exact:true. Returns up to limit (default 10, max 50) matches, each with an element_index (a new snapshot). surface: window (default) | menubar | app; window: index or title, or window_id from mac_windows; web_accessibility (default true, false under NORACU_READ_ONLY=1) sets AXManualAccessibility on Electron/Chromium apps and never sets AXEnhancedUserInterface (which alters window behaviour); the result reports web_accessibility like mac_ax_state.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "mac_find"
  }
}

Input Schema

NameRequiredDescriptionDefault
idNo
appNo
roleNo
textNo
exactNo
limitNo
titleNo
valueNo
windowNo
surfaceNo
window_idNo
web_accessibilityNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.2.6

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses matching semantics (substring, case-insensitive unless exact:true), result caps (default 10, max 50), the fact that a new snapshot is taken and element_index refers to it, and the side effect of setting AXManualAccessibility on Electron/Chromium apps while deliberately never setting AXEnhancedUserInterface because it alters window behaviour. The NORACU_READ_ONLY=1 override is also spelled out.

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?

It is front-loaded with the match criteria and every clause carries information, but the single semicolon-chained paragraph crams defaults, side effects, and env-var caveats together, making it harder to scan than a short bulleted structure would be.

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

Completeness4/5

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

For a 12-parameter tool with no output schema, the description covers what is returned (up to limit matches, each with an element_index tied to a fresh snapshot, plus the reported web_accessibility state). Only a minor gap remains: it does not say where element_index is consumed downstream (e.g. mac_click/mac_set_value).

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 description coverage is 0%, yet the prose explains nearly every one of the 12 parameters: what text matches (title or value), what id means (AXIdentifier), the semantics of exact, the limit default and maximum, the window selector forms (index, title, or window_id), and the surface values (window | menubar | app) with window as default. This compensates fully for the empty schema descriptions.

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: 'Search an app's accessibility tree for elements', and enumerates the match keys (role, title, value, text, id/AXIdentifier). That distinguishes it from siblings like mac_click, mac_get, or mac_window, which act on or enumerate windows rather than searching for elements.

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

Usage Guidelines3/5

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

Usage context is implied rather than stated: the mention of window_id 'from mac_windows' and the web_accessibility behaviour 'like mac_ax_state' points at related tools, but there is no explicit when-to-use versus mac_screenshot or mac_ax_state, and no exclusions. An agent can infer this is the element-lookup step before clicking or typing, but must do the inference itself.

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