$npx -y skills add vishalsachdev/canvas-mcp --skill canvas-peer-review-managerEducator peer review management for Canvas LMS. Tracks completion rates, analyzes comment quality, flags problematic reviews, sends targeted reminders, and generates instructor-ready reports. Trigger phrases include "peer review status", "how are peer reviews going", "who hasn't
| 1 | # Canvas Peer Review Manager |
| 2 | |
| 3 | A complete peer review management workflow for educators using Canvas LMS. Monitor completion, analyze quality, identify students who need follow-up, send reminders, and export data -- all through MCP tool calls against the Canvas API. |
| 4 | |
| 5 | ## Prerequisites |
| 6 | |
| 7 | - **Canvas MCP server** must be running and connected to the agent's MCP client (e.g., Claude Code, Cursor, Codex, OpenCode). |
| 8 | - The authenticated user must have an **educator or instructor role** in the target Canvas course. |
| 9 | - The assignment must have **peer reviews enabled** in Canvas (either manual or automatic assignment). |
| 10 | - **FERPA compliance**: Set `ENABLE_DATA_ANONYMIZATION=true` in the Canvas MCP server environment to anonymize student names. When enabled, names render as `Student_xxxxxxxx` hashes while preserving functional user IDs for messaging. |
| 11 | |
| 12 | ## Steps |
| 13 | |
| 14 | ### 1. Identify the Assignment |
| 15 | |
| 16 | Ask the user which course and assignment to manage peer reviews for. Accept a course code, Canvas ID, or course name, plus an assignment name or ID. |
| 17 | |
| 18 | If the user does not specify, prompt: |
| 19 | |
| 20 | > Which course and assignment would you like to check peer reviews for? |
| 21 | |
| 22 | Use `list_courses` and `list_assignments` to help the user find the right identifiers. |
| 23 | |
| 24 | ### 2. Check Peer Review Completion |
| 25 | |
| 26 | Call `get_peer_review_completion_analytics` with the course identifier and assignment ID. This returns: |
| 27 | |
| 28 | - Overall completion rate (percentage) |
| 29 | - Number of students with all reviews complete, partial, and none complete |
| 30 | - Per-student breakdown showing completed vs. assigned reviews |
| 31 | |
| 32 | **Key data points to surface:** |
| 33 | |
| 34 | | Metric | What It Tells You | |
| 35 | |--------|-------------------| |
| 36 | | Completion rate | Overall health of the peer review cycle | |
| 37 | | "None complete" count | Students who haven't started -- highest priority for reminders | |
| 38 | | "Partial complete" count | Students who started but didn't finish | |
| 39 | | Per-student breakdown | Exactly who needs follow-up | |
| 40 | |
| 41 | ### 3. Review the Assignment Mapping |
| 42 | |
| 43 | If the user wants to understand who is reviewing whom, call `get_peer_review_assignments` with: |
| 44 | |
| 45 | - `include_names=true` for human-readable output |
| 46 | - `include_submission_details=true` for submission context |
| 47 | |
| 48 | This shows the full reviewer-to-reviewee mapping with completion status. |
| 49 | |
| 50 | ### 4. Extract and Read Comments |
| 51 | |
| 52 | Call `get_peer_review_comments` to retrieve actual comment text. Parameters: |
| 53 | |
| 54 | - `include_reviewer_info=true` -- who wrote the comment |
| 55 | - `include_reviewee_info=true` -- who received the comment |
| 56 | - `anonymize_students=true` -- recommended when sharing results or working with sensitive data |
| 57 | |
| 58 | This reveals what students actually wrote in their reviews. |
| 59 | |
| 60 | ### 5. Analyze Comment Quality |
| 61 | |
| 62 | Call `analyze_peer_review_quality` to generate quality metrics across all reviews. The analysis includes: |
| 63 | |
| 64 | - **Average quality score** (1-5 scale) |
| 65 | - **Word count statistics** (mean, median, range) |
| 66 | - **Constructiveness analysis** (constructive feedback vs. generic comments vs. specific suggestions) |
| 67 | - **Sentiment distribution** (positive, neutral, negative) |
| 68 | - **Flagged reviews** that fall below quality thresholds |
| 69 | |
| 70 | Optionally pass `analysis_criteria` as a JSON string to customize what counts as high/low quality. |
| 71 | |
| 72 | ### 6. Flag Problematic Reviews |
| 73 | |
| 74 | Call `identify_problematic_peer_reviews` to automatically flag reviews needing instructor attention. Flagging criteria include: |
| 75 | |
| 76 | - Very short or empty comments |
| 77 | - Generic responses (e.g., "looks good", "nice work") |
| 78 | - Lack of constructive feedback |
| 79 | - Potential copy-paste or identical reviews |
| 80 | |
| 81 | Pass custom `criteria` as a JSON string to override default thresholds. |
| 82 | |
| 83 | ### 7. Get the Follow-up List |
| 84 | |
| 85 | Call `get_peer_review_followup_list` to get a prioritized list of students requiring action: |
| 86 | |
| 87 | - `priority_filter="urgent"` -- students with zero reviews completed |
| 88 | - `priority_filter="medium"` -- students with partial completion |
| 89 | - `priority_filter="all"` -- everyone who needs follow-up |
| 90 | - `days_threshold=3` -- adjusts urgency calculation based on days since assignment |
| 91 | |
| 92 | ### 8. Send Reminders |
| 93 | |
| 94 | **Always use a dry run or review step before sending messages.** |
| 95 | |
| 96 | For targeted reminders, call `send_peer_review_reminders` with: |
| 97 | |
| 98 | - `recipient_ids` -- list of Canvas user IDs from the analytics results |
| 99 | - `custom_message` -- optional custom text (a default template is used if omitted) |
| 100 | - `subject_prefix` -- defaults to "Peer Review Reminder" |
| 101 | |
| 102 | Example flow: |
| 103 | |
| 104 | 1. Get incomplete reviewers from step 2 |
| 105 | 2. Extract their user IDs |
| 106 | 3. Review the recipient list with the user |
| 107 | 4. Send reminders after confirmation |
| 108 | |
| 109 | For a fully automated pipeline, call `send_peer_review_followup_campaign` with just the c |