A Model Context Protocol server for Canvas LMS integration. Provides educators and students with AI-powered tools for course management, assignment handling, discussion facilitation, student analytics, and personal academic tracking.
Canvas MCP has 6 tools with consistently present descriptions and parameter schemas. All tools use clear action verbs (get_, list_) and are READ_ONLY. Descriptions are adequate but vary in specificity. Parameter schemas are well-typed with descriptions. However, output schemas are undocumented, error handling guidance is minimal, and some parameter descriptions lack format constraints. Tool composition is reasonable, each tool has a single responsibility. No security issues detected in parameter definitions (no secrets exposed). The server uses FastMCP on HTTP/STDIO transports.
Get current data anonymization status and statistics.
Get your submission status for a course or specific assignment.
Get your upcoming assignments across all courses.
Get per-student engagement analytics: page views, participations, and on-time/late/missing assignment counts. Uses Canvas's /analytics/student_summaries endpoint to return a ranked table of every student in the course with an engagement score (0-100) useful for identifying disengaged students in participation/presentation-driven courses.
List all groups and their members for a specific course.
List users enrolled in a specific course.
Output schemas are not documented. While tool descriptions explain WHAT is returned, the LLM cannot inspect the response structure or plan downstream tool calls. This violates pattern:tool which requires documented return types.
Parameter descriptions lack format/constraint details. E.g., 'days' parameter in get_my_upcoming_assignments has no min/max bounds; 'sort_by' in get_student_analytics lists values in description but should be an enum constraint. Violates pattern:constrained-input.
No pagination guidance in tool descriptions. list_groups and list_users accept course_identifier but do not document pagination (page/limit/offset/cursor). Large course enrollments risk context window exhaustion. Violates pattern:paginated-result.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 73 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
No error recovery guidance. Descriptions do not indicate what to do if course_identifier is invalid, if user lacks permissions, or if the Canvas API is unreachable. Violates pattern:recovery-guide.
Parameter type ambiguity: 'course_identifier' accepts both string and int. While flexible, this is not well-documented in parameter descriptions (should clarify 'Canvas course ID (integer) or course code (string like 'CS101')'). Violates pattern:natural-identifiers.