Skip to main content
Glama
nvda-mcp server

nvda-mcp server

by InfiArtt

Find HTML elements in a web page (for developers)

nvda_find_html

Find elements NVDA is reading by CSS selector via browser remote debugging, returning tags, attributes, and text so add-on developers can inspect how apps mark controls NVDA cannot see.

Instructions

For add-on developers: find elements in the web page NVDA is reading (or inside a control) by CSS selector, through the browser's remote debugging, with their tag, attributes and text. Use it to see how an app marks its elements, such as WhatsApp's data-icon attributes, which NVDA cannot see.

The same settings, browser question and cautions apply as for nvda_inspect_html.

Input Schema

NameRequiredDescriptionDefault
portNoOnly for a browser started with --remote-debugging-port: that port. Leave out for remote debugging turned on at brave://inspect or chrome://inspect.
withinNoSearch only inside this control's element, an id from nvda_find_objects. By default the page NVDA is in.
selectorYesA CSS selector, such as '[data-icon="send"]', 'span[data-testid]' or 'button'.
max_resultsNoStop after this many elements.
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

A3.5/5.0
Behavior3/5

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

The key operational prerequisite is disclosed: results come 'through the browser's remote debugging', so a browser must be launched with debugging enabled. The description also defers to nvda_inspect_html for cautions, which is useful shorthand but not self-contained. It says nothing about failure behavior when debugging is off or no page is loaded, and the readOnlyHint=false / idempotentHint=false annotations arguably sit oddly with a pure lookup, without the text clarifying why.

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?

Two short paragraphs, front-loaded with the purpose and a concrete example, with no wasted phrasing. Minor blemishes: a stray closing quotation mark and the second paragraph being a bare cross-reference rather than an integrated clarification.

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 values need no explanation, and the description still summarizes the shape (tag, attributes, text). For a five-parameter, fully documented developer tool this is largely complete; only the boundary with nvda_inspect_html and the remote-debugging setup path are left implicit.

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 the schema already documents port, within, selector, max_results and response_format thoroughly. The description reinforces the selector-based searching and the '(or inside a control)' scope that maps to within, but adds no format, syntax or default guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: find elements in the page NVDA is reading (or inside a control) by CSS selector, returning tag, attributes and text. It is clearly a developer-facing DOM query tool. It does not, however, state how it differs from the near-named sibling nvda_inspect_html or from nvda_find_in_page, so the agent must infer the boundary.

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?

It supplies a use case — seeing how an app marks elements (e.g. WhatsApp's data-icon attributes) that NVDA cannot see — and restricts the audience to add-on developers. But it never says when to choose this over nvda_inspect_html, nvda_find_in_page or nvda_find_objects, which is the main routing decision an agent faces here.

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