# Cremote MCP: Accessibility Testing Guide ## Tool Naming All tools use suffix `_cremotemcp`: `web_run_axe_cremotemcp` (NOT `web_run_axe` or `web_run_axe_cremotemcp_cremotemcp`) ## Container File Handling Browser runs in container. File transfers are automatic: - **Screenshots**: Specify local path → auto-downloads from container - **Uploads**: Pass local path to `web_interact_cremotemcp` action="upload" → auto-transfers to container - **Browser downloads**: Use `file_download_cremotemcp` to transfer from container ## Token-Efficient Tools (Use First) | Tool | Tokens | Use Case | |------|--------|----------| | `web_page_accessibility_report_cremotemcp` | ~4k | Full page audit (axe+contrast+keyboard+forms) | | `web_contrast_audit_cremotemcp` | ~4k | Contrast failures with patterns | | `web_keyboard_audit_cremotemcp` | ~2k | Keyboard navigation summary | | `web_form_accessibility_audit_cremotemcp` | ~2k | Form accessibility | ## Tool Selection | Need | Tool | WCAG | |------|------|------| | Full page audit | `web_page_accessibility_report_cremotemcp` | All | | Automated audit | `web_run_axe_cremotemcp` | ~57% WCAG 2.1 AA | | Contrast | `web_contrast_audit_cremotemcp` | 1.4.3, 1.4.6, 1.4.11 | | Gradient contrast | `web_gradient_contrast_check_cremotemcp` | 1.4.3, 1.4.6, 1.4.11 | | Keyboard | `web_keyboard_audit_cremotemcp` | 2.1.1, 2.4.7 | | Forms | `web_form_accessibility_audit_cremotemcp` | 3.3.2, 4.1.2, 1.3.1 | | Media captions | `web_media_validation_cremotemcp` | 1.2.2, 1.2.5, 1.4.2 | | Hover/focus | `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 | `web_cross_page_consistency_cremotemcp` | 3.2.3, 3.2.4 | | Animations | `web_animation_flash_cremotemcp` | 2.3.1, 2.2.2 | | ARIA | `web_enhanced_accessibility_cremotemcp` | 1.3.1, 4.1.2 | | Zoom | `web_zoom_test_cremotemcp` | 1.4.4 | | Responsive | `web_reflow_test_cremotemcp` | 1.4.10 | ## Testing Sequences ### Multi-page (10+ pages): Token-efficient ``` Per page: web_page_accessibility_report_cremotemcp (~4k tokens) Total 10 pages: ~40k tokens ``` ### Single page deep dive ``` 1. web_run_axe_cremotemcp 2. web_contrast_check_cremotemcp 3. web_keyboard_test_cremotemcp 4. web_zoom_test_cremotemcp 5. web_reflow_test_cremotemcp ``` **NOTE**: Axe-core auto-injects when needed. Manual `web_inject_axe_cremotemcp` calls are optional. ## Usage Examples ### Full page audit (~4k tokens) ``` 1. web_inject_axe_cremotemcp (required first) 2. web_page_accessibility_report_cremotemcp: tests: ["all"] standard: "WCAG21AA" timeout: 30 Returns: compliance_status, overall_score, legal_risk, issues by severity, remediation_hours ``` ### Contrast audit (~4k tokens) ``` web_contrast_audit_cremotemcp: priority_selectors: ["button", "a", "nav"] threshold: "AA" Returns: pass_rate, critical_failures (top 20), failure_patterns ``` ### Keyboard audit (~2k tokens) ``` web_keyboard_audit_cremotemcp: check_focus_indicators: true check_tab_order: true check_keyboard_traps: true Returns: status, issues by type/severity, recommendations ``` ### Form audit (~2k tokens) ``` web_form_accessibility_audit_cremotemcp: form_selector: "" # all forms Returns: forms with issues, aria_compliance, keyboard_accessible ``` ### 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 (`