
Accessibility Scanner MCP Server: Setup for Claude, Cursor and Other Apps
Lets Claude, Cursor and other coding assistants open your web pages in a real browser and check them for accessibility problems.
This server drives a Chrome browser through Playwright and runs axe-core accessibility scans, keyboard focus checks and screen reader style checks on pages you point it at. It runs on your computer with no account or API key, and you need Google Chrome installed. Automated checks do not prove WCAG compliance, and the README says manual testing is still needed. The assistant can also click, type and run scripts in the page, so aim it at your own app first.
Good for
- Front-end developers who want WCAG checks while they build
- QA and accessibility testers who want repeatable keyboard and screen-reader-style audits
- Teams that audit a whole site and keep the JSON reports
Works in
12 should work
Tap an app to see how to set it up and any known problems.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Client does not support this transport.
Client does not support this transport.
Install MCP Accessibility Scanner
Claude Code
- 1
Copy this prompt.
Add the MCP Accessibility Scanner server to Claude Code. Run this command: claude mcp add accessibility-scanner -- npx --allow-scripts=re2 mcp-accessibility-scanner --isolated Then check that it loaded and tell me if I need to sign in or restart.
- 2
Paste it into Claude Code. It shows the change and asks before running it.
Requires Node.js and npm, Google Chrome.
Read-only mode: There is no read-only mode. Add `--blocked-tools browser_evaluate,browser_file_upload` after the package name to hide the script and upload tools.
Install Google Chrome first: the package does not include a browser. The --allow-scripts=re2 flag is needed on npm 12 so the native re2 module installs. We add --isolated ourselves: the README's own config uses it, but its VS Code command does not, and without it the browser may reuse a saved profile with your logins. Add --headless to hide the browser window, and --output-dir <absolute path> to choose where reports and screenshots are saved. Other apps use the same command in their own config format.
Built from the package data we hold. Not yet tested by us. Source.
Tools
Checks the open page for WCAG accessibility problems with axe
Runs the axe-core rule set on the current page and lists each violation with its impact, affected elements and a fix link. It can also save a screenshot with the problems boxed.
Try: “Scan the page you just opened for WCAG AA problems.”
Network ·
scan_pageCrawls pages on the same site and totals the accessibility problems
Follows internal links from the current page, scans each page and saves a JSON report that combines the violations found across the site.
Try: “Audit the whole docs site and give me the worst pages.”
Write ·
audit_siteCompares scan results across screen sizes, color schemes and zoom levels
Runs the same accessibility scan under several variants, such as mobile and desktop, dark mode, reduced motion and zoom, and compares each to the baseline. Saves a JSON report.
Try: “Compare accessibility on this page at mobile and desktop sizes.”
Write ·
scan_page_matrixTabs through the page to check focus order, visible focus and skip links
Presses Tab through the page and reports focus jumps, missing focus outlines, skip links and keyboard traps. Saves a JSON report.
Try: “Check whether I can reach every control on this page with only the keyboard.”
Write ·
audit_keyboardChecks element names and reading order the way a screen reader would see them
Reads the browser accessibility tree and element positions to flag poor or missing names and odd reading order. It does not run an actual screen reader. Saves a JSON report.
Try: “Check whether the buttons on this page have useful names.”
Write ·
audit_screen_readerOpens a web address in the browser
Loads the URL you give it in the controlled browser, including local development servers.
Try: “Open http://localhost:3000 in the browser.”
Network ·
browser_navigateGoes back to the previous page
Moves the browser one step back in its history.
Try: “Go back one page.”
Read ·
browser_navigate_backReads the page as a list of controls and text
Captures the accessibility tree of the page. The assistant uses it to see what is on screen and which element to act on.
Try: “Show me what is on this page.”
Read ·
browser_snapshotSearches the page snapshot for words or a pattern
Looks through the snapshot for text or a regular expression and returns matching elements with a few lines of context.
Try: “Find the "Sign up" button on the page.”
Read ·
browser_findClicks an element on the page
Clicks the element the assistant picks from the snapshot. Clicks can submit forms or trigger actions on the live site.
Try: “Click the "Continue" button.”
Write ·
browser_clickTypes text into a field
Enters text into an editable element, with an option to press Enter after.
Try: “Type my test email into the email field.”
Write ·
browser_typeFills several form fields in one step
Sets multiple fields at once, such as text boxes, checkboxes, radios and dropdowns.
Try: “Fill in the signup form with test data.”
Write ·
browser_fill_formPresses a keyboard key
Sends one key press such as Tab, Enter or an arrow to the page.
Try: “Press Escape to close the menu.”
Write ·
browser_press_keyPicks an option in a dropdown
Selects one or more options in a select element.
Try: “Choose "United Kingdom" in the country dropdown.”
Write ·
browser_select_optionMoves the pointer over an element
Hovers over an element so menus and tooltips appear.
Try: “Hover over the account menu.”
Read ·
browser_hoverDrags one element onto another
Performs drag and drop between two elements on the page.
Try: “Drag the first card onto the done column.”
Write ·
browser_dragDrops files or data onto an element as if dragged in from outside
Simulates dragging files or clipboard-like data from outside the browser onto an element. Files are read from your computer unless upload folders are restricted.
Try: “Drop test.csv onto the upload area.”
Write ·
browser_dropUploads files from your computer to the page
Attaches one or more local files to a file chooser on the page. Any path on your machine works unless you restrict upload folders.
Try: “Upload ./sample.pdf in the file chooser.”
Write ·
browser_file_uploadRuns JavaScript on the page or on one element
Executes a JavaScript expression inside the loaded page and returns the result. It can read or change anything the page itself could.
Try: “Run a script to list all images without alt text.”
Runs code ·
browser_evaluateAccepts or dismisses a browser pop-up
Answers alert, confirm and prompt dialogs that block the page.
Try: “Dismiss the confirmation pop-up.”
Write ·
browser_handle_dialogSaves a picture of the page or one element
Takes a PNG, JPEG or WebP screenshot and saves it in the output folder. It is for viewing only, not for choosing elements to click.
Try: “Take a screenshot of the checkout page.”
Write ·
browser_take_screenshotWaits for text to appear or disappear, or for some seconds
Pauses until text shows up or goes away, or a set time passes, so slow pages finish loading before the next step.
Try: “Wait until the "Loading" text is gone.”
Read ·
browser_wait_forReturns the page's console messages
Lists console logs, warnings and errors the page has produced.
Try: “Show any errors from the browser console.”
Read ·
browser_console_messagesLists the requests the page made
Returns network requests since the last navigation, with the option to include up to 200 earlier ones from the same tab.
Try: “List the failed network requests on this page.”
Read ·
browser_network_requestsShows details of one network request
Returns the headers (with credentials redacted) and body details for a single request from the list.
Try: “Show me the response details for request 12.”
Read ·
browser_network_requestChanges the browser window size
Resizes the window so you can check how a page looks at mobile or desktop widths.
Try: “Resize the window to 375 by 812.”
Write ·
browser_resizeSwitches dark mode, print view or reduced motion
Sets CSS media features for the page, such as color scheme or reduced motion, and keeps omitted ones unchanged.
Try: “Turn on dark mode and reduced motion.”
Write ·
browser_emulate_mediaCloses the page
Closes the current page in the browser.
Try: “Close the current page.”
Write ·
browser_closeLists, opens, closes or switches browser tabs
Manages tabs so a multi-page flow can keep several pages open at once.
Try: “Open a new tab and switch to it.”
Write ·
browser_tabsSets how long page loads may take
Changes the timeout for navigation and page loads on existing tabs. It does not persist if the browser context is recreated.
Try: “Allow 60 seconds for page loads.”
Write ·
browser_navigation_timeoutSets how long clicks and other actions may take
Changes the default timeout for browser actions on existing tabs. It does not persist if the browser context is recreated.
Try: “Give actions 10 seconds before timing out.”
Write ·
browser_default_timeoutOpens a second, separate browser with its own cookies
Creates another browser context with its own tabs, cookies and storage, and returns an id the other browser tools accept.
Try: “Open a separate browser session for the admin login.”
Write ·
browser_session_openCloses a browser session opened earlier
Closes an extra session and frees its browser. The default session cannot be closed this way.
Try: “Close the admin browser session.”
Write ·
browser_session_close
Read from the source code
Permissions
medium risk · 6 things to watch
Medium risk
The assistant can control a real browser on any site you point it at, including clicking, typing, running scripts and uploading local files. Use the isolated profile from the setup and block the script and upload tools if you do not need them.
What it can do
- Read your data
- Create and change things
- Delete things
- Read-only mode
Watch out for
It drives a real browser that can click and submit
Click, type and form tools act on live pages, so pointing it at a site you are logged in to can have real effects. The README setup uses an isolated profile, which starts with no logins. github.com
It can run JavaScript in any page it opens
The evaluate tool runs scripts on the loaded page. Block it with the blocked-tools option if you do not need it. github.com
It can upload any file from your computer
The upload and drop tools read local files and send them to the page. Set the allowed upload folders option to limit this to a safe folder. github.com
Reports and screenshots are saved to disk
The audit tools and screenshot tool write files to the output folder you set. Existing files are never overwritten by the screenshot and PDF tools. github.com
Page-defined tools can appear automatically
If a page exposes its own tools, they are added to the list and sit outside the allow and block lists. Treat their names and results as untrusted. github.com
Browser download is opt-in
Installing a browser is off unless you start the server with the install capability. The tool downloads files without checksum checks, per the README. github.com
Security advisories
No published security advisories as of Nov 1, 2026.
Technical details
| Turning on read-only | No read-only mode. You can hide named tools with --blocked-tools, for example browser_evaluate and browser_file_upload, but blocking one tool does not stop the same action through another. |
|---|---|
| Talks to | Any website you ask it to open or crawl |
| Sign-in and keys | No account. With --isolated the browser profile lives in memory; reports and screenshots go to the output folder. |
Questions
Is MCP Accessibility Scanner official?
No. It is a community project by JustasMonkev, built on Playwright and axe-core, and not made by Deque, Microsoft or an assistant vendor.
Do I need an API key or account?
No. It runs on your computer with no sign-in or key. You do need Google Chrome installed, because the npm package does not include a browser.
Why does it fail to start with a re2 error?
npm 12 skips dependency install scripts, and the native re2 module needs one. The install command in the box above passes the allow-scripts flag for re2 so it installs. On older npm versions the flag is ignored.
Does it prove my site meets WCAG?
No. The README says automated checks do not certify WCAG compliance and manual testing is still needed. The screen reader audit reads the browser accessibility tree and does not use a real screen reader.
Can it run read-only?
Not fully. There is no read-only switch, but you can hide specific tools such as the script runner and file upload with the blocked-tools option. Click and type tools stay unless you block them too.
Does it test pages behind a login?
Yes. The README describes signing in by hand in the browser or loading a saved storage-state file for repeatable runs. Use a test account, because the browser can click and submit forms.
Which tools are off by default?
PDF export, coordinate-based mouse tools, verify tools, the recorder and browser install. You turn them on at startup with the caps option.
How is it different from Playwright MCP?
It is a separate community server built on Playwright, not Microsoft's @playwright/mcp (see the Playwright MCP page). The browser tools (navigate, snapshot, click, type, evaluate, tabs) have the same names, but this server registers 33 tools by default and adds five accessibility tools: scan_page, audit_site, scan_page_matrix, audit_keyboard and audit_screen_reader. Use Microsoft's server for general browser automation and this one for accessibility audits.
Information
updated Nov 2, 2026
- Publisher
- Community
- Package
mcp-accessibility-scanner- Registry
- npm
- Transport
- stdio
- Auth
- None
- Version
- 5.0.0
- License
- MIT
- Last commit
- Oct 31, 2026
- Listed in
- Official MCP registry
Sources
Docs, issue trackers and discussions this page is built from. Issues, quotes and findings above link to their own source.
Show all 3Hide
- github.com · github.com
- github.com · github.com
- github.com · github.com