{"slug":"canvas-accessibility-auditor","title":"canvas-accessibility-auditor","summary":"Accessibility audit and remediation for Canvas LMS courses. Scans content for WCAG-oriented issues, generates prioritized reports, guides fixes, and verifies remediation. Use when asked to \"audit accessibility\", \"check WCAG\", \"fix accessibility issues\", or \"run accessibility revi","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-01T17:41:35.192332Z","repo":{"url":"https://github.com/vishalsachdev/canvas-mcp","stars":260,"forks":89,"license":"MIT","updatedAt":"2026-09-25T01:49:08Z"},"bodyHtml":"<hr>\n<h2>name: canvas-accessibility-auditor\ndescription: Accessibility audit and remediation for Canvas LMS courses. Scans content for WCAG-oriented issues, generates prioritized reports, guides fixes, and verifies remediation. Use when asked to \"audit accessibility\", \"check WCAG\", \"fix accessibility issues\", or \"run accessibility review\".</h2>\n<h1>Canvas Accessibility Auditor</h1>\n<p>Full accessibility audit cycle for Learning Designers: scan course content, generate a prioritized report, guide remediation of fixable issues, re-scan to verify fixes, and produce an accessibility review summary.</p>\n<h2>Prerequisites</h2>\n<ul>\n<li><strong>Canvas MCP server</strong> must be running and connected.</li>\n<li>Authenticated user must have <strong>instructor, TA, or designer role</strong> in the target course.</li>\n<li>For UFIXIT integration: the course must have a UFIXIT report page (generated by your institution's accessibility tool).</li>\n</ul>\n<h2>Steps</h2>\n<h3>1. Identify Target Course</h3>\n<p>Ask the user which course to audit. Accept a course code, Canvas ID, or course name.</p>\n<p>If not specified, prompt:</p>\n<blockquote>\n<p>Which course would you like to audit for accessibility?</p>\n</blockquote>\n<h3>2. Scan Course Content</h3>\n<p>Run two scans in parallel if possible:</p>\n<p><strong>Scan A -- Direct content scan:</strong></p>\n<pre><code>scan_course_content_accessibility(course_identifier, \"pages,assignments\")\n</code></pre>\n<p>This checks all page and assignment HTML for:</p>\n<ul>\n<li>Images missing alt text (WCAG 1.1.1, Level A)</li>\n<li>Empty headings (WCAG 2.4.6, Level AA)</li>\n<li>Tables missing headers (WCAG 1.3.1, Level A)</li>\n<li>Non-descriptive link text like \"click here\" (WCAG 2.4.4, Level A)</li>\n</ul>\n<p><strong>Scan B -- UFIXIT report (if available):</strong></p>\n<pre><code>fetch_ufixit_report(course_identifier)\n</code></pre>\n<p>If the UFIXIT page exists, parse it:</p>\n<pre><code>parse_ufixit_violations(report_json)\n</code></pre>\n<h3>3. Generate Prioritized Report</h3>\n<p>Combine results from both scans. Call <code>format_accessibility_summary</code> if using UFIXIT data.</p>\n<p>Present issues sorted by priority:</p>\n<pre><code>## Accessibility Audit: [Course Name]\n\n### Summary\n- Content scanned: 20 pages, 15 assignments\n- Total issues: 12\n- Auto-fixable: 8 | Manual review needed: 4\n\n### Level A Violations (must fix)\n1. **Missing alt text** -- 5 images across 3 pages\n   - Page \"Week 1 Overview\": 2 images\n   - Page \"Lab Instructions\": 2 images\n   - Assignment \"Final Project\": 1 image\n\n2. **Tables missing headers** -- 2 tables\n   - Page \"Grade Scale\": 1 table\n   - Page \"Schedule\": 1 table\n\n3. **Non-descriptive links** -- 3 instances of \"click here\"\n   - Page \"Resources\": 2 links\n   - Page \"Week 3 Overview\": 1 link\n\n### Level AA Violations (should fix)\n4. **Empty headings** -- 2 empty heading elements\n   - Page \"Week 5 Notes\": 1 empty h3\n   - Page \"Midterm Review\": 1 empty h2\n\n### Manual Review Required\n- Color contrast: Cannot be checked automatically (requires visual inspection)\n- Video captions: Cannot be verified via API (check in Canvas media player)\n- PDF accessibility: Cannot be parsed via API (use Adobe Acrobat checker)\n</code></pre>\n<h3>4. Guided Remediation</h3>\n<p>For each auto-fixable issue, walk the user through the fix:</p>\n<p><strong>For missing alt text:</strong></p>\n<ol>\n<li>Call <code>get_page_content(course_identifier, page_url)</code> to retrieve the HTML</li>\n<li>Identify the <code>&lt;img&gt;</code> tags without alt attributes</li>\n<li>Ask the user for alt text descriptions (or suggest based on surrounding context)</li>\n<li>Call <code>edit_page_content(course_identifier, page_url, new_content)</code> with corrected HTML</li>\n</ol>\n<p><strong>For non-descriptive links:</strong></p>\n<ol>\n<li>Retrieve the page content</li>\n<li>Show the current link: <code>&lt;a href=\"...\"&gt;click here&lt;/a&gt;</code></li>\n<li>Suggest descriptive replacement: <code>&lt;a href=\"...\"&gt;Download the syllabus (PDF)&lt;/a&gt;</code></li>\n<li>Apply fix after user approval</li>\n</ol>\n<p><strong>For empty headings:</strong></p>\n<ol>\n<li>Retrieve the page content</li>\n<li>Show the empty heading</li>\n<li>Ask: \"Remove this heading, or add text to it?\"</li>\n<li>Apply the chosen fix</li>\n</ol>\n<p><strong>For tables missing headers:</strong></p>\n<ol>\n<li>Retrieve the page content</li>\n<li>Show the table structure</li>\n<li>Ask: \"Which row/column should be headers?\"</li>\n<li>Convert <code>&lt;td&gt;</code> to <code>&lt;th&gt;</code> elements and apply</li>\n</ol>\n<p>Always ask for user confirmation before modifying any page.</p>\n<h3>5. Re-scan Modified Pages</h3>\n<p>After remediation, re-run the scan on modified pages only:</p>\n<pre><code>scan_course_content_accessibility(course_identifier, \"pages\")\n</code></pre>\n<p>Report: \"Fixed 8/12 issues. 4 remaining require manual review.\"</p>\n<h3>6. Generate Accessibility Review Summary</h3>\n<p>Produce a final summary suitable for stakeholder reporting:</p>\n<pre><code>## Accessibility Review Summary\n\n**Course:** [Course Name]\n**Audit Date:** [date]\n**Auditor:** AI-assisted audit via Canvas MCP\n\n### Results\n- Total content items scanned: 35\n- Automated issues found: 12\n- Issues remediated: 8\n- Issues requiring manual review: 4\n- Automated WCAG-oriented checks: Partial pass (manual review items remain)\n\n### Remediation Actions Taken\n- Added alt text to 5 images\n- Fixed 3 non-descriptive links\n- Removed 2 empty headings\n\n### Outstanding Items\n- Color contrast review needed (pages with colored text)\n- Video caption verification (embedded videos)\n- PDF accessibility check (uploaded PDFs)\n\n### Recommendation\nCourse content meets automated WCAG 2.1 Level A criteria after remediation.\nManual review of color contrast and multimedia is recommended before publishing.\n</code></pre>\n<h2>MCP Tools Used</h2>\n<table>\n<thead>\n<tr>\n<th>Tool</th>\n<th>Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>scan_course_content_accessibility</code></td>\n<td>Scan pages and assignments for WCAG issues</td>\n</tr>\n<tr>\n<td><code>fetch_ufixit_report</code></td>\n<td>Retrieve institutional UFIXIT report</td>\n</tr>\n<tr>\n<td><code>parse_ufixit_violations</code></td>\n<td>Extract structured violations from report</td>\n</tr>\n<tr>\n<td><code>format_accessibility_summary</code></td>\n<td>Format violations into readable report</td>\n</tr>\n<tr>\n<td><code>get_page_content</code></td>\n<td>Retrieve page HTML for remediation</td>\n</tr>\n<tr>\n<td><code>edit_page_content</code></td>\n<td>Apply accessibility fixes to pages</td>\n</tr>\n<tr>\n<td><code>list_courses</code></td>\n<td>Find available courses</td>\n</tr>\n</tbody>\n</table>\n<h2>Example</h2>\n<p><strong>User:</strong> \"Run accessibility audit for CS 101\"</p>\n<p><strong>Agent:</strong> Scans all content, generates the prioritized report.</p>\n<p><strong>User:</strong> \"Fix the missing alt text issues\"</p>\n<p><strong>Agent:</strong> Retrieves each affected page, asks for alt text descriptions, applies fixes, re-scans.</p>\n<h2>Limitations</h2>\n<ul>\n<li><strong>Cannot check:</strong> Color contrast, video captions, PDF accessibility, audio descriptions, keyboard navigation</li>\n<li><strong>These are flagged</strong> as \"manual review required\" in every report</li>\n<li><strong>Remediation is per-page:</strong> Each fix requires a full page content read and write cycle</li>\n<li><strong>No undo:</strong> Page edits via the API do not create Canvas revision history -- back up pages before bulk fixes</li>\n</ul>\n<h2>Notes</h2>\n<ul>\n<li>Pairs well with <code>canvas-course-qc</code> for comprehensive pre-semester review.</li>\n<li>Run after major content updates or course imports.</li>\n<li>UFIXIT integration depends on your institution having UDOIT/UFIXIT installed.</li>\n</ul>\n","files":[{"path":"SKILL.md","sizeBytes":6495,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-01T17:41:48.631215Z","sha256":"4EFCBD9A5DA1129697A6F8F7AC48A2FCD01AF0373FB0E1039A2AF2CBA4C11FCA","sizeBytes":2781},"review":null,"source":{"repositoryUrl":"https://github.com/vishalsachdev/canvas-mcp","path":"skills/canvas-accessibility-auditor","license":"MIT","commit":"6378b2b1c16e9d5b08aef71bed3e50d2b46659f1","subtreeSha":"08E959548C88220509A149ADFDF9B8E3E6866A85C148369E8196C3CE047D2EBB","lastSyncedAt":"2026-09-25T07:38:20.968769Z"},"reviewedAt":"2026-09-01T17:42:03.21498Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/vishalsachdev/canvas-mcp/tree/main/skills/canvas-accessibility-auditor"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install vishalsachdev-canvas-mcp@llmmart"},{"target":"git","command":"git clone https://github.com/vishalsachdev/canvas-mcp.git"}]}