axe-devtools-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@axe-devtools-mcpScan https://example.com for accessibility issues."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
axe-devtools-mcp
An MCP server that runs axe-core accessibility audits and returns the results to any MCP client — including Claude Code, Claude Desktop, and Cursor.
It renders pages in headless Chromium (via Playwright), injects axe-core, and reports WCAG violations with impact levels, affected elements, and fix guidance.
Tools
Tool | Description |
| Load a URL (live site or local dev server) in headless Chromium and run an axe-core audit. |
| Run an axe-core audit against a raw HTML string. |
| Scan a local |
| Crawl a running site breadth-first from a start URL, following same-origin links, and audit every page (up to |
Both tools accept:
tags— WCAG / rule tags to run, e.g.["wcag2a", "wcag2aa", "wcag21aa", "best-practice"]rules— only run these axe rule ids, e.g.["color-contrast", "image-alt"]excludeRules— axe rule ids to skipdetail—"full"(default; lists offending elements + fixes) or"summary"(rule + counts only)maxNodes— max offending elements to list per rule whendetail="full"(default5)includeIncomplete— also report axe "incomplete" items: checks that need manual review (e.g. color-contrast over background images,aria-hiddenfocus). Off by default; settrueto surface likely issues that automated rules could not confirm.
scan_url and scan_file also accept include (CSS selector to scope the scan) and timeoutMs. scan_file takes a path (absolute, or relative to the server's working directory). scan_site additionally takes maxPages (default 5, max 50) and sameOriginOnly (default true).
Scanning your own site / codebase
axe-core is a runtime engine — it audits the rendered DOM, not your source files. To audit code you're building:
Running app (best): start your dev server (
npm run dev), thenscan_url http://localhost:3000/..., orscan_site http://localhost:3000to crawl every route in one call. This tests exactly what users get after your framework renders.Static build output:
scan_file ./dist/index.html. Note single-page-app builds are usually empty shells hydrated by JS, so scan the running server instead.Source-level linting (a different, complementary tool):
eslint-plugin-jsx-a11y,eslint-plugin-vuejs-accessibility, etc.
Related MCP server: A11y MCP Server
Requirements
Node.js >= 18
A Chromium browser managed by Playwright.
npm installrunsnpx playwright install chromiumautomatically; if that was skipped, run it manually:npx playwright install chromium
Use with Claude Code
Register the server with the Claude Code CLI:
# From npm (once published)
claude mcp add axe-devtools -- npx -y axe-devtools-mcp
# Or from a local clone
claude mcp add axe-devtools -- node /absolute/path/to/axe-devtool-mcp/dist/index.jsThen in Claude Code:
Scan https://example.com for accessibility issues.
Use with other MCP clients
This is a standard stdio MCP server, so it works in any MCP-capable client. Once published to npm, every client uses the same npx invocation; before publishing, replace it with node /absolute/path/to/axe-devtool-mcp/dist/index.js.
Claude Desktop
Edit claude_desktop_config.json
(macOS: ~/Library/Application Support/Claude/claude_desktop_config.json,
Windows: %APPDATA%\Claude\claude_desktop_config.json), then restart the app:
{
"mcpServers": {
"axe-devtools": {
"command": "npx",
"args": ["-y", "axe-devtools-mcp"]
}
}
}VS Code / GitHub Copilot (Agent mode)
Add a .vscode/mcp.json in your workspace (note the servers key), then enable it from the Copilot Chat "Tools" picker in Agent mode:
{
"servers": {
"axe-devtools": {
"type": "stdio",
"command": "npx",
"args": ["-y", "axe-devtools-mcp"]
}
}
}Cursor
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"axe-devtools": {
"command": "npx",
"args": ["-y", "axe-devtools-mcp"]
}
}
}Tip: some clients (e.g. background/headless runners) don't run npm lifecycle scripts, so the Chromium auto-install won't fire. If a scan fails to launch a browser, run
npx playwright install chromiumonce on that machine.
Run from source
git clone https://github.com/Ravindrabisht12/axe-devtool-mcp.git
cd axe-devtool-mcp
npm install
npm run build
node dist/index.js # speaks MCP over stdioPublish to npm
npm login
npm publish --access publicAfter publishing, anyone can run it with npx -y axe-devtools-mcp — no clone required.
How it works
MCP client (Claude Code)
│ stdio (JSON-RPC)
▼
axe-devtools-mcp ──► Playwright (headless Chromium) ──► axe-core injected into the page
▲ │
└────────────── formatted violations + fixes ◄──────────────┘License
MIT
Available Tools
4 toolsscan_fileScan a local HTML file for accessibility issuesA
Runs an axe-core accessibility audit against a local .html file on disk (loaded via file:// so linked CSS/assets resolve). Use for static-site build output. Note: single-page-app build files are usually empty shells hydrated by JS — scan the running dev server with scan_url instead.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to a local .html file (absolute, or relative to the server's cwd). | |
| tags | No | WCAG / rule tags to run, e.g. ["wcag2a","wcag2aa","wcag21aa","best-practice"]. Omit to run the default rule set. | |
| rules | No | Only run these axe rule ids, e.g. ["color-contrast","image-alt"]. | |
| detail | No | "summary" lists violated rules and counts only; "full" (default) also lists offending elements and fix guidance. | full |
| include | No | Optional CSS selector to scope the scan to one region of the page. | |
| maxNodes | No | Max offending elements to list per rule when detail=full. | |
| timeoutMs | No | Load timeout in ms (default 30000). | |
| excludeRules | No | Axe rule ids to skip. | |
| includeIncomplete | No | Also report axe "incomplete" items — checks that need manual review (e.g. color-contrast over images, aria-hidden focus). Off by default; set true to surface likely issues automated rules could not confirm. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the file:// loading behavior but does not mention side effects, error handling, or whether the file is modified. While safe to assume read-only, more detail on outcomes would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences are front-loaded with purpose and usage guidance. Every sentence adds value, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 9 parameters and no output schema, the description covers purpose and key context. However, it lacks explanation of the output format, which is needed since no output schema exists. This gap prevents a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not mention any parameters or add meaning beyond the schema, so it does not exceed baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs an axe-core audit against a local .html file, specifying the file:// loading mechanism. It distinguishes itself from sibling tools by advising against scanning SPAs and directing to scan_url instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (static-site build output) and when not to (single-page app build files), providing a clear alternative (scan_url). This gives an agent actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_htmlScan raw HTML for accessibility issuesA
Runs an axe-core accessibility audit against a raw HTML string (rendered in headless Chromium). Use for markup snippets or generated HTML that isn't served at a URL.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | The HTML markup to scan. | |
| tags | No | WCAG / rule tags to run, e.g. ["wcag2a","wcag2aa","wcag21aa","best-practice"]. Omit to run the default rule set. | |
| rules | No | Only run these axe rule ids, e.g. ["color-contrast","image-alt"]. | |
| detail | No | "summary" lists violated rules and counts only; "full" (default) also lists offending elements and fix guidance. | full |
| maxNodes | No | Max offending elements to list per rule when detail=full. | |
| excludeRules | No | Axe rule ids to skip. | |
| includeIncomplete | No | Also report axe "incomplete" items — checks that need manual review (e.g. color-contrast over images, aria-hidden focus). Off by default; set true to surface likely issues automated rules could not confirm. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses that the scan runs axe-core in headless Chromium, which is transparent for a read-only scan. However, it does not mention potential limitations (e.g., handling of external resources) or return value details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences with no extraneous text. It front-loads the core purpose and follows with a clear usage statement, earning high marks for efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters and no output schema, the description is minimally adequate. It covers purpose and use case but omits any description of return values or output structure, leaving agents without expectations for what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds no parameter-specific information beyond what the schema already provides, meeting the baseline but not exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: running an axe-core accessibility audit on a raw HTML string. It distinguishes itself from siblings by specifying usage for markup snippets or generated HTML not served at a URL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to use: 'Use for markup snippets or generated HTML that isn\'t served at a URL.' This clearly defines the use case and implicitly excludes URL-based scans, differentiating from siblings like scan_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_siteCrawl a running site and scan multiple pagesA
Crawls a running site breadth-first starting from a URL, following same-origin links, and runs an axe-core audit on each page (up to maxPages). Returns an aggregated report plus per-page detail. Use to audit a whole site/app in one call instead of scanning routes one by one.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The start URL to crawl from (http:// or https://). | |
| tags | No | WCAG / rule tags to run, e.g. ["wcag2a","wcag2aa","wcag21aa","best-practice"]. Omit to run the default rule set. | |
| rules | No | Only run these axe rule ids, e.g. ["color-contrast","image-alt"]. | |
| detail | No | "summary" lists violated rules and counts only; "full" (default) also lists offending elements and fix guidance. | full |
| maxNodes | No | Max offending elements to list per rule when detail=full. | |
| maxPages | No | Maximum number of pages to crawl and scan (default 5, max 50). | |
| timeoutMs | No | Per-page navigation timeout in ms (default 30000). | |
| excludeRules | No | Axe rule ids to skip. | |
| sameOriginOnly | No | Only follow links on the same origin as the start URL (default true). | |
| includeIncomplete | No | Also report axe "incomplete" items — checks that need manual review (e.g. color-contrast over images, aria-hidden focus). Off by default; set true to surface likely issues automated rules could not confirm. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes crawling strategy (breadth-first, same-origin links, max pages) and audit behavior. With no annotations, the description covers key behavioral traits, though it omits potential error conditions or performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, no redundant words, and key information is front-loaded. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 10 parameters and no output schema, the description adequately explains what it does and when to use it, but lacks details about the return format (e.g., structure of the aggregated report). Sibling tools are noted but not directly compared.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; each parameter already has a description. The overall description adds minimal extra meaning (e.g., 'breadth-first') beyond what the schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it crawls a site breadth-first, runs axe-core audits on each page, and returns aggregated plus per-page results. Distinguishes from siblings by focusing on whole-site scanning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use to audit a whole site/app in one call instead of scanning routes one by one,' providing a clear when-to-use scenario. Could be improved by explicitly contrasting with single-page tools like scan_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_urlScan a URL for accessibility issuesA
Loads a URL in headless Chromium, runs an axe-core accessibility audit, and returns WCAG violations with fix guidance. Use for live pages (http/https) or local dev servers.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to scan (http:// or https://). | |
| tags | No | WCAG / rule tags to run, e.g. ["wcag2a","wcag2aa","wcag21aa","best-practice"]. Omit to run the default rule set. | |
| rules | No | Only run these axe rule ids, e.g. ["color-contrast","image-alt"]. | |
| detail | No | "summary" lists violated rules and counts only; "full" (default) also lists offending elements and fix guidance. | full |
| include | No | Optional CSS selector to scope the scan to one region of the page. | |
| maxNodes | No | Max offending elements to list per rule when detail=full. | |
| timeoutMs | No | Navigation timeout in milliseconds (default 30000). | |
| excludeRules | No | Axe rule ids to skip. | |
| includeIncomplete | No | Also report axe "incomplete" items — checks that need manual review (e.g. color-contrast over images, aria-hidden focus). Off by default; set true to surface likely issues automated rules could not confirm. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses loading in headless Chromium and running axe-core, but does not mention side effects (likely read-only), permissions, or security considerations. Behavior is adequately, not thoroughly, described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences with no wasted words. It front-loads the primary action and context, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks details about return value structure (e.g., output schema), error handling, or pagination. With no output schema, a more complete description of the response format would be beneficial. For a tool with 9 parameters and no output schema, the description is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all parameters described in the schema. The description adds no additional parameter semantics beyond the schema. Baseline of 3 is appropriate as the schema already provides sufficient detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: scanning a URL for accessibility issues using axe-core. It specifies the target (live pages or local dev servers), distinguishing it from sibling tools like scan_file or scan_html.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for use: 'Use for live pages (http/https) or local dev servers.' It implicitly excludes non-live content (files, HTML strings, site maps), but does not explicitly mention when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v0.4.0- First observed
scan_file - First observed
scan_html - First observed
scan_site - First observed
scan_url
TDQS
Each tool targets a distinct input type (file, HTML string, live URL, whole site crawl), leaving no ambiguity about which to use.
All tools follow a consistent 'scan_<target>' pattern, making the naming predictable and intuitive.
With 4 tools, the set covers the main use cases for accessibility auditing without being excessive or insufficient.
The tools provide a complete workflow for auditing static files, HTML snippets, single pages, and entire sites, with no obvious gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for visual regression testing: triage a PR's UI diffs from your coding agent.
Scans remote MCP servers for protocol, security, and TLS issues; exposes scan tools via MCP.
MCP server to assist with JxBrowser development.
HTML-to-PDF MCP server — render pixel-faithful PDFs from HTML.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP (Model Context Protocol) server for performing accessibility audits on webpages using axe-core. Use the results in an agentic loop with your favorite AI assistants (Cline/Cursor/GH Copilot) and let them fix a11y issues for you!222852Mozilla Public 2.0
- AlicenseAqualityCmaintenanceAn MCP server that enables LLMs to perform web accessibility testing against WCAG standards using Deque Axe-core API and Puppeteer.623391MIT
- AlicenseAqualityCmaintenanceA lightweight local MCP server that runs axe-core accessibility audits via Playwright and returns compressed, actionable results optimized for Claude's context window.5105MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that lets an AI agent scan a web page for WCAG accessibility issues and get back findings it can act on.88MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Ravindrabisht12/axe-devtool-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server