Skip to main content
Glama

wcag-compliance-mcp

MCP server for WCAG 2.2 audits, verified remediation examples, and U.S. accessibility deadlines. Four tools, no API keys, no network calls, all data bundled.

Built from a benchmark that was verified in headless Chromium: 64 fail/pass HTML pairs executed against axe-core 4.14.0, all 87 WCAG 2.2 success criteria, and 21 sourced regulatory dates from the 1990 ADA through the 2028 DOJ Title II deadline.

DOI

Listed in the official MCP registry as io.github.Veduis/wcag-compliance-mcp, on the 97k star MCP directory, and in the accessibility tools list.

Tools

Tool

What it answers

audit_html_snippet

Which WCAG 2.2 defects are in this HTML, what is the failing criterion, and what does the fix look like

lookup_wcag_criterion

What does 1.4.3 mean, what level is it, does it apply to ADA Title II entities, and is there an automated rule

get_verified_fix_example

Show me a failing snippet, the corrected snippet, why it matters, and how to test it manually

check_ada_compliance_deadlines

When does my organization have to comply, and what rule sets the date

audit_html_snippet

18 static checks over a fragment or full document:

Check

Success criterion

Image without a text alternative

1.1.1

Image button without alt

1.1.1

role="img" SVG with no name

1.1.1

Link with no accessible name

2.4.4

Button with no accessible name

4.1.2

Form field with no programmatic label

3.3.2

Missing html lang

3.1.1

Missing page title

2.4.2

Skipped heading levels or no h1

1.3.1

Duplicate id values

4.1.1

Positive tabindex

2.4.3

aria-hidden on a focusable element

4.1.2

Non-li children of ul/ol

1.3.1

iframe without title

4.1.2

Data table without th

1.3.1

video without a captions track

1.2.2

Viewport meta blocking zoom

1.4.4

Common-purpose input without autocomplete

1.3.5

Every finding returns the criterion, the offending markup, and a corrected snippet.

check_ada_compliance_deadlines

Entity types: title_ii_large, title_ii_small, title_iii_business, federal_contractor, hhs_recipient, eu_business, ontario.

Pass as_of to compute the answer for any date, which makes the tool useful for retroactive scoping and for legal memos that need to state what applied on a given day. Every date carries its primary source URL.

Related MCP server: accessibility-mcp-server

Install

npx -y github:Veduis/wcag-compliance-mcp

Three other routes:

Route

Command

MCPB bundle (Claude Desktop, one click)

wcag-compliance-mcp.mcpb

Official registry

io.github.Veduis/wcag-compliance-mcp

Docker

docker build -t wcag-compliance-mcp . && docker run -i --rm wcag-compliance-mcp

The npm package wcag-compliance-mcp lands with the next publish. Until then the GitHub spec installs the same code and dependencies.

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "wcag-compliance": {
      "command": "npx",
      "args": ["-y", "github:Veduis/wcag-compliance-mcp"]
    }
  }
}

Cursor

.cursor/mcp.json:

{
  "mcpServers": {
    "wcag-compliance": {
      "command": "npx",
      "args": ["-y", "github:Veduis/wcag-compliance-mcp"]
    }
  }
}

VS Code (Copilot agent mode)

.vscode/mcp.json:

{
  "servers": {
    "wcag-compliance": {
      "command": "npx",
      "args": ["-y", "github:Veduis/wcag-compliance-mcp"]
    }
  }
}

Docker

docker build -t wcag-compliance-mcp .
docker run -i --rm wcag-compliance-mcp

Example

Ask your agent:

Audit this pricing page for WCAG 2.2 issues and give me the corrected markup.

The agent calls audit_html_snippet, then get_verified_fix_example for each failing criterion. What comes back is a failing snippet, the corrected snippet, and the manual test step, not a vague warning.

$ audit_html_snippet('<img src="chart.png">')

{
  "summary": {
    "issues": 1,
    "checks_run": 18,
    "checks_failed": 1,
    "conformance_claim": false
  },
  "findings": [
    {
      "check_id": "img-alt",
      "sc": "1.1.1",
      "level": "A",
      "title": "Image missing a text alternative",
      "count": 1,
      "elements": [
        {
          "snippet": "<img src=\"chart.png\">",
          "reason": "No alt, aria-label, or aria-labelledby. Decorative images need alt=\"\"."
        }
      ],
      "fix": "<img src=\"chart.png\" alt=\"Bar chart: Q3 revenue rose 18 percent over Q2\">"
    }
  ]
}

What automation cannot see

This matters more than the feature list. In the benchmark behind this server, axe-core 4.14.0 flagged 39 of 64 deliberately defective documents. The other 25 needed scripted checks or a human. Across the full standard, 29 of 87 criteria have a mapped rule and 58 have none, and at Level AA, the level the law actually targets, only 7 of 24 criteria have a rule.

So the server reports conformance_claim: false on every audit. A clean result means no static defect was found, not that the page conforms. Contrast, focus visibility, keyboard traps, reading order, captions accuracy, and error recovery all need a rendered page or a person. If you need a full-domain audit with those checks, that is what vComplianceScanner does.

Data provenance

Dataset

DOI

Preprint: what automated testing actually detects

10.5281/zenodo.23829968

64 browser-verified fail/pass pairs, axe-core 4.14.0

10.5281/zenodo.23781867

87 WCAG 2.2 success criteria with rule mapping

10.5281/zenodo.23781861

21 sourced ADA / Section 504 / EAA dates

10.5281/zenodo.23781873

64 multi-turn LLM remediation prompts

10.5281/zenodo.23781879

Mirrors: Hugging Face. Test cases are CC BY 4.0, code is MIT.

Development

npm install
npm test          # 18 checks, including a live stdio handshake
npm start

Layout:

src/index.mjs    MCP server, tool registration, resource
src/checks.mjs   18 static checks, no browser required
src/data.mjs     criteria, pairs, timeline, deadline resolution
data/            bundled JSON, generated from the published datasets
test/smoke.mjs   engine tests plus protocol handshake

More from Veduis

License

MIT for the code. Dataset content is CC BY 4.0, attribution to Veduis LLC.

Available Tools

4 tools
audit_html_snippetAudit HTML for WCAG 2.2 defectsA

Run 18 static WCAG 2.2 checks against an HTML snippet or full page and return findings with the failing success criterion, the offending markup, and a corrected example. Covers alt text, accessible names for links and buttons, form labels, language, title, heading order, duplicate ids, tabindex, aria-hidden, list structure, iframe titles, table headers, video captions, viewport zoom, and autocomplete purpose. Static analysis only: it cannot judge contrast, keyboard traps, focus visibility, or reading order in a rendered page.

NameRequiredDescriptionDefault
htmlYesHTML fragment or full document to audit
severity_floorNoReturn only errors (default) or every finding

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the number of checks, the finding shape (success criterion, offending markup, corrected example), and the analytical limits. It doesn't mention size limits or runtime cost, but nothing material is misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose and followed by the capability boundary. The long rule enumeration is dense but each item earns its place by defining coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly explains what comes back and in what form, which is the key missing piece. Only minor operational details (input size, latency) are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both html and the severity_floor enum are fully documented in the schema. The description adds only the 'snippet or full page' nuance and never mentions severity_floor, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (run 18 static WCAG 2.2 checks against HTML) and enumerates the covered rules, which makes it unmistakable against lookup_wcag_criterion or get_verified_fix_example. The scope ('snippet or full page') is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Static analysis only' sentence defines clear exclusions (contrast, keyboard traps, focus visibility, reading order), which tells an agent when this tool will not answer the question. It stops short of naming siblings such as lookup_wcag_criterion as the alternative for explanatory lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_ada_compliance_deadlinesCheck ADA / Section 504 web accessibility deadlinesA

Return the dated web accessibility obligations that apply to an entity type, from the 1990 ADA statute through the 2027 and 2028 deadlines in the DOJ Title II final rule and the HHS Section 504 rule. Reports what is binding now, what is upcoming within the horizon with days remaining, and the primary source URL for every date. Entity types: title_ii_large, title_ii_small, title_iii_business, federal_contractor, hhs_recipient, eu_business, ontario.

NameRequiredDescriptionDefault
as_ofNoReference date in YYYY-MM-DD, defaults to today
entity_typeYesEntity type to scope the timeline to
horizon_yearsNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it discloses the return shape (binding-now vs. upcoming items, days remaining, a primary source URL per date) and the temporal scope (1990 statute through 2027/2028 rules). It omits whether results are cached/static, whether 'as_of' shifts the binding classification, and any caveat about not being legal advice — meaningful gaps for a compliance-reference tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and output contents are front-loaded, then the entity-type list closes it out. Slightly dense in the middle ('what is binding now, what is upcoming within the horizon with days remaining, and the primary source URL for every date'), but every clause conveys useful information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must describe return values — and it does, including the binding/upcoming split and source URLs. Remaining gaps are modest: the default and maximum for horizon_years, and what an 'unknown' entity_type yields, are not addressed anywhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, and the description compensates by enumerating seven of the eight entity_type enum values (omitting 'unknown', which is a real gap since that value's behavior is undocumented) and by implying horizon_years is a look-ahead window over which 'upcoming' items are reported. The as_of parameter's default is already covered by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('return the dated web accessibility obligations that apply to an entity type') and scopes it to named legal sources and date ranges. This is clearly distinct from the sibling tools (audit_html_snippet, lookup_wcag_criterion, get_verified_fix_example), which cover code-level WCAG work rather than regulatory timelines.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is clear: this is the tool for regulatory deadline questions, and the enumerated entity types show exactly when it applies. However, it never states when *not* to use it (e.g., for general WCAG conformance questions use lookup_wcag_criterion), so the routing is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_verified_fix_exampleGet a browser-verified WCAG fix exampleA

Return a failing HTML snippet and its corrected version for a WCAG 2.2 defect, with an explanation of the impact on assistive technology and a manual test step. Every pair was executed in headless Chromium against axe-core 4.14.0, and the detection method is reported so you know whether automation catches this defect or a human must. Look up by criterion number (2.4.7), pair id (wcag-1-4-3-01), or keyword (focus indicator).

NameRequiredDescriptionDefault
limitNo
queryNoKeyword when the criterion number is unknown
sc_idNoSuccess criterion number, for example 1.4.3

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does disclose real behavioral traits: every pair was executed in headless Chromium against axe-core 4.14.0, and the detection method is reported so the agent knows whether automation or manual review catches the defect. What it omits is what happens on no match and whether the response is paginated or ranked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with what is returned, then provenance/verification, then lookup modes. Each sentence carries distinct information an agent needs, and nothing is repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description does the heavy lifting by enumerating the return payload (failing snippet, corrected version, AT impact, manual test step, detection method). It falls short only on the limit parameter and on match-failure behavior, which for a lookup tool is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%. The description adds valuable format examples for sc_id (2.4.7) and pair id (wcag-1-4-3-01) and a keyword example (focus indicator), which go beyond the bare schema strings. However, it never mentions the limit parameter, never says whether query and sc_id can be combined or are mutually exclusive, and gives no default for the zero-required-parameter case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb and resource: return a failing HTML snippet plus its corrected version for a WCAG 2.2 defect, along with an AT rationale and a manual test step. That is far more specific than the sibling tools, but it never names them, so an agent must infer on its own that lookup_wcag_criterion is for criterion text and this tool is for fix examples.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains how to address a record (criterion number, pair id, or keyword) but never says when to reach for this tool instead of lookup_wcag_criterion or audit_html_snippet. The usage is implied by the content rather than stated as a routing rule, and no when-not guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_wcag_criterionLook up a WCAG 2.2 success criterionA

Search the 87 WCAG 2.2 success criteria by number (1.4.3), name (Contrast), keyword, or axe-core rule name. Returns level, principle, guideline, whether it applies to U.S. ADA Title II entities, the practical test, the axe-core rules that target it, and links to the W3C specification and Understanding document.

NameRequiredDescriptionDefault
levelNo
limitNo
queryYesCriterion number, name, or keyword such as "focus visible" or "contrast"

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations and no output schema, the description does real work: it enumerates the returned fields (level, principle, guideline, ADA Title II applicability, practical test, axe-core rules, W3C and Understanding links) and 'Search' implies a read-only operation. It omits pagination/limit behavior and result-count semantics, which are the remaining behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, each earning its place: the first covers input modes, the second covers output. Nothing is repeated from the schema and the search capability is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only lookup tool with no annotations and no output schema, the description covers inputs and return contents well enough to call it correctly. The only shortfall is unexplained behavior for the limit and level filters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 33%: only 'query' is documented in the schema, and the description usefully extends it with axe-core rule names and concrete examples. However, the 'level' enum and especially the 'limit' parameter (caps results at 20) receive no explanation in either place, so the description only partly compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (search) and a precisely scoped resource (the 87 WCAG 2.2 success criteria), plus the exact matching modes: number, name, keyword, axe-core rule. Siblings like audit_html_snippet and get_verified_fix_example are clearly different operations, so no disambiguation is needed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The lookup modes imply when the tool is useful, but there is no explicit statement of when to use it versus siblings (e.g., before auditing a snippet, or to resolve a rule id found by audit_html_snippet) and no exclusions. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv1.0.0
    • First observedaudit_html_snippet
    • First observedcheck_ada_compliance_deadlines
    • First observedget_verified_fix_example
    • First observedlookup_wcag_criterion

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a clearly distinct operation: static auditing, criterion lookup, verified fix examples, and ADA deadline checking. Although audit_html_snippet and get_verified_fix_example both involve defects and corrections, their descriptions distinguish audit results from a curated remediation library.

Naming Consistency5/5

All four tools use a consistent snake_case verb_noun pattern: audit_html_snippet, lookup_wcag_criterion, get_verified_fix_example, and check_ada_compliance_deadlines. The naming is predictable and readable.

Tool Count5/5

Four tools is a well-scoped set for this domain, with each tool covering a substantial but distinct compliance function. There is no filler or redundant tool.

Completeness4/5

The surface covers static auditing, WCAG reference lookup, remediation examples, and legal deadlines, which are the core needs for WCAG/ADA compliance support. The main gap is the acknowledged lack of rendered-page checks such as contrast, keyboard traps, and focus visibility, but that limitation is explicit rather than hidden.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to perform comprehensive web accessibility checks (WCAG 2.1/2.2) including color contrast analysis, ARIA validation, and full accessibility report generation without requiring any API key.
    8
    30 PyPI
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to perform WCAG 2.2 accessibility audits, including contrast ratio checks for color pairs and text-over-image, generate EU legal accessibility declarations, and produce aria-live monitoring snippets, all through local, multilingual tools.
    34
    2,074 PyPI
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Lets developers and MCP agents run deterministic local HTML audits, turning inline HTML into structured findings for missing labels, unnamed buttons, skipped headings, ambiguous links, duplicate IDs, and missing landmarks. It also exposes a rule list and returns stable, actionable reports without external API keys.
    2
    MIT