# 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 (`