Skip to main content
Glama
jbuchan

Accessibility MCP Server

by jbuchan
README.md
# Accessibility MCP Server

A Model Context Protocol (MCP) server for automated accessibility testing using Playwright and axe-core against WCAG standards.

## Overview

This server provides AI agents (LLMs) with the ability to perform comprehensive accessibility audits on websites. It leverages industry-standard tools to deliver detailed reports on WCAG compliance violations and recommendations.

## Features

### šŸ” **Comprehensive Accessibility Testing**
- Full WCAG 2.1/2.2 compliance checking (A, AA, AAA levels)
- Cross-browser testing (Chromium, Firefox, WebKit)
- Real browser automation with Playwright
- axe-core accessibility engine integration

### šŸ¤– **MCP Integration**
- Three main tools exposed to AI agents:
  - `test_accessibility`: Run accessibility tests
  - `get_test_results`: Retrieve saved test results
  - `list_test_results`: List all available test files

### šŸ“Š **Rich Reporting**
- Human-readable text reports
- Raw JSON data for programmatic access
- Screenshot capture capability
- Detailed violation summaries with remediation guidance

### šŸ›”ļø **Security & Validation**
- URL validation and sanitization
- Configuration parameter validation
- Graceful error handling
- Safe browser isolation

## Installation

```bash
# Clone and install dependencies
npm install

# Install Playwright browsers
npx playwright install

# Build the project
npm run build
```

## Usage

### Starting the MCP Server

```bash
# Development mode
npm run dev

# Production mode
npm run build && npm start
```

The server communicates via stdin/stdout following the MCP protocol specification.

### Available Tools

#### `test_accessibility`
Run an accessibility test on a website.

**Parameters:**
- `url` (required): Website URL to test
- `wcagLevel` (optional): 'A', 'AA', or 'AAA' (default: 'AA')
- `wcagVersion` (optional): '2.1' or '2.2' (default: '2.1')
- `browser` (optional): 'chromium', 'firefox', or 'webkit' (default: 'chromium')
- `includeScreenshot` (optional): boolean (default: false)

**Example:**
```json
{
  "url": "https://example.com",
  "wcagLevel": "AA",
  "wcagVersion": "2.1",
  "browser": "chromium",
  "includeScreenshot": true
}
```

#### `get_test_results`
Retrieve saved accessibility test results.

**Parameters:**
- `fileName` (required): Name of the test result file

#### `list_test_results`
List all available test result files.

**No parameters required.**

## Architecture

```
src/
ā”œā”€ā”€ server/           # MCP server implementation
│   ā”œā”€ā”€ index.ts      # Main entry point
│   └── mcpServer.ts  # MCP protocol handlers
ā”œā”€ā”€ accessibility/    # Core testing engine
│   └── tester.ts     # Playwright + axe-core integration
ā”œā”€ā”€ types/           # TypeScript type definitions
│   └── index.ts     # Interface definitions
└── utils/           # Utility modules
    ā”œā”€ā”€ fileOutput.ts    # Result file management
    └── validation.ts    # Input validation and sanitization
```

## Development

### Project Structure
- `src/server/`: MCP server implementation and entry points
- `src/accessibility/`: Core accessibility testing logic
- `src/types/`: TypeScript type definitions
- `src/utils/`: Utility functions for validation and file I/O
- `outputs/`: Generated test results and screenshots
- `tests/`: Test suites (planned)

### Configuration

The server accepts various configuration options:

- **WCAG Levels**: A, AA, AAA
- **WCAG Versions**: 2.1, 2.2
- **Browsers**: Chromium, Firefox, WebKit
- **Timeouts**: 1s to 5 minutes
- **Viewports**: 320x200 to 4000x4000 pixels

### Error Handling

The server implements comprehensive error handling:
- URL validation and sanitization
- Browser initialization failures
- Network timeout handling
- File I/O error recovery
- Graceful MCP protocol error responses

## Output Formats

### Text Reports
Human-readable accessibility reports including:
- Executive summary with violation counts
- Detailed violation descriptions with remediation steps
- Element-specific failure information
- WCAG success criteria references

### JSON Data
Machine-readable results containing:
- Complete axe-core results
- Test metadata and configuration
- Structured violation data
- Performance metrics

## Security Considerations

- URL validation prevents testing of local/private addresses
- Browser sandboxing through Playwright
- Input sanitization for all parameters
- Safe file I/O operations
- Process isolation

## Cloud Deployment (Future)

This server is designed for eventual cloud deployment with:
- Container support (Docker)
- Environment-based configuration
- Database integration for result storage
- API rate limiting
- Authentication and authorization

## Dependencies

- **@modelcontextprotocol/sdk**: MCP protocol implementation
- **playwright**: Browser automation framework
- **@axe-core/playwright**: Accessibility testing integration
- **axe-core**: Accessibility rules engine
- **typescript**: Type safety and development tooling

## License

MIT License - see LICENSE file for details.

## Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests for new functionality
5. Submit a pull request

## Support

For issues and questions:
1. Check the documentation
2. Review existing GitHub issues
3. Create a new issue with detailed information

TDQS

B3.4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: get_test_results retrieves specific results, list_test_results lists available files, and test_accessibility runs new tests. There is no overlap or ambiguity between these three functions.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (get_test_results, list_test_results, test_accessibility) with clear, descriptive names that align with their actions. There are no deviations in naming conventions.

Tool Count4/5

With 3 tools, the server is well-scoped for its accessibility testing domain, covering core operations: listing, retrieving, and running tests. It might benefit from additional tools like updating or deleting results, but the count is reasonable and not excessive.

Completeness4/5

The tools provide a solid foundation for accessibility testing, covering listing, retrieval, and execution. Minor gaps exist, such as the inability to update or delete test results, but agents can work around this, and the core workflow is adequately supported.

Maintenance

ActivityInactive
ResponsivenessNo issues