Help us improve
Share bugs, ideas, or general feedback.
From plugin-cms-toolkit
WCAG 2.2 AA accessibility scanner for Sitecore, Umbraco, and Optimizely CMS projects. Scans Razor views, React/Next.js components, JSX templates, and content type definitions for accessibility violations. Use when asked to: scan for accessibility issues, run an accessibility audit, check WCAG compliance, find a11y problems, or audit templates for accessibility. Triggers on "accessibility", "a11y", "WCAG", "screen reader", "aria".
npx claudepluginhub twofoldtech-dakota/plugin-cms-toolkit --plugin plugin-cms-toolkitHow this skill is triggered — by the user, by Claude, or both
Slash command
/plugin-cms-toolkit:a11y [scope: all | views | components | content-types][scope: all | views | components | content-types]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scan CMS projects for WCAG 2.2 AA violations across views, components, and content type definitions.
Measures whether skills, rules, and agent definitions are actually followed by auto-generating test scenarios at 3 strictness levels and reporting compliance rates with full tool call timelines.
Share bugs, ideas, or general feedback.
Scan CMS projects for WCAG 2.2 AA violations across views, components, and content type definitions.
/plugin-cms-toolkit:a11y # Full scan
/plugin-cms-toolkit:a11y views # Razor views and templates only
/plugin-cms-toolkit:a11y components # React/Next.js components only
/plugin-cms-toolkit:a11y content-types # Content model accessibility only
Determine the CMS platform (same detection as cms-detect), then collect files to scan:
Sitecore:
src/components/**/*.tsx — Content SDK / JSS componentsViews/**/*.cshtml — MVC Razor viewsUmbraco:
Views/**/*.cshtml — Razor views and partialsViews/Partials/blocklist/**/*.cshtml — Block List component viewsModels/**/*.cs) for field analysisOptimizely:
Views/**/*.cshtml — Razor viewssrc/**/*.tsx — JS SDK React componentsModels/**/*.cs) for field analysisRead the full WCAG 2.2 AA checklist from wcag-checklist.md before scanning.
For each file, check against every applicable criterion. Group findings by WCAG principle.
Perceivable (WCAG 1.x)
<img> without alt={props.fields.Alt}).error { color: red } without icon/text)<html>Operable (WCAG 2.x)
<div onClick>, <span onClick>) without role, tabIndex, and keyboard handlersonKeyDown/onKeyPress alongside onClick)prefers-reduced-motion media queryUnderstandable (WCAG 3.x)
<label> elements or aria-label/aria-labelledby on inputsRobust (WCAG 4.x)
role attributes on custom interactive componentsHeroImage exists but no HeroImageAlt)Sitecore:
<Image> field helper used without alt field binding<Link> field helper without accessible textUmbraco:
MediaPicker properties without alt text property on media typeHtml.PropertyFor() calls on images without alt outputOptimizely:
ContentArea rendering without landmark wrappers@Html.PropertyFor() on image properties without alt textOutput a structured report:
# Accessibility Scan Results
**Platform:** [detected CMS]
**Standard:** WCAG 2.2 AA
**Files scanned:** [count]
**Issues found:** [count by severity]
## Critical (WCAG A violations)
### [1.1.1] Non-text Content
**file:line** — `<img>` rendered without alt text
```tsx
// Current
<img src={props.fields.Image.value.src} />
// Fix
<img src={props.fields.Image.value.src} alt={props.fields.Image.value.alt} />
file:line — Description of issue Fix: Specific remediation
...
| Content Type | Issue | Recommendation |
|---|---|---|
| HeroBanner | Image field has no alt text companion | Add HeroImageAlt (Single-Line Text, required) |
| Severity | Count |
|---|---|
| Critical (A) | X |
| Serious (AA) | X |
| Moderate (best practice) | X |
| Content model | X |
Top 3 recommendations:
### Severity Levels
- **Critical** — WCAG 2.2 Level A failure. Blocks users with disabilities entirely.
- **Serious** — WCAG 2.2 Level AA failure. Significant barrier.
- **Moderate** — Best practice violation. Not a conformance failure but degrades experience.