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