Skip to main content
Glama
nvda-mcp server

nvda-mcp server

by InfiArtt

Set a control's text (experimental)

nvda_set_value
Destructive

Set an edit field’s text via its accessibility API, even in a background window without focus, then report the current value so you can verify the change.

Instructions

Experimental: give an edit field new text through its accessibility API (UI Automation ValuePattern or IAccessible accValue) instead of the keyboard, then report the value it has now.

It needs no focus, so it can reach a field in a background window, found with nvda_find_objects and window. Many web editors (React, Lexical, as in WhatsApp Web) ignore text set this way or lose it on the next key press, so check the reported value; if it did not take, use nvda_focus_object and nvda_type_text. This counts as controlling the computer, like nvda_type_text.

Input Schema

NameRequiredDescriptionDefault
idNoA control from nvda_find_objects. The focused control when left out.
textYesThe control's new text, replacing what is there. An empty string clears it.
recordNoAlso record what this action changed: how the accessibility tree around it changed (controls added, removed, renamed or moved, values and states) and the events NVDA handled. NVDA is silent for up to a few seconds while the tree is read. For something the user does, use nvda_trace_events with tree.
settle_msNoStop listening once NVDA has been quiet this long.
timeout_msNoStop listening, or waiting for until_speech, after this long in total.
until_speechNoKeep listening until NVDA says something containing this text (ignoring case), such as 'sent' or a dialog title, instead of stopping at the first pause. The result says whether it was heard.
record_withinNoRecord only inside this control, an id from nvda_find_objects, such as a chat's message list. Implies record. By default the web document or window around the action is recorded.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.1.0

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, but the description adds genuinely non-obvious behavior: the write bypasses the keyboard, it can silently no-op on many web editors, and the caller must verify the reported value. It also classifies the tool as 'controlling the computer', which calibrates agent caution. It stops short of warning that existing text is irrecoverably overwritten, which is the main destructive risk left implicit.

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?

Front-loaded with the experimental mechanism and the mechanism contrast, then the usage caveat, then the safety classification. Almost every sentence earns its place, though the phrase 'found with nvda_find_objects and window' is slightly compressed to the point of ambiguity, and the closing line partially repeats the sibling framing already implied.

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?

With annotations covering the safety profile, an output schema covering the return value, and 100% schema coverage on 7 params, the description only needs to supply the failure model and fallback — which it does. The remaining gap is minor: the record/record_within recording behavior, which can make NVDA silent for seconds, is explained only in the schema, not flagged in the description.

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

Parameters3/5

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

Schema description coverage is 100%, so id, text, record, settle_ms, timeout_ms, until_speech and record_within are all documented in the schema itself. The description adds only indirect meaning for 'id' (that it comes from nvda_find_objects and can be a window) and nothing about record/settle/timeout tuning. Baseline 3 is appropriate when the schema carries the semantics.

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 states a specific verb and resource ('give an edit field new text through its accessibility API') and immediately distinguishes the mechanism from the sibling tool ('instead of the keyboard'), naming UI Automation ValuePattern / IAccessible accValue. It also states the post-condition ('report the value it has now'), so an agent knows both the action and the feedback loop 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?

Explicit when-to-use is given ('It needs no focus, so it can reach a field in a background window, found with nvda_find_objects and window'), plus an explicit when-it-fails condition (React/Lexical/WhatsApp Web editors) and a named fallback path ('use nvda_focus_object and nvda_type_text'). This is the full when/when-not/alternative triad.

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