Skip to main content
The WCAG Criteria resource provides complete reference data for all WCAG 2.1 success criteria, including conformance levels, POUR principles, affected user groups, and suggested remediation actions.

URI Patterns

wcag://criteria
static
Complete list of all WCAG 2.1 criteria (78 total)
wcag://criteria/{id}
template
Specific criterion by ID (e.g., 1.4.3, 2.4.7)
wcag://criteria/level/{level}
template
Filter criteria by conformance level
wcag://criteria/principle/{principle}
template
Filter criteria by POUR principle

POUR Principles

WCAG 2.1 organizes criteria under four principles:
PrincipleURIDescription
Perceivablewcag://criteria/principle/perceivableInformation must be presentable to users in ways they can perceive
Operablewcag://criteria/principle/operableUI components must be operable by all users
Understandablewcag://criteria/principle/understandableInformation and operation must be understandable
Robustwcag://criteria/principle/robustContent must work with current and future assistive technologies

Response Schema

Single Criterion

When requesting a specific criterion (e.g., wcag://criteria/1.4.3):
id
string
required
WCAG criterion identifier (e.g., "1.4.3")
title
string
required
Official criterion title (e.g., "Contrast (Minimum)")
level
string
required
Conformance level: "A", "AA", or "AAA"
principle
string
required
POUR principle: "perceivable", "operable", "understandable", or "robust"
guideline
string
required
Parent guideline ID (e.g., "1.4" for Distinguishable)
description
string
required
Brief explanation of the requirement
affectedUsers
string[]
required
User groups impacted by violations (e.g., ["low-vision", "color-blind"])
suggestedActions
string[]
required
Remediation recommendations

Multiple Criteria

When requesting filtered lists (e.g., wcag://criteria/level/AA), the response is an array of criterion objects with the same schema.

Examples

Get a Specific Criterion

const result = await client.readResource({ 
  uri: 'wcag://criteria/1.4.3' 
});

const criterion = JSON.parse(result.contents[0].text);
Response:
{
  "id": "1.4.3",
  "title": "Contrast (Minimum)",
  "level": "AA",
  "principle": "perceivable",
  "guideline": "1.4",
  "description": "The visual presentation of text has a contrast ratio of at least 4.5:1",
  "affectedUsers": ["low-vision", "color-blind"],
  "suggestedActions": ["Ensure text has sufficient contrast against background"]
}

Get All Level AA Criteria

const result = await client.readResource({ 
  uri: 'wcag://criteria/level/AA' 
});

const criteria = JSON.parse(result.contents[0].text);
console.log(`Found ${criteria.length} Level AA criteria`);
// Output: Found 20 Level AA criteria

Get All Perceivable Criteria

const result = await client.readResource({ 
  uri: 'wcag://criteria/principle/perceivable' 
});

const criteria = JSON.parse(result.contents[0].text);
console.log(`Perceivable principle has ${criteria.length} criteria`);
Returns: All criteria under Guidelines 1.1 through 1.4 (Non-text Content, Time-based Media, Adaptable, Distinguishable)

Get All Criteria

const result = await client.readResource({ 
  uri: 'wcag://criteria' 
});

const allCriteria = JSON.parse(result.contents[0].text);
console.log(`Total WCAG 2.1 criteria: ${allCriteria.length}`);
// Output: Total WCAG 2.1 criteria: 78

Quick Reference Tables

Level A (Must Have)

Fundamental accessibility features required for basic access:
IDTitleAffected UsersGuideline
1.1.1Non-text Contentscreen-reader, low-visionText Alternatives
1.3.1Info and Relationshipsscreen-readerAdaptable
2.1.1Keyboardmotor-impairment, keyboard-onlyKeyboard Accessible
2.4.1Bypass Blocksscreen-reader, keyboard-onlyNavigable
4.1.2Name, Role, Valuescreen-readerCompatible

Level AA (Should Have)

Additional features addressing common barriers:
IDTitleAffected UsersGuideline
1.4.3Contrast (Minimum)low-vision, color-blindDistinguishable
1.4.4Resize Textlow-visionDistinguishable
2.4.6Headings and Labelsscreen-reader, cognitiveNavigable
2.4.7Focus Visiblekeyboard-onlyNavigable
3.2.4Consistent IdentificationcognitivePredictable

Level AAA (Nice to Have)

Enhanced features for optimal accessibility:
IDTitleAffected UsersGuideline
1.4.6Contrast (Enhanced)low-visionDistinguishable
2.4.9Link Purpose (Link Only)screen-readerNavigable
3.1.5Reading LevelcognitiveReadable
2.5.5Target Sizemotor-impairmentInput Modalities

Common Use Cases

Look Up Issue Context

When an analysis tool reports a WCAG violation:
// Analysis returns: { wcagCriterion: "1.4.3", ... }
const violation = analysisResult.violations[0];

const criterion = await client.readResource({ 
  uri: `wcag://criteria/${violation.wcagCriterion}` 
});

const data = JSON.parse(criterion.contents[0].text);

console.log(`Issue: ${data.title}`);
console.log(`Affected users: ${data.affectedUsers.join(', ')}`);
console.log(`How to fix: ${data.suggestedActions[0]}`);

Build Compliance Checklist

Generate a checklist for a specific conformance level:
const result = await client.readResource({ 
  uri: 'wcag://criteria/level/AA' 
});

const criteria = JSON.parse(result.contents[0].text);

criteria.forEach(c => {
  console.log(`[ ] ${c.id}: ${c.title}`);
});

Prioritize Remediation

Find all criteria affecting a specific user group:
const result = await client.readResource({ 
  uri: 'wcag://criteria' 
});

const allCriteria = JSON.parse(result.contents[0].text);

const screenReaderIssues = allCriteria.filter(c => 
  c.affectedUsers.includes('screen-reader')
);

console.log(`${screenReaderIssues.length} criteria affect screen reader users`);

Filter by Principle

Focus remediation on one POUR principle at a time:
const result = await client.readResource({ 
  uri: 'wcag://criteria/principle/operable' 
});

const operableCriteria = JSON.parse(result.contents[0].text);

console.log('Operable criteria (keyboard, navigation, timing):');
operableCriteria.forEach(c => {
  console.log(`- ${c.id}: ${c.title} (Level ${c.level})`);
});

Integration with Tools

WCAG criteria resources complement analysis tools:
1

Run analysis

Use analyze-with-axe, analyze-with-lighthouse, or analyze-mixed to find issues
const analysis = await analyzeWithAxe('https://example.com');
2

Look up criteria

For each issue, use the WCAG criterion ID to get full context
const criterion = await client.readResource({
  uri: `wcag://criteria/${issue.wcagCriterion}`
});
3

Apply remediation

Use suggestedActions from the criterion to guide fixes
const data = JSON.parse(criterion.contents[0].text);
console.log('Suggested actions:');
data.suggestedActions.forEach(action => console.log(`- ${action}`));

Affected User Groups

The affectedUsers field uses these standardized values:
User GroupDescription
screen-readerUsers who rely on screen readers (blind, low-vision)
low-visionUsers with partial sight who may use magnification
color-blindUsers with color vision deficiencies
motor-impairmentUsers with limited mobility or dexterity
keyboard-onlyUsers who navigate without a mouse
cognitiveUsers with cognitive or learning disabilities
deafUsers who are deaf or hard of hearing
seizureUsers sensitive to flashing or motion

Error Responses

Invalid criterion IDs return an error object:
{
  "error": "Criterio WCAG 9.9.9 no encontrado"
}
Invalid level values:
{
  "error": "Nivel inválido: B. Use A, AA o AAA"
}
Invalid principles:
{
  "error": "Principio inválido: accessible. Use perceivable, operable, understandable o robust"
}

Contrast Thresholds

Specific contrast ratio requirements for criteria 1.4.3 and 1.4.6

Lighthouse Audits

Map Lighthouse audits to WCAG criteria

Analysis Tools

Tools that detect WCAG violations

Prompts

Use explain-wcag-criterion for detailed explanations

Standards Reference

This resource is based on:
  • WCAG 2.1 (W3C Recommendation, June 2018)
  • Level A: 30 criteria
  • Level AA: 20 additional criteria (50 total)
  • Level AAA: 28 additional criteria (78 total)
For the official specification, see: WCAG 2.1 Guidelines

Build docs developers (and LLMs) love