Skip to main content
Glama
nvda-mcp server

nvda-mcp server

by InfiArtt

Type text

nvda_type_text
Destructive

Types one line of Unicode text into the focused control without using the clipboard, enabling text entry regardless of keyboard layout after focusing an edit field.

Instructions

Type text into the focused control, as if typed on the keyboard, without touching the clipboard.

Focus an edit field first (nvda_find_objects then nvda_focus_object, or nvda_press_keys). Characters are sent as Unicode, so the keyboard layout does not matter. Some games and remote desktop windows ignore this kind of input; use nvda_press_keys there.

Input Schema

NameRequiredDescriptionDefault
textYesOne line of text to type. Any language and emoji work. Press enter separately.
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.
delay_msNoPause between characters. Leave at 0 unless an application drops characters.
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.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the mutation profile is known. The description still adds genuinely new behavior: the clipboard is untouched (unlike paste-based approaches), characters are sent as Unicode so layout is irrelevant, and certain targets silently drop input. It does not say what happens when no control is focused, but the added signal is well above the annotation baseline.

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 lines, front-loaded with purpose, then prerequisite, then mechanism note, then failure case. Every sentence carries distinct information and none restates the tool name or 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?

With an output schema, full annotation coverage and 7 fully described parameters, the description only needs to cover intent, prerequisites and pitfalls, which it does. The one minor gap is not stating the failure mode when nothing is focused or what happens to existing content at the caret position, but the context is otherwise sufficient to call the tool correctly.

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 every parameter (record, delay_ms, settle_ms, timeout_ms, until_speech, record_within) is already documented in structured data, setting the baseline at 3. The description contributes only the incidental note that Enter must be pressed separately, matching the text param's single-line constraint, but adds no meaning for the recording or timing parameters.

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 ('Type text into the focused control') and immediately bounds the mechanism ('as if typed on the keyboard, without touching the clipboard'). This clearly separates it from nvda_set_value (value-setting) and nvda_press_keys (keystroke simulation) without needing 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?

Gives an explicit prerequisite chain ('Focus an edit field first (nvda_find_objects then nvda_focus_object, or nvda_press_keys)') and an explicit exclusion with the alternative to use instead ('Some games and remote desktop windows ignore this kind of input; use nvda_press_keys there'). 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.