mcp-axe is a MCP-compatible plugin for automated accessibility scanning
Overview
A (MCP) plugin for automated accessibility testing using axe-core. It lets MCP‑aware clients (Claude Desktop, Cursor, etc.) or your terminal run: For AI clients (e.g. Claude Desktop, Cursor, VS Code MCP extension), configure your _config.json: you can prompt like scan https://manojkk.com for accessibility issues will invoke the scan-url tool. you can invoke tools like: - scan-url (params: { "url": "https://google.com" }) - scan-html (params: { "html": " Hello " }) - scan-batch (params: { "urls": ["https://a.com","https://b.com"] }) - summarise-violations (params: { "result": }) 1. Fork the repo 2. Create a branch (git checkout -b feature/xyz) 3. Commit your changes 4. Open a PR
README
mcp‑axe
A Model Context Protocol (MCP) plugin for automated accessibility testing using axe-core. It lets MCP‑aware clients (Claude Desktop, Cursor, etc.) or your terminal run:
- Single URL scans
- HTML string scans
- Batch URL scans
- Violation summarisation
All powered by Selenium under the hood.
📦 Installation
From PyPI
pip install mcp-axe
Requires Python 3.8+.
Local / Development
git clone https://github.com/manoj9788/mcp-axe.git
cd mcp-axe
python3 -m venv .venv && source .venv/bin/activate
pip install -e .[dev]
🔧 Usage
MCP (JSON‑RPC) mode
For AI clients (e.g. Claude Desktop, Cursor, VS Code MCP extension), configure your _config.json:
{
"mcpServers": {
"axe-a11y": {
"command": "python3",
"args": ["-m", "mcp_axe"],
"cwd": "."
}
}
}
Or
"axe-a11y": {
"command": "uvx",
"args": [
"mcp-axe"
]
}
Once the MCP server is running,
you can prompt like scan https://manojkk.com for accessibility issues will invoke the scan-url tool.
you can invoke tools like:
scan-url(params:{ "url": "https://google.com" })scan-html(params:{ "html": "Hello" })scan-batch(params:{ "urls": ["https://a.com","https://b.com"] })summarise-violations(params:{ "result": })
MCP local dev mode
{
"mcpServers": {
"axe-a11y": {
"command": "/path/to/.venv/bin/python",
"args": ["-m", "mcp_axe"],
"cwd": "/path/to/mcp-axe"
}
}
}
FastAPI REST mode (optional)
Expose HTTP endpoints via:
from mcp_axe.server import app # FastAPI instance
import uvicorn
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=9788, reload=True)
Then:
curl -X POST http://localhost:9788/scan/url -H 'Content-Type: application/json' \
-d '{ "url": "https://google.com" }'
🤝 Contributing
- Fork the repo
- Create a branch (
git checkout -b feature/xyz) - Commit your changes
- Open a PR
📜 License
Install
uvx mcp-axeConfiguration
{
"mcpServers": {
"axe-a11y": {
"command": "python3",
"args": ["-m", "mcp_axe"],
"cwd": "."
}
}
}