wcag-text-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., "@wcag-text-mcpCheck contrast ratio of #333 on white"
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.
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 serversRelated MCP server: WCAG Color Contrast MCP Server
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.mdThe 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 cleanAdding 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
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/erikcaineolson/wcag-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server