Skip to main content

NVDA MCP

NVDA MCP connects AI assistants to the NVDA screen reader through the Model Context Protocol (MCP). The assistant can read what NVDA reads and hear what NVDA says. If you allow it, it can also press keys, and you hear every step through NVDA, as if you had pressed them yourself.

Why it exists

AI assistants can now do things on a computer, not just answer questions. Most of them work by looking at screenshots and clicking on what they see. For someone who uses a screen reader, that has two problems:

  • You can't follow what the assistant does. It clicks things you never hear about, in places your screen reader may not even show you.
  • A screenshot is not what you experience. What matters to a screen reader user is which control has focus, its name, role and state, and what NVDA says about it. A picture of the screen leaves most of that out.

NVDA already knows all of this, because it is how you use your computer. NVDA MCP gives the assistant the same view: the focused control, the accessibility tree, the text of a document or web page, and exactly what NVDA said. When the assistant acts, it uses the keyboard through NVDA, the way you would, and NVDA announces the result. You and the assistant work from the same information, and you stay in control.

What it is useful for

For people who use NVDA:

  • "What did NVDA just say?" The assistant reads NVDA's speech history, so you can ask about something you missed, or ask for a summary of a long dialog.
  • Getting through confusing or inaccessible applications. Ask what is in a window, where a control is, or why a button has no name, and get an answer based on what NVDA actually sees.
  • Doing repetitive tasks. The assistant can move through an application with the keyboard, type text, switch windows, and wait for something to happen, such as a chat reply.
  • Learning. Ask which NVDA commands work where you are, or what a key does here.

For developers and testers:

  • See what NVDA announces for each control without moving focus, and find unlabeled or silent controls.
  • Audit the tab order of a dialog or page: duplicate names, keyboard traps, controls NVDA says nothing about.
  • Find out why NVDA is silent: trace the events NVDA handles and what it said for each one.
  • Regression tests: record what NVDA says through a series of key presses, and compare later runs with it.
  • Develop NVDA add-ons faster: read NVDA's log, see developer info like NVDA+F1, and reload add-on code.

Who it is for

  • Blind and low-vision people who use NVDA and want an AI assistant that works with their screen reader instead of around it.
  • NVDA add-on developers, who can test what their add-on makes NVDA say without doing every step by hand.
  • Developers of Windows applications and websites, who want to check their work with a real screen reader.
  • Accessibility testers, auditors and QA teams, who need repeatable checks of what a screen reader announces.
  • Trainers and support staff who help screen reader users and want to understand what they hear.

What you need

  • Windows with NVDA 2026.3 or later.
  • An AI assistant that supports MCP, such as Claude Code, Claude Desktop, Codex CLI, Cursor or VS Code.
  • uv, which downloads and runs the NVDA MCP server for you. If you already have Python 3.11 or later, you can use pip or pipx instead.

NVDA MCP has two parts: this add-on, and a small program called the nvda-mcp server, which your assistant starts. The add-on comes from NVDA's Add-on Store; the server comes from the Python Package Index (PyPI). Both are free and open source.

Setting it up

  1. Install the add-on. In NVDA, open Tools, then Add-on Store. Find NVDA MCP, install it and restart NVDA.

  2. Install uv, if you don't have it. Open a command prompt and run:

    winget install --id=astral-sh.uv -e
    

    Close the command prompt and open a new one, so it finds uv.

  3. Connect your assistant. In NVDA, open Settings (NVDA+N, Preferences, Settings), then the NVDA MCP category. Choose your assistant under Set up this MCP client and press Copy setup command.

    • For Claude Code or Codex CLI, paste the command into a command prompt and press Enter.
    • For Claude Desktop, Cursor and other assistants that use a settings file, paste the settings into that file. For Claude Desktop, it is claude_desktop_config.json (Settings, Developer, Edit Config).

    The command is like claude mcp add --scope user nvda -- uvx nvda-mcp==1.0.0: it tells your assistant to run the server version that matches your add-on.

Start your assistant and ask it something like "what has focus in NVDA?". It answers without pressing anything.

With pip or pipx instead of uv

pipx install nvda-mcp
claude mcp add --scope user nvda -- nvda-mcp

Use the same version as the add-on, and upgrade both together. With plain pip, run python -m nvda_mcp if the nvda-mcp command is not found.

Safety

Reading is always allowed. Everything that acts on your computer is off until you turn it on: pressing keys, typing, switching windows, activating controls, moving through web pages, running NVDA commands and reloading add-ons.

In NVDA's Settings, NVDA MCP category:

  • Let MCP clients, such as AI assistants, connect to NVDA (on by default).
  • Allow MCP clients to press keys (off by default).
  • Ask before the first key press after NVDA starts (on by default). NVDA asks you, with No focused, and names the program asking, as it calls itself.
  • Only let MCP clients control these applications (empty by default, meaning all). For example notepad, winword. Anything else is refused.
  • Keep a log of every action MCP clients take (on by default), in %APPDATA%\nvda\nvdaMcp\actions.log.
  • Number of spoken messages to remember (500 by default).

Commands in Input Gestures, NVDA MCP category (no keys assigned by default):

  • Report whether NVDA MCP is running and whether it may press keys.
  • Stop MCP clients from pressing keys until you approve again.
  • Open the log of actions MCP clients have taken.

How the connection is protected:

  • The add-on listens only on your own computer (127.0.0.1), on a random port.
  • Every request needs a secret token, made new each time NVDA starts, stored where only your Windows account can read it.
  • Requests from web pages are refused.
  • Nothing works on secure screens (sign-in, UAC), and requests are refused while Windows is locked.
  • The settings live in NVDA's base configuration, so a configuration profile cannot turn key presses on.

Privacy

The add-on itself sends nothing over the internet. But what your assistant reads goes to the assistant, and most assistants send it to their provider's servers. That can include the text on your screen, what NVDA says, the contents of documents and chat windows, and anything NVDA reads aloud while you type.

  • Before you work with something private, such as banking, passwords or personal messages, close your assistant or turn off Let MCP clients connect in NVDA's settings.
  • NVDA's speech history is kept in memory only, and cleared when NVDA restarts.
  • The action log stays on your computer.

Tools

The assistant sees these tools:

Tool What it does
nvda_get_status NVDA version, synthesizer, speech mode, foreground app, permissions
nvda_get_focus The focused control: name, role, states, value, position, containers
nvda_get_navigator_object The same, for NVDA's navigator object
nvda_get_object_tree The accessibility tree of the foreground window, focus or navigator; long lists are shortened
nvda_find_objects Find controls in the foreground window by name and/or role
nvda_get_text Full text of a document, web page or edit field, plus the caret line; or only the lines containing some text
nvda_get_speech_history What NVDA said, with ids for polling and a text filter
nvda_wait_for_speech Wait until NVDA says something, such as a chat reply
nvda_list_windows Open application windows, including ones on other virtual desktops if asked
nvda_speak Say something through NVDA's speech and braille
nvda_press_keys Press keys, optionally holding modifiers, then report what NVDA said and where focus went
nvda_type_text Type a line of text in any language, emoji included, without using the clipboard
nvda_activate_window Bring a window to the front by title or handle
nvda_focus_object Move focus to a control found with nvda_find_objects
nvda_activate_object Press, follow or toggle a control found with nvda_find_objects
nvda_set_document_mode Switch between browse mode and focus mode in a web page, like NVDA+space
nvda_find_in_page Move the browse mode cursor to a match on the page, like NVDA's find command
nvda_list_elements Headings, links, landmarks, form fields and more, like the Elements List
nvda_move_to_element Move to, or activate, an element from nvda_list_elements
nvda_get_action_log The newest entries of the log of actions clients took
nvda_audit_focus_order Tab through a window and report unlabeled controls, silent controls, duplicate names, keyboard traps

For developers of add-ons and accessible applications:

Tool What it does
nvda_preview_speech What NVDA would announce when a control gets focus, without moving focus; scan a whole window and flag unlabeled or silent controls
nvda_trace_events Record the events NVDA handles (focus, name and value changes, live regions, UIA notifications) and what it said for each one
nvda_get_log NVDA's log, filtered by level and text; IO entries (keys typed) only when asked
nvda_get_output_history Beeps, sounds, braille output and speech being cut off, optionally merged with speech
nvda_get_dev_info Developer info for a control, like NVDA+F1
nvda_list_scripts NVDA commands available where focus is, with their keys; or which command a key runs
nvda_run_script Run an NVDA command by name, whatever key it is assigned to
nvda_reload_plugins Reload add-ons and app modules from disk, like NVDA+control+F3
nvda_get_settings Read NVDA's settings as they apply now; values that look like secrets are hidden
nvda_run_scenario Run keys and typing, record what NVDA said after each step, and compare with a baseline file

Every action reports what NVDA said afterwards and where focus went, and can wait for an expected announcement, such as "sent" or a dialog's title.

Support NVDA MCP

NVDA MCP is free, and made in spare time. If it helps you, you can support its development with a donation through PayPal. There is also a Donate button in NVDA's Settings, NVDA MCP category.

More

License

Copyright (C) 2026 InfiArtt. NVDA MCP is free software under the GNU General Public License, version 2 or later. The software it uses and their licenses are listed in THIRD_PARTY_NOTICES.md.

Metadata

Release files for nvda-mcp 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nvda-mcp 1.0.0
File Size Uploaded Provenance Actions
nvda_mcp-1.0.0.tar.gz 36.8 kB With provenance Details for nvda_mcp-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for nvda-mcp 1.0.0
File Interpreter ABI Platform Actions
nvda_mcp-1.0.0-py3-none-any.whl Python 3 none any Details for nvda_mcp-1.0.0-py3-none-any.whl

Total release size: 74.8 kB

Release files / nvda_mcp-1.0.0.tar.gz

Download URL nvda_mcp-1.0.0.tar.gz
Size 36.8 kB
Tags Source
SHA-256 checksum
How to use checksums
75b698bbf3680b5e8325e058421b07bc795d146e18188353f0c9bebb8b9918c9
BLAKE2b-256 checksum
How to use checksums
8750bd1be56d32d0b96d8d866481d5cc0d90aebb9cb323babaa289b5f9f3f705
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Release files / nvda_mcp-1.0.0-py3-none-any.whl

Download URL nvda_mcp-1.0.0-py3-none-any.whl
Size 38.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6ddaf6399d052586b167342225f7e85e45b5479984a68bdf7e3401adc0b8c040
BLAKE2b-256 checksum
How to use checksums
435a5ca94d5e72c1b76421ddb6175bdd0934ce89990832a05b20ea98bfdc750a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Security for nvda-mcp 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for nvda_mcp-1.0.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page