@navable/mcp
v0.1.5
Published
Free, real-browser accessibility scanner for AI coding agents. Scans localhost with Playwright + axe-core, returns WCAG 2.1 Level A + AA violations with fix plans.
Downloads
797
Maintainers
Readme
Navable MCP
Part of navable.io — open-source accessibility tools for development teams.
A Model Context Protocol (MCP) server that gives AI coding agents real-browser accessibility scanning. Scans localhost pages with Playwright + axe-core, returns WCAG 2.1 Level A + AA violations with EN 301 549 mapping, and generates structured fix plans your agent can work through autonomously.
Quick Start
- Add the MCP config for your editor (see below)
- Start your dev server
- Ask your agent: "scan http://localhost:3000 for accessibility issues"
Chromium installs automatically on the first scan (~150 MB one-time download). No extra step needed. If auto-install fails (e.g. restricted network), install manually:
npx playwright install chromium
MCP Configuration
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"navable": {
"command": "npx",
"args": ["-y", "@navable/mcp"],
"env": {
"NAVABLE_PROJECT_ROOT": "/absolute/path/to/your/project"
}
}
}
}NAVABLE_PROJECT_ROOT is optional. Set it if .navable-plan.json is written to the wrong directory
(some IDE extension hosts use a different working directory). Omit env if auto-detection works.
VS Code (Copilot)
Add to .vscode/mcp.json:
{
"servers": {
"navable": {
"command": "npx",
"args": ["-y", "@navable/mcp"]
}
}
}Claude Code
claude mcp add navable -- npx -y @navable/mcpAvailable Tools
run_accessibility_scan
Scans a URL for WCAG 2.1 Level A + AA accessibility violations.
| Input | Description |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| url | Full URL to scan (e.g. http://localhost:3000) |
| tags | axe-core rule tags to include (optional) |
| include | CSS selectors to limit scan scope (optional) |
| exclude | CSS selectors to exclude (optional) |
| compact | true (default) — smaller JSON: omits description, helpUrl, wcag tags, failureSummary; wcagCriteria keeps only sc and en301549; HTML snippets capped at 120 chars; no pretty-print. Set false for the previous verbose shape. |
Workflow: The response includes a scanId. Pass it to generate_fix_plan instead of
pasting the full scan object — this avoids MCP client serialization issues and keeps chats smaller.
generate_fix_plan
Converts scan output into a structured AccessibilityFixPlan and writes .navable-plan.json when
writeToDisk is true.
| Input | Description |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| scanId | From run_accessibility_scan (preferred) |
| scan | Full scan JSON (fallback if the server was restarted; only the last 10 scans are cached) |
| writeToDisk | Write .navable-plan.json (default: true) |
| compact | true (default) when writing to disk: response is only planPath, summary, top 5 topItems, and manualReviewCount. Read the plan file for full item details. Set false to return the full plan in the tool response. Ignored when combined with writeToDisk: false (full plan is always returned). |
Returns planPath (absolute) when the file is written successfully. On write failure, returns an
error with the attempted path; set NAVABLE_PROJECT_ROOT in the MCP server env if needed.
update_fix_status
Mark fix plan items as done, skipped, or in progress. Prefer this over hand-editing
.navable-plan.json.
| Input | Description |
| ---------- | --------------------------------------------------------------- |
| fixId | Item ID(s), e.g. "fix-1" or ["fix-1", "fix-2"] |
| status | done, skipped, in_progress, or pending |
| planPath | Absolute path to plan file (optional; defaults to project root) |
Returns updated progress summary (total, done, pending, skipped).
Available Resources
Resources use text/markdown. Prefer parameterized URIs during fix workflows to save context.
WCAG / compliance
| URI | Size (typical) | Description |
| ----------------------------- | -------------- | --------------------------------------------------------------------------------------------- |
| navable://docs/wcag-mapping | Compact | WCAG SC → EN 301 549 → testability → axe rules; summary stats; WCAG 2.2 forward-looking table |
| navable://docs/bfsg-legal | Large | BFSG legal context: scope, German glossary, enforcement, BITV 2.0, dates (optional) |
Fix patterns (axe rule → before/after code)
| URI | Size (typical) | Description |
| --------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| navable://docs/fix-patterns/{ruleIds} | Small | Preferred. Comma-separated axe rule IDs, no spaces. Example: navable://docs/fix-patterns/label,color-contrast,image-alt. Unknown IDs are skipped. |
| navable://docs/fix-patterns | Large (~49 KB) | All 55 documented rules |
ARIA (WAI-ARIA APG patterns)
| URI | Size (typical) | Description |
| -------------------------------------------- | -------------- | ------------------------------------------------------------------------------------ |
| navable://docs/aria-patterns | Compact index | Table: slug, name, complexity, short description |
| navable://docs/aria-patterns/{patternSlug} | Per pattern | Full detail (e.g. dialog-modal, combobox). Invalid slug → lists available slugs. |
Semantic HTML
| URI | Size (typical) | Description |
| ---------------------------------------- | -------------- | --------------------------------------------------------------------------------------------- |
| navable://docs/semantic-html | Compact index | Table: element, implicit role, short description |
| navable://docs/semantic-html/{element} | Per element | Full detail (e.g. nav, button, input-checkbox). Invalid tag → lists available elements. |
Configuration
Create a .navable.json in your project root to customize behavior:
{
"allowedHosts": ["localhost", "127.0.0.1", "[::1]"],
"timeout": 15000,
"waitUntil": "load",
"axeTags": ["wcag2a", "wcag21a", "wcag2aa", "wcag21aa"],
"axeDisableRules": [],
"wcagLevel": "AA"
}| Option | Default | Description |
| ----------------- | ---------------------------------------------- | ------------------------------------------------------------------------------ |
| allowedHosts | ["localhost", "127.0.0.1", "[::1]"] | Hostnames the scanner may reach |
| timeout | 15000 | Navigation timeout in ms |
| waitUntil | "load" | Playwright wait strategy (load, domcontentloaded, networkidle, commit) |
| axeTags | ["wcag2a", "wcag21a", "wcag2aa", "wcag21aa"] | axe-core tags to include |
| axeDisableRules | [] | axe-core rule IDs to skip |
| wcagLevel | "AA" | Target WCAG conformance level |
Set NAVABLE_PROJECT_ROOT in the MCP server environment (see Cursor example above) so
.navable-plan.json resolves to your app’s repo root when the server’s cwd is not the project.
Recommended: Agent Skills
For a deterministic, repeatable workflow, pair this MCP server with @navable/skills — pre-built agent skills that guide your AI agent through scanning, fixing, reviewing, and auditing accessibility issues step by step.
The skills ensure your agent follows a consistent process (scan → plan → fix → verify) instead of improvising. Copy them into your project's skills folder:
# VS Code (Copilot)
cp -r skills/* .github/skills/
# Cursor
cp -r skills/* .agents/skills/
# Claude Code
cp -r skills/* .claude/skills/See the skills repository for details.
Requirements
- Node.js >= 20
- Playwright Chromium — downloaded automatically on first scan. If auto-install fails, run
npx playwright install chromiummanually.
Contributing / development
We love getting feedback and contributions. Found a bug? Have an idea for a new fix pattern or ARIA guide? Open an issue or send a PR — we'll review it quickly.
git clone https://github.com/web-DnA/navable-web-accessibility-mcp.git
cd navable-web-accessibility-mcp
npm install
npx playwright install chromium
npm run dev # watch modeLicense
MIT — navable.io
