wcag-text-mcp
Validates text accessibility (contrast, spacing, language) against WCAG 2.1 criteria via modular MCP tools.
README
WCAG MCP Server Suite
A modular suite of MCP (Model Context Protocol) servers for WCAG 2.1 accessibility validation.
Architecture
This monorepo contains individual focused servers plus an umbrella server for full WCAG coverage:
packages/
├── core/ # Shared types, criteria definitions, report formatting
├── text/ # Text accessibility (contrast, spacing, language)
├── keyboard/ # Keyboard navigation and focus (2.1.x, 2.4.x)
├── aria/ # ARIA roles, states, properties (4.1.x)
├── media/ # Captions, audio descriptions (1.2.x)
├── forms/ # Labels, error handling (1.3.x, 3.3.x)
├── structure/ # Headings, landmarks, reading order (1.3.x, 2.4.x)
└── full/ # Umbrella combining all servers
Quick Start
# Install dependencies
npm install
# Build all packages
npm run build
# Or build individually
npm run build:core
npm run build:text
npm run build:keyboard
# etc.
Packages
@wcag-mcp/core
Shared library with:
- TypeScript types for check results, reports, criteria
- Complete WCAG 2.1 criteria definitions (78 criteria) with categories
- Report formatting utilities (human-readable and machine-readable)
@wcag-mcp/text
Text accessibility validation.
WCAG Criteria: 1.4.3, 1.4.4, 1.4.5, 1.4.6, 1.4.8, 1.4.10, 1.4.12, 3.1.1, 3.1.2
Tools:
check_contrast- Color contrast ratio (AA/AAA)check_text_spacing- Line-height, letter/word spacingcheck_line_length- Max 80 characters (AAA)check_language- Page lang attributevalidate_text- Comprehensive text validationget_wcag_text_criteria- Reference data
@wcag-mcp/keyboard
Keyboard and pointer accessibility validation.
WCAG Criteria: 2.1.1, 2.1.2, 2.1.4, 2.2.1, 2.2.3, 2.4.3, 2.4.7, 2.5.1, 2.5.2, 2.5.4, 2.5.5, 3.2.1
Tools:
check_keyboard_access- Keyboard operability, focus trappingcheck_focus_indicator- Focus visibility and contrastcheck_timing- Time limit adjustabilitycheck_motion- Motion actuation controlscheck_pointer_gestures- Complex gesture alternativescheck_pointer_cancellation- Down-event cancellationcheck_target_size- Touch target dimensionsget_wcag_keyboard_criteria- Reference data
@wcag-mcp/aria
ARIA and semantic accessibility validation.
WCAG Criteria: 2.5.3, 4.1.1, 4.1.2, 4.1.3
Tools:
check_name_role_value- Accessible names, roles, statescheck_status_message- Live region announcementscheck_aria_attributes- ARIA attribute validitycheck_landmarks- Landmark region labelingcheck_label_in_name- Visible label in accessible nameget_wcag_aria_criteria- Reference data
@wcag-mcp/media
Media accessibility validation.
WCAG Criteria: 1.2.1-1.2.9, 1.4.2, 2.2.2, 2.3.1, 2.3.2, 2.3.3
Tools:
check_captions- Caption availability (prerecorded/live)check_audio_description- Audio description for videocheck_transcript- Text alternatives for mediacheck_media_controls- Autoplay control mechanismscheck_animation- Animation pause/stop controlscheck_flashing- Flash frequency thresholdscheck_sign_language- Sign language interpretationget_wcag_media_criteria- Reference data
@wcag-mcp/forms
Form accessibility validation.
WCAG Criteria: 1.3.5, 3.2.2, 3.3.1-3.3.6
Tools:
check_form_labels- Label associationscheck_input_purpose- Autocomplete attributescheck_error_identification- Error messagingcheck_error_prevention- Submission safeguardscheck_input_constraints- Format instructionscheck_on_input- Context change on inputvalidate_form- Comprehensive form validationget_wcag_forms_criteria- Reference data
@wcag-mcp/structure
Page structure and navigation validation.
WCAG Criteria: 1.3.1, 1.3.2, 2.4.1, 2.4.2, 2.4.4, 2.4.5, 2.4.6, 2.4.9, 2.4.10, 3.2.3, 3.2.4
Tools:
check_heading_structure- Heading hierarchycheck_page_title- Title descriptivenesscheck_link_purpose- Link text claritycheck_bypass_blocks- Skip links, landmarkscheck_reading_order- DOM/visual order matchcheck_info_relationships- Semantic structurecheck_multiple_ways- Navigation methodscheck_consistent_navigation- Navigation consistencycheck_consistent_identification- Component labelingget_wcag_structure_criteria- Reference data
@wcag-mcp/full
Umbrella server with overview and export tools.
Tools:
get_all_wcag_criteria- All criteria filtered by level/categoryget_wcag_checklist- Conformance level checklistwcag_help- Usage helpexport_report- Export any check's results to a Markdown file
Exporting Results
Any WCAG check tool returns a MACHINE-READABLE JSON block in its output. Pass that JSON to export_report to save a formatted Markdown report:
WCAG_Results_2026-02-24.md
The report includes:
- Summary table (total/passed/failed/warnings)
- Breakdown by conformance level (A/AA/AAA)
- Detailed failures with recommendations and WCAG reference links
- Warnings and passed checks
Optional parameters:
outputDir— directory to save the file (defaults to current working directory)title— custom report titleurl— URL of the page auditednotes— additional notes appended to the report
Usage with Claude Code
Add to your .mcp.json:
{
"mcpServers": {
"wcag-text": {
"command": "node",
"args": ["/path/to/wcag-mcp/packages/text/dist/index.js"]
},
"wcag-keyboard": {
"command": "node",
"args": ["/path/to/wcag-mcp/packages/keyboard/dist/index.js"]
},
"wcag-aria": {
"command": "node",
"args": ["/path/to/wcag-mcp/packages/aria/dist/index.js"]
},
"wcag-media": {
"command": "node",
"args": ["/path/to/wcag-mcp/packages/media/dist/index.js"]
},
"wcag-forms": {
"command": "node",
"args": ["/path/to/wcag-mcp/packages/forms/dist/index.js"]
},
"wcag-structure": {
"command": "node",
"args": ["/path/to/wcag-mcp/packages/structure/dist/index.js"]
}
}
}
Or use the umbrella server:
{
"mcpServers": {
"wcag": {
"command": "node",
"args": ["/path/to/wcag-mcp/packages/full/dist/index.js"]
}
}
}
Auto-Approve Tools
By default, Claude Code prompts for permission on every MCP tool call. To auto-approve all WCAG tools, add this to your Claude Code settings.
Per-project (.claude/settings.local.json):
{
"permissions": {
"allow": [
"mcp__wcag*"
]
}
}
Global (~/.claude/settings.json):
{
"permissions": {
"allow": [
"mcp__wcag*"
]
}
}
The wildcard mcp__wcag* matches all tools from every WCAG MCP server (wcag-text, wcag-keyboard, wcag-aria, etc.).
Development
# Watch mode for development
cd packages/text && npm run dev
# Build all
npm run build
# Clean all dist folders
npm run clean
Adding New Checks
Import shared utilities from @wcag-mcp/core:
import {
createReport,
formatToolResponse,
getCriteriaByCategory,
type CheckResult
} from "@wcag-mcp/core";
// Get criteria for a category
const criteria = getCriteriaByCategory("keyboard");
// Create a check result
const result: CheckResult = {
criterion: "2.1.1",
name: "Keyboard",
level: "A",
status: "pass",
message: "All functionality is keyboard accessible"
};
// Create formatted report
const report = createReport([result], {
title: "My Check",
category: "keyboard"
});
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.