Skip to main content
Glama
nvda-mcp server

nvda-mcp server

by InfiArtt

Find controls

nvda_find_objects
Read-onlyIdempotent

Search a window for controls by name or role, nearest the top first, and get IDs for focusing, activating, or inspecting them. Narrow results by searching inside a container.

Instructions

Search the foreground window, or another window, for controls by name and/or role, nearest the top of the window first.

Each result has an id for nvda_focus_object, nvda_activate_object, nvda_inspect_object and other tools. Ids stay valid through later searches, until the control disappears. Faster and more precise than reading the whole tree or tabbing around. To narrow a search, find a container first (role 'list', 'dialog', 'section') and pass its id as within.

Input Schema

NameRequiredDescriptionDefault
roleNoThe role as NVDA says it ('button', 'edit', 'list', 'check box') or NVDA's internal name ('editableText').
windowNoSearch this window instead of the foreground one: a handle from nvda_list_windows. It may be in the background or on another virtual desktop.
withinNoOnly search inside this control, an id from nvda_find_objects, such as a list, dialog or region. Use it when a search of a large web page stops early.
max_resultsNoStop after this many matches.
name_containsNoPart of the control's name, ignoring case, such as 'Chat' or 'Send'.
response_formatNo'markdown' (default) is easier to read; 'json' keeps every field for further processing.markdown

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.1.0

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, non-open-world), and the description adds genuinely new behavior: result ordering, cross-window/other-virtual-desktop reach, and crucially the id lifetime contract ('Ids stay valid through later searches, until the control disappears'). It omits what a zero-match or truncated search returns, which is the main remaining behavioral gap.

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

Conciseness5/5

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

Four short sentences, front-loaded with the core action, then the returned id contract, then the efficiency argument, then the narrowing tip. No filler and no restatement of the title.

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?

An output schema exists, so return-value detail is rightly omitted, and the description covers discovery, scoping, and id reuse across the follow-up tools (nvda_focus_object, nvda_activate_object, nvda_inspect_object). What is missing is failure/empty-result behavior and any hint about how ordering interacts with max_results when results are capped.

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%, so the baseline is 3; the description still adds real meaning by explaining the two-step pattern for 'within' (locate a container first, then narrow) and the top-down ordering that governs how 'max_results' truncates. 'role' and 'name_contains' get no semantics beyond the schema, capping this below 5.

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?

States a specific verb and resource ('Search ... for controls by name and/or role') plus the scope ('foreground window, or another window'). It also gives result ordering ('nearest the top of the window first'), which separates it from tree-dumping siblings like nvda_get_object_tree or nvda_list_elements without the agent needing to open their schemas.

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

Usage Guidelines4/5

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

Explicitly positions the tool against alternatives ('Faster and more precise than reading the whole tree or tabbing around') and gives a concrete narrowing workflow: find a container with role 'list'/'dialog'/'section' and pass its id as within. It does not name the sibling tools it replaces, nor state when a full-tree read or nvda_find_in_page would be better, so it stops short of full when/when-not routing.

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