$npx -y skills add vishalsachdev/canvas-mcp --skill canvas-course-qcLearning designer quality check for Canvas LMS courses. Audits module structure, content completeness, publishing state, date consistency, and rubric coverage. Use when asked to "QC a course", "is this course ready", "pre-semester check", or "quality review".
| 1 | # Canvas Course QC |
| 2 | |
| 3 | Automated quality checklist for Learning Designers to verify a Canvas course is ready for students. Runs structure, content, publishing, and completeness checks — then reports issues by priority. |
| 4 | |
| 5 | ## Prerequisites |
| 6 | |
| 7 | - **Canvas MCP server** must be running and connected. |
| 8 | - Authenticated user must have **instructor, TA, or designer role** in the target course. |
| 9 | - Best run before the semester starts or before publishing a course to students. |
| 10 | |
| 11 | ## Steps |
| 12 | |
| 13 | ### 1. Identify Target Course |
| 14 | |
| 15 | Ask the user which course to QC. Accept a course code, Canvas ID, or course name. |
| 16 | |
| 17 | If not specified, prompt: |
| 18 | |
| 19 | > Which course would you like to quality-check? |
| 20 | |
| 21 | Use `list_courses` to look up available courses if needed. |
| 22 | |
| 23 | ### 2. Retrieve Course Structure |
| 24 | |
| 25 | Call `get_course_structure(course_identifier)` to get the full module-to-items tree in one call. |
| 26 | |
| 27 | This returns all modules with their items, publishing states, and summary statistics. |
| 28 | |
| 29 | ### 3. Run Structure Checks |
| 30 | |
| 31 | Analyze the module tree for structural issues: |
| 32 | |
| 33 | | Check | Priority | What to Look For | |
| 34 | |-------|----------|------------------| |
| 35 | | Empty modules | Warning | Modules with 0 items (confusing to students) | |
| 36 | | Naming consistency | Suggestion | Do all modules follow the same pattern? (e.g., "Week N:", "Unit N:") | |
| 37 | | Module count | Suggestion | Does it match expected count for course length? | |
| 38 | | Item ordering | Suggestion | SubHeaders present for organization? | |
| 39 | |
| 40 | ### 4. Run Content Checks |
| 41 | |
| 42 | Call `list_assignments(course_identifier)` and check each assignment: |
| 43 | |
| 44 | | Check | Priority | What to Look For | |
| 45 | |-------|----------|------------------| |
| 46 | | Missing due dates | Blocking | Graded assignments without a due_at date | |
| 47 | | Missing descriptions | Warning | Assignments with empty or null description | |
| 48 | | Missing points | Warning | Assignments without points_possible set | |
| 49 | | Date sequencing | Warning | Due dates that don't follow module order | |
| 50 | | Rubric coverage | Suggestion | Graded assignments without an associated rubric | |
| 51 | |
| 52 | For pages, check if any pages in modules have empty body content using `get_page_content` for pages flagged in the structure. |
| 53 | |
| 54 | ### 5. Run Publishing Checks |
| 55 | |
| 56 | Using the structure data: |
| 57 | |
| 58 | | Check | Priority | What to Look For | |
| 59 | |-------|----------|------------------| |
| 60 | | Ghost items | Blocking | Published items inside unpublished modules (invisible to students) | |
| 61 | | Unpublished modules | Warning | Modules that may need publishing before semester | |
| 62 | | No front page | Warning | Course has no front page set | |
| 63 | |
| 64 | Check for front page by calling `list_pages(course_identifier)` and looking for `front_page: true`. |
| 65 | |
| 66 | ### 6. Run Completeness Checks |
| 67 | |
| 68 | Compare module structures to find inconsistencies: |
| 69 | |
| 70 | | Check | Priority | What to Look For | |
| 71 | |-------|----------|------------------| |
| 72 | | Inconsistent structure | Warning | Most modules have 4 items but some only have 1 | |
| 73 | | Missing item types | Suggestion | Most modules have an Assignment but some don't | |
| 74 | |
| 75 | Build a "typical module" profile from the most common item-type pattern, then flag modules that deviate. |
| 76 | |
| 77 | ### 7. Generate QC Report |
| 78 | |
| 79 | Present results grouped by priority: |
| 80 | |
| 81 | ``` |
| 82 | ## Course QC Report: [Course Name] |
| 83 | |
| 84 | ### Summary |
| 85 | - Modules: 15 | Items: 67 | Assignments: 15 | Pages: 20 |
| 86 | - Issues found: 3 blocking, 5 warnings, 2 suggestions |
| 87 | |
| 88 | ### Blocking Issues (fix before publishing) |
| 89 | 1. Assignment "Final Project" has no due date |
| 90 | 2. Published "Week 5 Quiz" is inside unpublished "Week 5" module (invisible to students) |
| 91 | 3. Assignment "Midterm" has no due date |
| 92 | |
| 93 | ### Warnings (should fix) |
| 94 | 1. 2 empty modules: "Week 14", "Week 15" |
| 95 | 2. 3 assignments missing descriptions: HW 3, HW 7, HW 12 |
| 96 | 3. No front page set for course |
| 97 | 4. Due dates out of order: Week 8 assignment due before Week 7 |
| 98 | 5. "Week 3" module has 1 item while typical modules have 4 |
| 99 | |
| 100 | ### Suggestions (nice-to-have) |
| 101 | 1. Module naming: 13/15 use "Week N:" pattern but "Midterm Review" and "Final Review" don't |
| 102 | 2. 5 graded assignments have no rubric attached |
| 103 | ``` |
| 104 | |
| 105 | ### 8. Offer Follow-up Actions |
| 106 | |
| 107 | After presenting the report, offer actionable next steps: |
| 108 | |
| 109 | > Would you like me to: |
| 110 | > 1. **Auto-fix publishing** -- Publish all unpublished modules (with confirmation) |
| 111 | > 2. **Show details** -- Expand on a specific issue |
| 112 | > 3. **Run accessibility audit** -- Check WCAG compliance (uses canvas-accessibility-auditor skill) |
| 113 | > 4. **Check another course** |
| 114 | |
| 115 | For auto-fix, use `update_module` or `bulk_update_pages` with user confirmation before each batch. |
| 116 | |
| 117 | ## MCP Tools Used |
| 118 | |
| 119 | | Tool | Purpose | |
| 120 | |------|---------| |
| 121 | | `list_courses` | Find available courses | |
| 122 | | `get_course_structure` | Full module tree with items | |
| 123 | | `list_assignments` | Assignment details for content checks | |
| 124 | | `get_assignment_details` | Deep-dive on flagge |