MCP server for automated web accessibility scanning with Playwright and Axe-core.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by MCP Accessibility Scanner.
scan_pagePerforms a comprehensive accessibility scan on the current page using Axe-core.
audit_siteCrawls and scans multiple internal pages, then aggregates violations across the site.
scan_page_matrixRuns Axe scans on the same page across viewport/media/zoom variants and compares deltas against baseline.
audit_keyboardAudits real keyboard focus behavior by pressing Tab (and optional Shift+Tab) with practical heuristics.
audit_screen_readerAudits what a screen reader actually announces, using the browser's own accessibility tree (`page.ariaSnapshot`) plus element geometry. No screen reader is installed or driven; this is a static reading of the exposed tree.
browser_navigateNavigate to a URL.
A powerful Model Context Protocol (MCP) server that provides automated web accessibility scanning and browser automation using Playwright and Axe-core. This server enables LLMs to perform WCAG compliance checks, interact with web pages, manage persistent browser sessions, and generate detailed accessibility reports with visual annotations.
β
Full WCAG 2.0/2.1/2.2 compliance checking (A, AA, AAA levels)
π Detailed JSON reports with remediation guidance
π― Support for specific violation categories (color contrast, ARIA, forms, keyboard navigation, etc.)
π±οΈ Click, hover, and drag elements using accessibility snapshots
β¨οΈ Type text and handle keyboard inputs
π Capture page snapshots to discover all interactive elements
πΈ Take screenshots and save PDFs
π― Support for both element-based and coordinate-based interactions
π Tab management for multi-page workflows
π Monitor console messages and network requests
β±οΈ Wait for dynamic content to load
π Handle file uploads and browser dialogs
π Navigate through browser history
You can install the package using any of these methods:
Using npm:
A pre-built image is available on Docker Hub. The image includes Chromium and is pre-configured for containerized use β no extra flags needed.
Pull from Docker Hub:
To persist screenshots and reports on your host, add a volume mount:
Without the -v mount, output files only exist inside the container and are lost when it exits.
The Compose configuration publishes the unauthenticated MCP HTTP transport on 127.0.0.1:8931 only. Do not expose this port to untrusted networks.
Install the Accessibility Scanner in VS Code using the VS Code CLI:
For VS Code:
For VS Code Insiders:
The scanner can run in two modes depending on how you use it.
When launched without a subcommand, the process starts an MCP server that communicates over stdio. This is the mode used by MCP clients such as Claude Desktop, VS Code, and Claude Code -- you should never need to run it by hand.
All of the MCP client configuration examples in this README already use this default mode.
interactive subcommand)For manual terminal use, the interactive subcommand starts a readline REPL where you can call any tool directly:
Each line is <tool-name> <json-arguments>. Omit the JSON to pass {}.
Global browser connection flags still apply here, for example npx mcp-accessibility-scanner --headless interactive.
Use --mobile or PLAYWRIGHT_MCP_MOBILE=1 to emulate a generic mobile device (Pixel 10 for Chromium, iPhone 17 for WebKit). It cannot be combined with --device, CDP attach/launch modes, remote browser endpoints, or --extension.
Use --extension to connect through the current Playwright Extension, which must support extension protocol v2.
Set PLAYWRIGHT_MCP_EXTENSION_TOKEN to the token shown by the extension to bypass the connection approval dialog. The relay's CDP WebSocket endpoint always requires a separate random token, generated per relay and appended automatically for the server's own connection. This CDP token is never passed in Chrome's launch arguments or extension URL; the extension approval token cannot authenticate a CDP client.
Token-bypass connections are not background-safe: Chrome focuses the connection tab and window, and client-created tabs remain open after disconnect (upstream limitation).
With a token, the extension must connect and finish setup within 30 seconds after the connection page opens. Failed attempts release the relay so the next tool call can retry. Without a token, manual approval waits until you approve or cancel the call.
When --user-data-dir contains multiple Chrome profiles, the profile with the extension installed is selected automatically, preferring Chrome's last-used profile. Pass --profile-dir-name (or set PLAYWRIGHT_MCP_PROFILE_DIR_NAME) to select a profile explicitly; it requires --user-data-dir and accepts a Chrome profile directory name such as Default or Profile 1 (see "Profile Path" at chrome://version). The PLAYWRIGHT_MCP_EXTENSION_TOKEN approval token is specific to the profile, so when selecting a profile explicitly, use the token shown in that profile.
Packed extensions require an enabled record in the profile's preferences; a leftover extension directory alone does not count as installed. Profiles whose preferences mark the extension disabled or uninstalled are excluded from automatic selection and rejected for explicit selection. Explicit selection with a custom executable skips local installation checks. A whitespace-only PLAYWRIGHT_MCP_PROFILE_DIR_NAME is treated as unset; other string environment variables retain their existing blank-value handling.
list-tools subcommand)To print every tool name and its description:
Note: Tool names like
browser_navigateandscan_pageare MCP tool identifiers (and REPL commands in interactive mode). They are not shell subcommands -- you cannot runnpx mcp-accessibility-scanner browser_navigate.
Here's the Claude Desktop configuration:
You can pass a configuration file to customize Playwright behavior:
Create a config.json file with the following options:
Available Options:
browser.browserName: Browser to use (chromium, firefox, webkit)browser.allowedUploadDirs: Restrict files sent by browser_file_upload and browser_drop to regular files inside these directories, including resolved symlink targets. Restricted uploads and drops use a checked file handle and accept up to 50 MiB total per call. Unset allows any path; [] denies all file uploads and drops (text-only drops still work). Blank list entries are rejected. CLI: --allowed-upload-dirs (semicolon-separated; "" denies all), env: PLAYWRIGHT_MCP_ALLOWED_UPLOAD_DIRS (empty string denies all).Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mcp-accessibility-scanner)<a href="https://allmcps.com/mcp/mcp-accessibility-scanner"><img src="https://allmcps.com/api/badge/mcp-accessibility-scanner?style=directory" alt="MCP Accessibility Scanner on AllMCPs" /></a>