wcagc-mcp
wcagc-mcp is an MCP server that lets AI assistants run real, deterministic accessibility scans (powered by axe-core) and PDF/UA-1 checks via the wcagc API — without relying on LLM guesses. Scans are queued and return an ID immediately; separate polling tools retrieve results. No compliance scores are returned, as automated testing covers only ~30–57% of accessibility issues.
Core Tools (all tiers)
scan_url— Scan any public URL for accessibility issues. Returns a scan ID to poll.get_scan— Poll status and results (severity counts, top-5 findings) for ascan_urlscan.get_findings— Retrieve top-5 findings (rule ID, severity, help URL, target selector) for a URL scan.check_pdf— Check a public PDF for PDF/UA-1 conformance (structure, tags, reading order) via veraPDF.get_pdf_check— Poll results of acheck_pdfscan.
Pro+ Tools
list_sites— List all registered sites in your organization.scan_site— Crawl and scan every reachable page of a registered site; returns arunIdto poll.get_run— Poll the status of a full-site scan run.get_run_findings— Retrieve deduplicated, rule-level findings for a full-site scan.run_journey— Replay a saved multi-step user journey (e.g., a checkout flow) and check accessibility at each step.get_journey_run— Poll results of a journey run, including per-step checkpoints.get_trends— Retrieve historical violation-count trends for a registered site across completed runs (by severity, with added/resolved markers).
wcagc-mcp
An MCP server that lets an AI assistant (Claude, ChatGPT, or any MCP-compatible client) run real, deterministic accessibility scans through wcagc — axe-core under the hood, not an LLM guess. Every scan result carries an explicit coverage disclaimer and never claims "compliant": automated testing finds only a portion of accessibility barriers, and this tool says so in every response.
This package is a thin, stateless adapter. It holds no database, no scan logic, and no secrets beyond the wcagc API base URL — it translates MCP tool calls into HTTP calls against the wcagc API and forwards the caller's own bearer. All authentication, entitlements, quotas, and scan orchestration live in the API; this code is safe to read end to end.
Two ways to run it
Local (stdio) — for Claude Desktop, Cursor, or any MCP client that spawns a local process:
npx @wcagc/mcpConfigure your MCP client with:
{
"mcpServers": {
"wcagc": {
"command": "npx",
"args": ["-y", "@wcagc/mcp"],
"env": {
"WCAGC_MCP_KEY": "<your mcp:scan API key>"
}
}
}
}Mint an mcp:scan key from your wcagc account under Settings → API keys — available on every
plan, with a daily quota on Free/Starter and unlimited on Pro/Agency.
Hosted (Streamable HTTP + managed OAuth) — what Claude web/desktop/mobile connectors and ChatGPT use, since neither runs a local process for you. Add this remote MCP connector:
https://mcp.wcagc.com/mcpThe client discovers /.well-known/oauth-protected-resource/mcp, opens the wcagc login/consent
flow, and binds the connection to one Organization. No key copy/paste is required. API-key bearer
authentication remains supported for local stdio and CI.
ChatGPT availability depends on the ChatGPT plan and on whether the client permits action tools;
scan_url creates a scan and is not a read-only operation. See
wcagc.com/integrations/mcp.
Related MCP server: WCAG MCP Server
Tools
Tool | Plan | What it does |
| all | Scan any public URL, or a registered site for full tracking (Pro+). |
| all | Run a PDF/UA-1 structure check on a public PDF. |
| all | Read a |
| Pro+ | List the account's registered sites. |
| Pro+ | Crawl and scan every reachable page of a registered site. |
| Pro+ | Read a full-site run from |
| Pro+ | Group a run's repeated DOM patterns and return factual element/page blast radius. |
| Pro+ | Replay a saved multi-step journey and check each step. |
| Pro+ | Read a site's violation-count history over time. |
One id, one poll tool: whatever scan_url did with a URL, get_scan and get_findings read it
back. get_run and get_run_findings are only for full-site runs from scan_site.
Every scan-producing tool returns the coverage disclaimer in both the text content and the structured content. There is no score, grade, or conformance verdict — automated testing finds roughly 30–57% of accessibility issues, and the remainder needs manual review.
Configuration
Env var | Used by | Meaning |
| both | The wcagc API to call. Defaults to |
| stdio | Your |
| hosted | Port to listen on (default |
| hosted | Comma-separated Host-header allowlist (DNS-rebinding protection when bound to |
| hosted | How long a verified bearer is cached before re-checking with the API (default |
| hosted | Expected OAuth issuer. |
| hosted | Authorization Server public JWKS URL. |
| hosted | Canonical RFC 9728 protected-resource URL. |
| hosted | JWKS cache TTL; an unknown |
Development
npm install
npm run dev # hosted, watch mode
npm run start:stdio # stdio mode
npm run typecheck
npm run verify # node:test against a local fixture APILicense
MIT — see LICENSE.
Maintenance
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/WCAG-Compliance/wcagc-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server