aria-mcp
Provides comprehensive access to the W3C WAI-ARIA specification for querying roles, states, properties, and accessibility requirements. It enables developers and AI agents to validate ARIA attributes and receive smart role suggestions based on UI component descriptions.
README
aria-mcp
A Model Context Protocol (MCP) server providing comprehensive access to the W3C WAI-ARIA specification. Designed for accessibility professionals, developers, and AI agents to query ARIA roles, states, properties, and accessibility requirements.
Quick Start
Add to your MCP client configuration:
{
"mcpServers": {
"aria": {
"command": "npx",
"args": ["-y", "aria-mcp"]
}
}
}
That's it! No cloning, no building - just add the config and start querying ARIA.
Features
- Complete ARIA 1.3 Specification Data: Roles, states, properties, and their relationships
- Role Validation: Check attribute validity for specific roles
- Accessibility Guidance: Name requirements, landmarks, live regions
- Smart Suggestions: Get role recommendations based on UI component descriptions
- Works Locally & Remotely: stdio transport for local use, Netlify Functions for remote deployment
Available Tools
| Tool | Description |
|---|---|
| Role Information | |
get-role |
Get detailed information about a specific ARIA role |
list-roles |
List all ARIA roles, optionally filtered by category |
search-roles |
Search for roles by keyword in name or description |
get-role-hierarchy |
Get the inheritance hierarchy for a role |
| States & Properties | |
get-attribute |
Get details about an ARIA state or property |
list-states |
List all ARIA states with descriptions |
list-properties |
List all ARIA properties, optionally global only |
get-global-attributes |
List all global ARIA states and properties |
| Validation | |
validate-role-attributes |
Validate if attributes are allowed for a role |
get-required-attributes |
Get required attributes for a role |
get-prohibited-attributes |
Get prohibited attributes for a role |
| Role Relationships | |
get-required-context |
Get required parent context for a role |
get-required-owned |
Get required child elements for a role |
| Accessible Name | |
check-name-requirements |
Check accessible name requirements for a role |
get-roles-requiring-name |
List all roles that require an accessible name |
| Specialized Queries | |
list-landmarks |
List all ARIA landmark roles with usage guidance |
list-widget-roles |
List interactive widget roles |
list-live-regions |
List live region roles with politeness levels |
| Guidance | |
suggest-role |
Get role suggestions based on UI component description |
get-aria-version |
Get ARIA specification version and statistics |
get-server-info |
Get information about this MCP server |
Installation
npm install
Configure Claude Desktop
Add this to your Claude Desktop MCP settings (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"aria-mcp": {
"command": "node",
"args": ["/path/to/aria-mcp/src/index.js"]
}
}
}
Configure Cursor
Add to your Cursor MCP settings:
{
"mcpServers": {
"aria-mcp": {
"command": "node",
"args": ["/path/to/aria-mcp/src/index.js"]
}
}
}
Usage Examples
Query a Role
get-role button
Returns complete information about the button role including:
- Description and purpose
- Category (widget, landmark, etc.)
- Required/supported/prohibited attributes
- Name requirements
- Parent/child role requirements
Validate Attributes
validate-role-attributes role=button attributes=["aria-pressed","aria-expanded","aria-label"]
Checks if each attribute is valid, required, or prohibited for the role.
Get Role Suggestions
suggest-role "dropdown menu with autocomplete"
Returns suggested roles (combobox, listbox) with usage guidance.
List Landmarks
list-landmarks
Lists all ARIA landmark roles with best practices for page structure.
Data Source
This MCP server uses data parsed directly from the W3C ARIA repository, which is included as a Git submodule.
Updating the Data
To update to the latest ARIA specification:
npm run update-submodule
This will:
- Pull the latest changes from the W3C ARIA repository
- Re-parse the specification to regenerate
data/aria-data.json
Manual Parsing
To regenerate the data without updating the submodule:
npm run parse
Project Structure
aria-mcp/
├── src/
│ ├── index.js # MCP server with stdio transport
│ └── tools.js # Tool definitions and handlers
├── scripts/
│ └── parse-aria-spec.js # Parser for W3C ARIA HTML specs
├── data/
│ ├── aria/ # W3C ARIA repo (Git submodule)
│ └── aria-data.json # Parsed specification data
├── netlify/
│ └── functions/
│ └── api.js # Netlify Function for remote use
└── netlify.toml # Netlify configuration
Deployment to Netlify
This project is configured for Netlify deployment.
Deploy via GitHub
- Push this repository to GitHub
- Connect to Netlify via the dashboard
- Netlify will automatically build and deploy
Using the Remote Server
Once deployed, configure your MCP client:
{
"mcpServers": {
"aria-mcp": {
"command": "npx",
"args": ["mcp-remote@next", "https://your-site.netlify.app/mcp"]
}
}
}
Use Cases
For Accessibility Professionals
- Quick Reference: Look up role requirements without leaving your IDE
- Validation: Verify ARIA usage in code reviews
- Training: Help team members understand ARIA semantics
For Developers
- Real-time Guidance: Get role suggestions while building components
- Attribute Validation: Catch invalid ARIA usage early
- Documentation: Access spec details without browser context switching
For AI Agents
- Code Generation: Generate accessible components with correct ARIA
- Code Review: Validate ARIA usage in pull requests
- Accessibility Audits: Check for missing or incorrect attributes
ARIA Specification Coverage
- 100 Roles: All roles from WAI-ARIA 1.3
- 10 States: Dynamic values that change with user interaction
- 43 Properties: Static or rarely-changing characteristics
- Role Categories: widget, composite, document, landmark, liveRegion, window, abstract
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run
npm run parseif modifying the parser - Submit a pull request
License
MIT
Resources
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.