{"id":"38d16951-8c65-4c4c-be67-3715f0443f52","shortId":"BsGDzP","kind":"skill","title":"canvas-course-qc","tagline":"Learning 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\".","description":"# Canvas Course QC\n\nAutomated 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.\n\n## Prerequisites\n\n- **Canvas MCP server** must be running and connected.\n- Authenticated user must have **instructor, TA, or designer role** in the target course.\n- Best run before the semester starts or before publishing a course to students.\n\n## Steps\n\n### 1. Identify Target Course\n\nAsk the user which course to QC. Accept a course code, Canvas ID, or course name.\n\nIf not specified, prompt:\n\n> Which course would you like to quality-check?\n\nUse `list_courses` to look up available courses if needed.\n\n### 2. Retrieve Course Structure\n\nCall `get_course_structure(course_identifier)` to get the full module-to-items tree in one call.\n\nThis returns all modules with their items, publishing states, and summary statistics.\n\n### 3. Run Structure Checks\n\nAnalyze the module tree for structural issues:\n\n| Check | Priority | What to Look For |\n|-------|----------|------------------|\n| Empty modules | Warning | Modules with 0 items (confusing to students) |\n| Naming consistency | Suggestion | Do all modules follow the same pattern? (e.g., \"Week N:\", \"Unit N:\") |\n| Module count | Suggestion | Does it match expected count for course length? |\n| Item ordering | Suggestion | SubHeaders present for organization? |\n\n### 4. Run Content Checks\n\nCall `list_assignments(course_identifier)` and check each assignment:\n\n| Check | Priority | What to Look For |\n|-------|----------|------------------|\n| Missing due dates | Blocking | Graded assignments without a due_at date |\n| Missing descriptions | Warning | Assignments with empty or null description |\n| Missing points | Warning | Assignments without points_possible set |\n| Date sequencing | Warning | Due dates that don't follow module order |\n| Rubric coverage | Suggestion | Graded assignments without an associated rubric |\n\nFor pages, check if any pages in modules have empty body content using `get_page_content` for pages flagged in the structure.\n\n### 5. Run Publishing Checks\n\nUsing the structure data:\n\n| Check | Priority | What to Look For |\n|-------|----------|------------------|\n| Ghost items | Blocking | Published items inside unpublished modules (invisible to students) |\n| Unpublished modules | Warning | Modules that may need publishing before semester |\n| No front page | Warning | Course has no front page set |\n\nCheck for front page by calling `list_pages(course_identifier)` and looking for `front_page: true`.\n\n### 6. Run Completeness Checks\n\nCompare module structures to find inconsistencies:\n\n| Check | Priority | What to Look For |\n|-------|----------|------------------|\n| Inconsistent structure | Warning | Most modules have 4 items but some only have 1 |\n| Missing item types | Suggestion | Most modules have an Assignment but some don't |\n\nBuild a \"typical module\" profile from the most common item-type pattern, then flag modules that deviate.\n\n### 7. Generate QC Report\n\nPresent results grouped by priority:\n\n```\n## Course QC Report: [Course Name]\n\n### Summary\n- Modules: 15 | Items: 67 | Assignments: 15 | Pages: 20\n- Issues found: 3 blocking, 5 warnings, 2 suggestions\n\n### Blocking Issues (fix before publishing)\n1. Assignment \"Final Project\" has no due date\n2. Published \"Week 5 Quiz\" is inside unpublished \"Week 5\" module (invisible to students)\n3. Assignment \"Midterm\" has no due date\n\n### Warnings (should fix)\n1. 2 empty modules: \"Week 14\", \"Week 15\"\n2. 3 assignments missing descriptions: HW 3, HW 7, HW 12\n3. No front page set for course\n4. Due dates out of order: Week 8 assignment due before Week 7\n5. \"Week 3\" module has 1 item while typical modules have 4\n\n### Suggestions (nice-to-have)\n1. Module naming: 13/15 use \"Week N:\" pattern but \"Midterm Review\" and \"Final Review\" don't\n2. 5 graded assignments have no rubric attached\n```\n\n### 8. Offer Follow-up Actions\n\nAfter presenting the report, offer actionable next steps:\n\n> Would you like me to:\n> 1. **Auto-fix publishing** -- Publish all unpublished modules (with confirmation)\n> 2. **Show details** -- Expand on a specific issue\n> 3. **Run accessibility audit** -- Check WCAG compliance (uses canvas-accessibility-auditor skill)\n> 4. **Check another course**\n\nFor auto-fix, use `update_module` or `bulk_update_pages` with user confirmation before each batch.\n\n## MCP Tools Used\n\n| Tool | Purpose |\n|------|---------|\n| `list_courses` | Find available courses |\n| `get_course_structure` | Full module tree with items |\n| `list_assignments` | Assignment details for content checks |\n| `get_assignment_details` | Deep-dive on flagged assignments |\n| `list_pages` | Check for front page |\n| `get_page_content` | Verify pages have content |\n| `list_all_rubrics` | Check rubric coverage |\n| `update_module` | Auto-fix: publish modules |\n| `bulk_update_pages` | Auto-fix: publish pages |\n\n## Example\n\n**User:** \"QC check for BADM 350\"\n\n**Agent:** Runs all checks, outputs the prioritized report.\n\n**User:** \"Fix the publishing issues\"\n\n**Agent:** Publishes the 2 unpublished modules after confirmation.\n\n## Notes\n\n- This skill is designed for **Learning Designers** who manage course structure before students access it.\n- Run this before each semester or after major content updates.\n- Pairs well with `canvas-accessibility-auditor` for comprehensive course review.","tags":["canvas","course","mcp","vishalsachdev","agent-skills","skills-sh"],"capabilities":["skill","source-vishalsachdev","skill-canvas-course-qc","topic-agent-skills","topic-skills-sh"],"categories":["canvas-mcp"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/vishalsachdev/canvas-mcp/canvas-course-qc","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add vishalsachdev/canvas-mcp","source_repo":"https://github.com/vishalsachdev/canvas-mcp","install_from":"skills.sh"}},"qualityScore":"0.509","qualityRationale":"deterministic score 0.51 from registry signals: · indexed on github topic:agent-skills · 118 github stars · SKILL.md body (5,425 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T12:55:01.323Z","embedding":null,"createdAt":"2026-04-18T22:12:03.651Z","updatedAt":"2026-05-02T12:55:01.323Z","lastSeenAt":"2026-05-02T12:55:01.323Z","tsv":"'0':208 '1':109,424,492,524,568,580,623 '12':542 '13/15':583 '14':529 '15':472,476,531 '2':152,485,500,525,532,596,634,767 '20':478 '3':186,481,514,533,538,543,565,642 '350':750 '4':246,418,550,574,655 '5':335,483,503,509,563,597 '6':396 '67':474 '7':456,540,562 '8':557,604 'accept':120 'access':644,652,786,803 'action':609,615 'agent':751,764 'analyz':190 'anoth':657 'ask':27,113 'assign':252,258,270,279,288,308,433,475,493,515,534,558,599,695,696,702,709 'associ':311 'attach':603 'audit':13,645 'auditor':653,804 'authent':82 'auto':625,661,732,740 'auto-fix':624,660,731,739 'autom':46 'avail':148,684 'badm':749 'batch':675 'best':95 'block':268,351,482,487 'bodi':323 'build':438 'bulk':667,736 'call':156,173,250,385 'canva':2,10,43,55,74,124,651,802 'canvas-accessibility-auditor':650,801 'canvas-course-qc':1 'check':8,39,67,141,189,197,249,256,259,315,338,343,380,399,406,646,656,700,712,726,747,754 'checklist':48 'code':123 'common':446 'compar':400 'complet':17,66,398 'complianc':648 'comprehens':806 'confirm':633,672,771 'confus':210 'connect':81 'consist':21,214 'content':16,63,248,324,328,699,718,722,796 'count':229,235 'cours':3,12,31,34,44,56,94,105,112,117,122,127,134,144,149,154,158,160,237,253,374,388,465,468,549,658,682,685,687,782,807 'coverag':24,305,728 'data':342 'date':20,267,275,293,297,499,520,552 'deep':705 'deep-div':704 'descript':277,284,536 'design':6,51,89,776,779 'detail':636,697,703 'deviat':455 'dive':706 'due':266,273,296,498,519,551,559 'e.g':223 'empti':203,281,322,526 'exampl':744 'expand':637 'expect':234 'final':494,592 'find':404,683 'fix':489,523,626,662,733,741,760 'flag':331,452,708 'follow':219,301,607 'follow-up':606 'found':480 'front':371,377,382,393,545,714 'full':165,689 'generat':457 'get':157,163,326,686,701,716 'ghost':349 'grade':269,307,598 'group':462 'hw':537,539,541 'id':125 'identifi':110,161,254,389 'inconsist':405,412 'insid':354,506 'instructor':86 'invis':357,511 'issu':70,196,479,488,641,763 'item':169,180,209,239,350,353,419,426,448,473,569,693 'item-typ':447 'learn':5,50,778 'length':238 'like':137,620 'list':143,251,386,681,694,710,723 'lms':11 'look':146,201,263,347,391,410 'major':795 'manag':781 'match':233 'may':365 'mcp':75,676 'midterm':516,589 'miss':265,276,285,425,535 'modul':14,167,177,192,204,206,218,228,302,320,356,361,363,401,416,430,441,453,471,510,527,566,572,581,631,665,690,730,735,769 'module-to-item':166 'must':77,84 'n':225,227,586 'name':128,213,469,582 'need':151,366 'next':616 'nice':577 'nice-to-hav':576 'note':772 'null':283 'offer':605,614 'one':172 'order':240,303,555 'organ':245 'output':755 'page':314,318,327,330,372,378,383,387,394,477,546,669,711,715,717,720,738,743 'pair':798 'pattern':222,450,587 'point':286,290 'possibl':291 'pre':37 'pre-semest':36 'prerequisit':73 'present':243,460,611 'priorit':757 'prioriti':72,198,260,344,407,464 'profil':442 'project':495 'prompt':132 'publish':18,64,103,181,337,352,367,491,501,627,628,734,742,762,765 'purpos':680 'qc':4,29,45,119,458,466,746 'qualiti':7,41,47,140 'quality-check':139 'quiz':504 'readi':35,58 'report':69,459,467,613,758 'result':461 'retriev':153 'return':175 'review':42,590,593,808 'role':90 'rubric':23,304,312,602,725,727 'run':61,79,96,187,247,336,397,643,752,788 'semest':38,99,369,792 'sequenc':294 'server':76 'set':292,379,547 'show':635 'skill':654,774 'skill-canvas-course-qc' 'source-vishalsachdev' 'specif':640 'specifi':131 'start':100 'state':19,182 'statist':185 'step':108,617 'structur':15,62,155,159,188,195,334,341,402,413,688,783 'student':60,107,212,359,513,785 'subhead':242 'suggest':215,230,241,306,428,486,575 'summari':184,470 'ta':87 'target':93,111 'tool':677,679 'topic-agent-skills' 'topic-skills-sh' 'tree':170,193,691 'true':395 'type':427,449 'typic':440,571 'unit':226 'unpublish':355,360,507,630,768 'updat':664,668,729,737,797 'use':25,142,325,339,584,649,663,678 'user':83,115,671,745,759 'verifi':53,719 'warn':205,278,287,295,362,373,414,484,521 'wcag':647 'week':224,502,508,528,530,556,561,564,585 'well':799 'without':271,289,309 'would':135,618","prices":[{"id":"34d92abf-2c19-4a60-b352-ce7204987cd6","listingId":"38d16951-8c65-4c4c-be67-3715f0443f52","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"vishalsachdev","category":"canvas-mcp","install_from":"skills.sh"},"createdAt":"2026-04-18T22:12:03.651Z"}],"sources":[{"listingId":"38d16951-8c65-4c4c-be67-3715f0443f52","source":"github","sourceId":"vishalsachdev/canvas-mcp/canvas-course-qc","sourceUrl":"https://github.com/vishalsachdev/canvas-mcp/tree/main/skills/canvas-course-qc","isPrimary":false,"firstSeenAt":"2026-04-18T22:12:03.651Z","lastSeenAt":"2026-05-02T12:55:01.323Z"}],"details":{"listingId":"38d16951-8c65-4c4c-be67-3715f0443f52","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"vishalsachdev","slug":"canvas-course-qc","github":{"repo":"vishalsachdev/canvas-mcp","stars":118,"topics":["agent-skills","skills-sh"],"license":"mit","html_url":"https://github.com/vishalsachdev/canvas-mcp","pushed_at":"2026-04-27T16:16:22Z","description":"Canvas LMS MCP server — 80+ tools and 5 agent skills for students & educators. Works with Claude, Cursor, Codex, and 40+ agents. v1.1.0","skill_md_sha":"9668ee88a35c73b5b02c6a276567760dcf7fccae","skill_md_path":"skills/canvas-course-qc/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/vishalsachdev/canvas-mcp/tree/main/skills/canvas-course-qc"},"layout":"multi","source":"github","category":"canvas-mcp","frontmatter":{"name":"canvas-course-qc","description":"Learning 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\"."},"skills_sh_url":"https://skills.sh/vishalsachdev/canvas-mcp/canvas-course-qc"},"updatedAt":"2026-05-02T12:55:01.323Z"}}