# LLM Agent Guide: ADA/WCAG Accessibility Testing with Cremote
## Purpose
This document provides LLM coding agents with concrete, actionable guidance for using Cremote's accessibility testing tools to conduct ADA/WCAG compliance audits.
## ⚠️ IMPORTANT: Tool Naming Convention
All cremote MCP tools use the **single suffix** naming pattern: `toolname_cremotemcp`
**Correct:** `web_run_axe_cremotemcp`
**Incorrect:** `web_run_axe` (missing suffix) or `web_run_axe_cremotemcp_cremotemcp` (double suffix)
## NOTE
Our cremote browser is running in a container. When you take a screenshot, you need to use the file download tool to bring it to your local machine.
## Quick Reference
### Token-Efficient Summary Tools (NEW - 2025-10-03)
**🚀 RECOMMENDED FOR SITE-WIDE ASSESSMENTS**
These tools reduce token usage by 85-95% while providing comprehensive, actionable results:
| Tool | Purpose | Token Usage | Replaces |
|------|---------|-------------|----------|
| `web_page_accessibility_report_cremotemcp` | Comprehensive single-page assessment | ~4k | Multiple tools (95% savings) |
| `web_contrast_audit_cremotemcp` | Smart contrast check with patterns | ~4k | `web_contrast_check_cremotemcp` (85% savings) |
| `web_keyboard_audit_cremotemcp` | Keyboard navigation summary | ~2k | `web_keyboard_test_cremotemcp` (80% savings) |
| `web_form_accessibility_audit_cremotemcp` | Form accessibility check | ~2k | Manual form analysis (75% savings) |
**Use these for:**
- Multi-page site assessments (10+ pages possible)
- Initial comprehensive audits
- Token-constrained environments
- Structured, actionable reports
### Tool Selection Matrix
| Testing Need | Primary Tool | Secondary Tool | WCAG Criteria |
|--------------|--------------|----------------|---------------|
| **Comprehensive page audit** | `web_page_accessibility_report_cremotemcp` ⭐ | - | All automated criteria |
| Comprehensive automated audit | `web_run_axe_cremotemcp` | - | ~57% of WCAG 2.1 AA |
| **Smart contrast check** | `web_contrast_audit_cremotemcp` ⭐ | `web_contrast_check_cremotemcp` | 1.4.3, 1.4.6, 1.4.11 |
| Color contrast issues | `web_contrast_check_cremotemcp` | `web_gradient_contrast_check_cremotemcp` | 1.4.3, 1.4.6, 1.4.11 |
| Gradient backgrounds | `web_gradient_contrast_check_cremotemcp` | - | 1.4.3, 1.4.6, 1.4.11 |
| **Keyboard navigation** | `web_keyboard_audit_cremotemcp` ⭐ | `web_keyboard_test_cremotemcp` | 2.1.1, 2.4.7 |
| **Form accessibility** | `web_form_accessibility_audit_cremotemcp` ⭐ | - | 3.3.2, 4.1.2, 1.3.1 |
| Video/audio captions | `web_media_validation_cremotemcp` | - | 1.2.2, 1.2.5, 1.4.2 |
| Hover/focus content | `web_hover_focus_test_cremotemcp` | - | 1.4.13 |
| Text in images | `web_text_in_images_cremotemcp` | - | 1.4.5, 1.4.9, 1.1.1 |
| Cross-page consistency | `web_cross_page_consistency_cremotemcp` | - | 3.2.3, 3.2.4, 1.3.1 |
| Animations/flashing | `web_animation_flash_cremotemcp` | - | 2.3.1, 2.2.2, 2.3.2 |
| ARIA validation | `web_enhanced_accessibility_cremotemcp` | `web_run_axe_cremotemcp` | 1.3.1, 4.1.2, 2.4.6 |
| Keyboard accessibility | `web_keyboard_test_cremotemcp` | `web_run_axe_cremotemcp` | 2.1.1, 2.4.7 |
| Zoom/resize functionality | `web_zoom_test_cremotemcp` | - | 1.4.4 |
| Responsive design | `web_reflow_test_cremotemcp` | - | 1.4.10 |
| Visual documentation | `web_screenshot_cremotemcp` | - | Evidence capture |
| Custom JavaScript testing | `console_command_cremotemcp` | - | Advanced scenarios |
⭐ = Token-efficient summary tool (recommended for site-wide assessments)
### Recommended Testing Sequences
#### Option 1: Token-Efficient Approach (RECOMMENDED for site-wide assessments)
**Single call per page - ~4k tokens:**
```
1. web_page_accessibility_report_cremotemcp # Comprehensive assessment
- Includes: axe-core, contrast, keyboard, forms
- Returns: Structured summary with compliance status
- Token usage: ~4k (vs 80k+ with old approach)
```
**For 10 pages: ~40k tokens total (vs 800k+ with old approach)**
#### Option 2: Detailed Testing Approach (for deep dives)
**Use when you need raw data or specific tool features:**
```
1. web_inject_axe_cremotemcp # Inject axe-core library
2. web_run_axe_cremotemcp # Run comprehensive automated tests
3. web_contrast_check_cremotemcp # Detailed contrast analysis
4. web_gradient_contrast_check_cremotemcp # Gradient background contrast
5. web_media_validation_cremotemcp # Video/audio caption validation
6. web_hover_focus_test_cremotemcp # Hover/focus content testing
7. web_text_in_images_cremotemcp # Text-in-images detection
8. web_animation_flash_cremotemcp # Animation/flash detection
9. web_enhanced_accessibility_cremotemcp # Enhanced ARIA validation
10. web_keyboard_test_cremotemcp # Keyboard navigation testing
12. web_zoom_test_cremotemcp # Zoom functionality testing
13. web_reflow_test_cremotemcp # Responsive design testing
```
**Note:** For multi-page sites, also run:
```
14. web_cross_page_consistency_cremotemcp # Cross-page consistency
```
#### Option 3: Hybrid Approach (balanced)
**Use summary tools for initial assessment, detailed tools for specific issues:**
```
1. web_page_accessibility_report_cremotemcp # Initial comprehensive assessment
2. If specific issues found:
a. web_contrast_audit_cremotemcp # Deep dive on contrast
b. web_keyboard_audit_cremotemcp # Deep dive on keyboard
c. web_form_accessibility_audit_cremotemcp # Deep dive on forms
```
## Tool Usage Patterns
### Pattern 1: Token-Efficient Page Assessment (NEW - RECOMMENDED)
```json
// Single call - comprehensive assessment (~4k tokens)
{
"tool": "web_page_accessibility_report_cremotemcp",
"arguments": {
"tests": ["all"], // or ["wcag", "contrast", "keyboard", "forms"]
"standard": "WCAG21AA",
"timeout": 30
}
}
// Returns structured summary with:
// - compliance_status: COMPLIANT, PARTIAL, NON_COMPLIANT
// - overall_score: 0-100
// - legal_risk: LOW, MEDIUM, HIGH, CRITICAL
// - critical_issues, serious_issues, high_issues, medium_issues
// - contrast_summary, keyboard_summary, form_summary
// - estimated_remediation_hours
```
### Pattern 2: Initial Audit (Traditional Approach)
```json
// Step 1: Inject axe-core
{
"tool": "web_inject_axe_cremotemcp",
"arguments": {
"timeout": 30
}
}
// Step 2: Run comprehensive tests
{
"tool": "web_run_axe_cremotemcp",
"arguments": {
"run_only": ["wcag2a", "wcag2aa", "wcag21aa"],
"timeout": 30
}
}
// Step 3: Analyze results and run specialized tests based on findings
```
### Pattern 3: Smart Contrast Audit (NEW - RECOMMENDED)
```json
// Token-efficient contrast check with prioritized failures (~4k tokens)
{
"tool": "web_contrast_audit_cremotemcp",
"arguments": {
"priority_selectors": ["button", "a", "nav", "footer"],
"threshold": "AA",
"timeout": 10
}
}
// Returns:
// - total_checked, passed, failed, pass_rate
// - critical_failures (top 20 with fixes)
// - failure_patterns (grouped similar issues)
```
### Pattern 4: Contrast-Specific Testing (Traditional)
```json
// For pages with known or suspected contrast issues
{
"tool": "web_contrast_check_cremotemcp",
"arguments": {
"selector": "body", // Test entire page
"timeout": 10
}
}
// For specific sections
{
"tool": "web_contrast_check_cremotemcp",
"arguments": {
"selector": ".main-content", // Test specific area
"timeout": 10
}
}
```
### Pattern 5: Smart Keyboard Audit (NEW - RECOMMENDED)
```json
// Token-efficient keyboard assessment (~2k tokens)
{
"tool": "web_keyboard_audit_cremotemcp",
"arguments": {
"check_focus_indicators": true,
"check_tab_order": true,
"check_keyboard_traps": true,
"timeout": 15
}
}
// Returns:
// - status: PASS, PARTIAL, FAIL
// - total_interactive, focusable
// - issues (categorized by type and severity)
// - recommendation (actionable next steps)
```
### Pattern 6: Keyboard Navigation Testing (Traditional)
```json
{
"tool": "web_keyboard_test_cremotemcp",
"arguments": {
"timeout": 10
}
}
// Analyze output for:
// - not_focusable: Elements that should be keyboard accessible but aren't
// - no_focus_indicator: Elements missing visible focus indicators
// - keyboard_trap: Elements that trap keyboard focus
```
### Pattern 7: Form Accessibility Audit (NEW)
```json
// Comprehensive form accessibility check (~2k tokens)
{
"tool": "web_form_accessibility_audit_cremotemcp",
"arguments": {
"form_selector": "", // Empty = all forms
"timeout": 10
}
}
// Returns:
// - forms_found
// - forms[] with:
// - id, fields count
// - issues (missing labels, contrast, etc.)
// - aria_compliance: FULL, PARTIAL, NONE
// - keyboard_accessible, required_fields_marked
```
### Pattern 8: Zoom and Responsive Testing
```json
// Test zoom levels (WCAG 1.4.4)
{
"tool": "web_zoom_test_cremotemcp",
"arguments": {
"zoom_levels": [1.0, 2.0, 4.0],
"timeout": 10
}
}
// Test responsive breakpoints (WCAG 1.4.10)
{
"tool": "web_reflow_test_cremotemcp",
"arguments": {
"widths": [320, 768, 1280],
"timeout": 10
}
}
```
### Pattern 9: Visual Documentation
```json
// Capture baseline
{
"tool": "web_screenshot_cremotemcp",
"arguments": {
"output": "/tmp/baseline.png",
"timeout": 5
}
}
// Capture at 200% zoom
{
"tool": "web_screenshot_cremotemcp",
"arguments": {
"output": "/tmp/zoom-200.png",
"zoom_level": 2.0,
"timeout": 5
}
}
// Capture mobile view
{
"tool": "web_screenshot_cremotemcp",
"arguments": {
"output": "/tmp/mobile-320.png",
"width": 320,
"height": 568,
"timeout": 5
}
}
```
### Pattern 10: Gradient Contrast Testing
```json
// Test specific element with gradient background
{
"tool": "web_gradient_contrast_check_cremotemcp",
"arguments": {
"selector": ".hero-section",
"timeout": 10
}
}
// Test all elements with gradient backgrounds
{
"tool": "web_gradient_contrast_check_cremotemcp",
"arguments": {
"selector": "body", // Scans entire page
"timeout": 10
}
}
// Analyze output for:
// - worst_case_ratio: Minimum contrast found across gradient
// - best_case_ratio: Maximum contrast found across gradient
// - wcag_aa_pass: Whether it meets WCAG AA standards
// - wcag_aaa_pass: Whether it meets WCAG AAA standards
```
### Pattern 11: Media Validation
```json
// Validate all video/audio elements on page
{
"tool": "web_media_validation_cremotemcp",
"arguments": {
"timeout": 10
}
}
// Analyze output for:
// - missing_captions: Videos without caption tracks
// - missing_audio_descriptions: Videos without audio description tracks
// - inaccessible_tracks: Track files that cannot be loaded
// - autoplay_violations: Videos that autoplay without controls
```
### Pattern 12: Hover/Focus Content Testing
```json
// Test all hover/focus triggered content
{
"tool": "web_hover_focus_test_cremotemcp",
"arguments": {
"timeout": 10
}
}
// Analyze output for:
// - not_dismissible: Content that cannot be dismissed with Escape key
// - not_hoverable: Tooltip disappears when hovering over it
// - not_persistent: Content disappears too quickly
// - native_title_tooltip: Using native title attribute (violation)
```
### Pattern 13: Text-in-Images Detection
```json
// Detect text embedded in images using OCR
{
"tool": "web_text_in_images_cremotemcp",
"arguments": {
"timeout": 30 // OCR is CPU-intensive, allow more time
}
}
// Analyze output for:
// - missing_alt: Images with text but no alt text
// - insufficient_alt: Images with text but inadequate alt text
// - detected_text: Actual text found in the image
// - recommendations: Specific suggestions for each image
```
### Pattern 14: Cross-Page Consistency
```json
// Check consistency across multiple pages
{
"tool": "web_cross_page_consistency_cremotemcp",
"arguments": {
"urls": [
"https://example.com/",
"https://example.com/about",
"https://example.com/contact",
"https://example.com/services"
],
"timeout": 10 // Per page
}
}
// Analyze output for:
// - common_navigation: Links present on all pages
// - inconsistent_pages: Pages missing common navigation
// - landmark_issues: Missing or multiple main/header/footer landmarks
// - navigation_issues: Inconsistent navigation structure
```
### Pattern 15: Animation/Flash Detection
```json
// Detect animations and flashing content
{
"tool": "web_animation_flash_cremotemcp",
"arguments": {
"timeout": 10
}
}
// Analyze output for:
// - flashing_content: Content flashing > 3 times per second (violation)
// - no_pause_control: Autoplay animation > 5s without controls (violation)
// - rapid_animation: Fast infinite animations (warning)
// - animation_types: CSS, GIF, video, canvas, SVG
```
### Pattern 16: Enhanced ARIA Validation
```json
// Perform enhanced accessibility tree analysis
{
"tool": "web_enhanced_accessibility_cremotemcp",
"arguments": {
"timeout": 10
}
}
// Analyze output for:
// - missing_accessible_name: Interactive elements without labels
// - aria_hidden_interactive: Interactive elements with aria-hidden
// - invalid_tabindex: Elements with invalid tabindex values
// - landmark_issues: Multiple landmarks without distinguishing labels
```
## CRITICAL: Understanding Tool Output vs Compliance Scoring
### ⚠️ DO NOT CONFUSE TEST EXECUTION SUCCESS WITH COMPLIANCE SCORES
**IMPORTANT:** Testing tools may return an `overall_score` or `status` field that indicates **test execution success**, NOT compliance/accessibility scores.
**Test Execution Success (100/100):**
- Means: All tests ran successfully without errors
- Means: The page loaded and tools executed properly
- **DOES NOT MEAN:** The page is accessible or compliant
**Compliance Score (Calculated by You):**
- Based on: Actual violations, failures, and issues found
- Considers: Severity, impact, and percentage of failures
- **THIS is what you report to the user**
### Compliance Scoring Methodology
When generating reports, **YOU MUST CALCULATE** the actual compliance score based on findings:
#### Scoring Formula
```
Base Score: 100 points
Deductions:
1. Axe-core violations:
- Critical violations: -10 points each
- Serious violations: -5 points each
- Moderate violations: -2 points each
- Minor violations: -1 point each
2. Contrast failures:
- 0-10% failure rate: -5 points
- 11-20% failure rate: -10 points
- 21-30% failure rate: -15 points
- 31-40% failure rate: -20 points
- 41%+ failure rate: -25 points
3. Keyboard accessibility:
- 1-10 missing focus indicators: -5 points
- 11-25 missing focus indicators: -10 points
- 26-50 missing focus indicators: -15 points
- 51+ missing focus indicators: -20 points
- Keyboard traps detected: -15 points each
4. Form accessibility:
- Missing labels: -5 points per form
- No ARIA compliance: -10 points per form
- Not keyboard accessible: -10 points per form
5. Structural issues:
- Missing landmarks: -10 points
- Duplicate IDs: -5 points each
- Invalid ARIA: -5 points per violation
Final Score = Base Score - Total Deductions (minimum 0)
```
#### Compliance Status Thresholds
```
95-100 points: FULLY COMPLIANT
- Minor issues only
- Legal risk: VERY LOW
- Status: "COMPLIANT"
80-94 points: SUBSTANTIALLY COMPLIANT
- Some moderate issues requiring remediation
- Legal risk: LOW
- Status: "SUBSTANTIALLY COMPLIANT (with remediation needed)"
60-79 points: PARTIALLY COMPLIANT
- Multiple serious issues
- Legal risk: MODERATE
- Status: "PARTIALLY COMPLIANT (requires significant remediation)"
40-59 points: MINIMALLY COMPLIANT
- Major accessibility barriers
- Legal risk: HIGH
- Status: "MINIMALLY COMPLIANT (major remediation required)"
0-39 points: NON-COMPLIANT
- Critical accessibility failures
- Legal risk: CRITICAL
- Status: "NON-COMPLIANT (immediate remediation required)"
```
### Example: Correct Scoring
**Tool Output:**
```json
{
"overall_score": 100, // ← This is TEST EXECUTION success, NOT compliance
"status": "success",
"violations": [
{"impact": "serious", "id": "color-contrast"},
{"impact": "serious", "id": "link-name"}
],
"contrast_summary": {
"total_checked": 217,
"passed": 147,
"failed": 70,
"pass_rate": 67.7
},
"keyboard_summary": {
"missing_focus_indicators": 15
}
}
```
**Your Calculated Compliance Score:**
```
Base Score: 100
Deductions:
- 2 serious axe-core violations: -10 points (2 × 5)
- 32.3% contrast failure rate: -20 points
- 15 missing focus indicators: -10 points
Final Score: 100 - 10 - 20 - 10 = 60/100
Compliance Status: PARTIALLY COMPLIANT
Legal Risk: MODERATE
```
**What You Report:**
```markdown
**Compliance Score:** 60/100 - PARTIALLY COMPLIANT
**Legal Risk:** MODERATE
**Test Execution:** Successful (all tests completed)
**Critical Issues:**
- Color Contrast: 32.3% failure rate (70/217 elements)
- Axe-core violations: 2 serious issues
- Focus indicators: 15 missing
**Estimated Remediation:** 5-7 hours
```
### ❌ INCORRECT Reporting Example
**DO NOT DO THIS:**
```markdown
**Overall Score:** 100/100 (with noted issues) ← WRONG!
**Compliance Status:** COMPLIANT (with remediation needed) ← CONTRADICTORY!
**Contrast Analysis:**
- Failed: 70 (32.3%) ← This contradicts "COMPLIANT"
```
### ✅ CORRECT Reporting Example
**DO THIS:**
```markdown
**Compliance Score:** 60/100 - PARTIALLY COMPLIANT
**Legal Risk:** MODERATE
**Test Execution Status:** All tests completed successfully
**Contrast Analysis:**
- Total elements: 217
- Passed: 147 (67.7%)
- Failed: 70 (32.3%)
- Impact: -20 points from compliance score
**Axe-Core Violations:**
- Serious: 2 violations
- Impact: -10 points from compliance score
**Keyboard Navigation:**
- Missing focus indicators: 15 elements
- Impact: -10 points from compliance score
**Remediation Priority:**
1. Fix contrast issues (HIGH priority)
2. Add focus indicators (HIGH priority)
3. Resolve axe-core violations (MEDIUM priority)
```
### Page-by-Page Reporting Template
Use this template for each page in your reports:
```markdown
### [Page Name] ([URL])
**Compliance Score:** [0-100]/100 - [STATUS]
**Legal Risk:** [VERY LOW | LOW | MODERATE | HIGH | CRITICAL]
**Screenshot:** `screenshots/[filename].png`
**Score Breakdown:**
- Base score: 100
- Axe-core violations: -[X] points ([count] violations)
- Contrast failures: -[X] points ([percentage]% failure rate)
- Keyboard issues: -[X] points ([count] missing indicators)
- Form issues: -[X] points ([count] forms with issues)
- Structural issues: -[X] points ([count] issues)
- **Final Score:** [0-100]/100
**Detailed Findings:**
**Contrast Analysis:**
- Total elements checked: [number]
- Passed: [number] ([percentage]%)
- Failed: [number] ([percentage]%)
**Keyboard Navigation:**
- Total interactive elements: [number]
- Focusable: [number]
- Missing focus indicators: [number]
- Keyboard traps: [number]
**Axe-Core Results:**
- Critical violations: [number]
- Serious violations: [number]
- Moderate violations: [number]
- Minor violations: [number]
- Passes: [number]
**Forms:**
- Forms found: [number]
- Issues: [list or "None"]
- ARIA Compliance: [FULL | PARTIAL | NONE]
**Zoom/Reflow Testing:**
- 100% zoom: [PASS | FAIL] - [details]
- 200% zoom: [PASS | FAIL] - [details]
- 400% zoom: [PASS | FAIL] - [details]
- 320px width: [PASS | FAIL] - [details]
```
### Site-Wide Summary Template
```markdown
## Executive Summary
**Overall Site Compliance:** [Average score]/100 - [STATUS]
**Legal Risk Assessment:** [VERY LOW | LOW | MODERATE | HIGH | CRITICAL]
**Pages Tested:** [number]
**Compliance Score Distribution:**
- Fully Compliant (95-100): [number] pages
- Substantially Compliant (80-94): [number] pages
- Partially Compliant (60-79): [number] pages
- Minimally Compliant (40-59): [number] pages
- Non-Compliant (0-39): [number] pages
**Site-Wide Issues:**
1. [Issue type]: Affects [number] pages - [severity]
2. [Issue type]: Affects [number] pages - [severity]
**Total Estimated Remediation Time:** [hours] hours
```
## Interpreting Results
### Axe-Core Results
```json
{
"violations": [
{
"id": "color-contrast",
"impact": "serious", // critical, serious, moderate, minor
"description": "Elements must have sufficient color contrast",
"nodes": [
{
"html": "
Low contrast text
",
"target": [".text-gray"],
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.2:1 (foreground color: #808080, background color: #ffffff, font size: 12.0pt (16px), font weight: normal). Expected contrast ratio of 4.5:1"
}
]
}
],
"passes": [...], // Tests that passed
"incomplete": [...], // Tests requiring manual review
"inapplicable": [...] // Tests not applicable to this page
}
```
**Action Priority:**
1. **Critical/Serious violations** - Fix immediately
2. **Moderate violations** - Fix in current sprint
3. **Minor violations** - Fix when convenient
4. **Incomplete** - Manually review and test
5. **Passes** - Document for compliance
### Contrast Check Results
```
WCAG AA Violations:
- p:nth-of-type(3): 3.2:1 (required: 4.5:1)
Text: This text has insufficient contrast
Colors: rgb(128, 128, 128) on rgb(255, 255, 255)
```
**Remediation:**
- Darken foreground color or lighten background
- Use contrast ratio calculator to find compliant colors
- Test with `web_contrast_check_cremotemcp` after fixes
### Keyboard Test Results
```
High Severity Issues:
- not_focusable: Interactive element is not keyboard focusable
Element: div[role="button"]
- no_focus_indicator: Interactive element lacks visible focus indicator
Element: button.submit-btn
```
**Remediation:**
- `not_focusable`: Add `tabindex="0"` or use semantic HTML (`