Skip to main content
Glama

cursor_control

Inspect, move, hover, highlight, hide, or clear a virtual cursor and element bounding-box overlays across macOS windows and browser tabs for guided UI automation.

Instructions

Inspect, move, hover, highlight, hide, clear, or configure the Codex-style visual cursor & element bounding-box overlays across macOS windows (native 60fps AppKit overlay windows) and browser tabs (ShadowRoot CSS overlays).

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": "cursor_control"
  }
}

Input Schema

NameRequiredDescriptionDefault
xNoWindow-relative (or viewport) X coordinate.
yNoWindow-relative (or viewport) Y coordinate.
appNoTarget macOS application name or bundle ID.
badgeNoOptional frosted pill badge label next to the cursor (e.g. 'Inspect', 'Click', 'Target').
widthNoOptional highlight box width when specifying (x, y).
actionNoCursor operation (default 'get_state').
heightNoOptional highlight box height when specifying (x, y).
rippleNoEmit an expanding concentric ripple ring at the target.
tab_idNoTarget browser tab ID (e.g. 'tab-1').
enabledNoFor action='configure': enable or disable virtual cursor overlays globally.
tab_urlNoTarget browser tab URL match.
selectorNoCSS or 'text=...' selector when targeting a browser tab.
window_idNoTarget macOS window ID.
window_titleNoTarget macOS window title substring.
element_indexNoTarget AX/DOM element index [N] to glide to or highlight.
glide_enabledNoFor action='configure': enable smooth cursor glide animations vs instant jumps.
idle_timeout_msNoFor action='configure': idle auto-fade timeout in milliseconds (400–30000, default 8000).
global_coordinatesNoInterpret macOS (x, y) as global screen coordinates instead of window-relative.
dispatch_move_eventNoAlso post a background mouseMoved event to the target window/tab.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv3.0.0

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are supplied, so the description has to carry the full behavioral burden. It does add real context beyond the schema by disclosing the implementation: it creates native 60fps AppKit overlay windows and injects ShadowRoot CSS overlays, which tells the agent that visible UI state is involved and that overlay windows get created. It says nothing about permission requirements, whether overlays persist across calls, what clear_all removes, or what the side effects of the configure options are, so it does not fully meet the no-annotation bar.

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 description is a single front-loaded sentence that starts with usable verbs and reserves the technical backends for the closing parenthetical. It is dense but earns most of its length; the AppKit/ShadowRoot detail is relevant context, not filler.

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

Completeness3/5

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

For a 19-parameter tool with no annotations and no output schema, the description covers what the tool does and where it operates but not how to target it or what a call returns. The schema accounts for the parameter documentation, so the remaining gap is behavioral: an agent does not know what to expect from get_state or how overlays persist.

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

Parameters4/5

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

Schema coverage is 100% and each of the 19 parameters is documented inline, so the baseline is 3. The description still adds some meaning by grouping the actions it lists and by naming the two target surfaces (macOS windows and browser tabs), which clarifies how window_id/app/window_title differ from tab_id/tab_url/selector. It does not explain the get_state return content, so it goes only slightly beyond the 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 names a specific set of verbs (inspect, move, hover, highlight, hide, clear, configure) and a precise resource (Codex-style visual cursor and element bounding-box overlays), plus the two surfaces it works on: native AppKit overlay windows on macOS and ShadowRoot CSS overlays in browser tabs. That is enough for an agent to tell this apart from the sibling tools named in the prompt (get_state, window_action, browser_tab_action).

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?

The verb list suggests the circumstances for calling this tool, and the action enum confirms that get_state is the default, but the description never tells the agent when to choose this tool instead of a sibling such as browser_tab_state or get_window_state. It states no preconditions, such as needing to attach to a target window or having an accessibility permission first, and no exclusions. I can infer usage from the wording, but the description itself gives only implied guidance.

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