{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"awesome-canvas-lms","slug":"canvas-lms","name":"Canvas LMS","type":"mcp","url":"https://github.com/ahnopologetic/canvas-lms-mcp","page_url":"https://unfragile.ai/canvas-lms","categories":["mcp-servers"],"tags":[],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"awesome-canvas-lms__cap_0","uri":"capability://tool.use.integration.canvas.api.authentication.and.session.management","name":"canvas api authentication and session management","description":"Manages OAuth2 and API token-based authentication with Canvas LMS instances, handling credential storage, token refresh, and session lifecycle. Implements MCP server-side credential management to securely bridge client requests to Canvas API endpoints without exposing raw tokens to downstream tools.","intents":["Securely connect an AI agent to a Canvas LMS instance without hardcoding API credentials","Maintain persistent authenticated sessions across multiple tool invocations within a single MCP context","Rotate or refresh Canvas API tokens automatically when they expire"],"best_for":["Teams deploying Canvas LMS integrations through MCP servers","Developers building AI agents that need long-lived Canvas access","Educational institutions with centralized Canvas deployments"],"limitations":["Token storage mechanism not specified in available documentation — may lack encryption at rest","No built-in support for multi-tenant Canvas instances (one server per Canvas domain)","Requires manual credential provisioning; no automated OAuth2 flow UI"],"requires":["Canvas LMS instance with API access enabled","Valid Canvas API token or OAuth2 credentials","MCP client capable of connecting to stdio-based servers"],"input_types":["Canvas API token (string)","Canvas instance URL (string)"],"output_types":["Authenticated session handle (internal)","HTTP Authorization headers (Bearer token)"],"categories":["tool-use-integration","authentication"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-canvas-lms__cap_1","uri":"capability://data.processing.analysis.course.and.enrollment.data.retrieval","name":"course and enrollment data retrieval","description":"Fetches structured course metadata, enrollment lists, and student-course relationships from Canvas API endpoints, transforming raw API responses into normalized data structures. Uses Canvas REST API pagination to handle large course rosters and implements filtering by course state, term, and enrollment type.","intents":["Retrieve a list of all courses a user teaches or is enrolled in","Get the complete roster of students enrolled in a specific course","Filter courses by term, status (active/concluded), or enrollment role"],"best_for":["Educators building AI tutoring assistants that need course context","Administrators auditing enrollment across multiple courses","LMS integration developers needing normalized course/enrollment data"],"limitations":["Pagination handled transparently but may introduce latency for institutions with 1000+ courses","No built-in caching — repeated queries hit Canvas API directly, subject to rate limits","Enrollment data is point-in-time; does not track historical enrollment changes"],"requires":["Canvas API token with courses:read and enrollments:read scopes","Canvas instance URL","Network access to Canvas API endpoints"],"input_types":["course_id (integer or string)","user_id (integer or string)","filter parameters (term, state, role)"],"output_types":["JSON array of course objects with id, name, code, term, state","JSON array of enrollment objects with user_id, role, status"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-canvas-lms__cap_10","uri":"capability://data.processing.analysis.rubric.and.learning.outcome.assessment","name":"rubric and learning outcome assessment","description":"Retrieves rubric definitions, learning outcomes, and assessment criteria from Canvas, mapping rubric scores to learning objectives. Implements Canvas rubrics API to fetch rubric structures, extract criterion definitions and point scales, and correlate rubric assessments with learning outcomes.","intents":["Understand the grading criteria for an assignment by fetching its rubric","Map student performance to learning outcomes based on rubric assessments","Analyze which learning outcomes students are struggling with across assignments"],"best_for":["Learning outcome analytics systems that track competency development","Adaptive tutoring systems that target instruction based on outcome gaps","Accreditation reporting tools that aggregate outcome assessment data"],"limitations":["Rubric structure varies by Canvas version; normalization may be incomplete","Learning outcome associations with rubrics not always explicit; requires manual mapping","Rubric assessment data embedded in submission objects; requires separate query per submission"],"requires":["Canvas API token with rubrics:read and outcomes:read scopes","Assignment ID or rubric ID","Canvas instance with rubrics and outcomes enabled"],"input_types":["assignment_id (integer)","rubric_id (integer, optional)"],"output_types":["JSON rubric object with criteria array (id, description, ratings array with points and description)","JSON array of learning outcome objects with id, title, description"],"categories":["data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-canvas-lms__cap_2","uri":"capability://data.processing.analysis.assignment.and.submission.data.access","name":"assignment and submission data access","description":"Retrieves assignment definitions, submission records, and grading data from Canvas, including submission timestamps, student work artifacts, and rubric scores. Implements Canvas API calls to fetch assignments by course, map submissions to students, and extract grade information with support for both simple numeric grades and rubric-based assessments.","intents":["Fetch all assignments in a course with due dates and point values","Retrieve student submissions for a specific assignment including submission time and attachment URLs","Extract grades and rubric feedback for a student's submission"],"best_for":["AI tutoring systems that need to understand assignment context and student performance","Grade analytics tools that aggregate submission and grading data","Automated feedback systems that analyze student work"],"limitations":["Submission attachments returned as URLs only — does not download or process file contents","Rubric data structure varies by Canvas version; normalization may be incomplete","No support for draft submissions or submission revision history"],"requires":["Canvas API token with assignments:read and submissions:read scopes","Course ID to query assignments","Canvas instance with assignments and submissions enabled"],"input_types":["course_id (integer)","assignment_id (integer)","user_id (integer)"],"output_types":["JSON array of assignment objects with name, due_date, points_possible","JSON array of submission objects with submitted_at, grade, rubric_assessment"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-canvas-lms__cap_3","uri":"capability://data.processing.analysis.discussion.and.communication.thread.retrieval","name":"discussion and communication thread retrieval","description":"Fetches discussion topics, forum posts, and threaded conversations from Canvas, including message content, author metadata, and timestamps. Implements Canvas API calls to retrieve discussion topics by course, paginate through discussion entries, and reconstruct conversation threads with parent-child relationships.","intents":["Retrieve all discussion topics in a course to understand class conversations","Fetch posts within a discussion thread to analyze student engagement","Extract discussion metadata (author, timestamp, content) for sentiment analysis or participation tracking"],"best_for":["Engagement analytics tools that measure student participation in discussions","AI systems that need to understand class discourse for context-aware tutoring","Content moderation systems that flag inappropriate discussion posts"],"limitations":["Discussion thread reconstruction requires multiple API calls; no bulk thread fetch endpoint","Message content returned as HTML — requires parsing to extract plain text","Deleted or hidden posts not returned; cannot audit full discussion history"],"requires":["Canvas API token with discussion_topics:read scope","Course ID","Canvas instance with discussions enabled"],"input_types":["course_id (integer)","discussion_topic_id (integer)"],"output_types":["JSON array of discussion topic objects with title, created_at, user_id","JSON array of discussion entry objects with message (HTML), author, timestamp, parent_id"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-canvas-lms__cap_4","uri":"capability://data.processing.analysis.user.profile.and.account.data.retrieval","name":"user profile and account data retrieval","description":"Fetches user account information including name, email, role, and profile metadata from Canvas. Implements Canvas API user endpoints to retrieve individual user profiles, search users by name or email, and extract role information (student, teacher, admin) for permission-aware operations.","intents":["Look up a student or instructor by name or email to get their Canvas user ID","Retrieve user profile information to personalize AI interactions","Determine a user's role in the system to enforce permission checks"],"best_for":["Multi-user AI systems that need to identify and authenticate Canvas users","Personalization engines that adapt responses based on user role","Administrative tools that need to map Canvas users to external systems"],"limitations":["User search is limited to exact name/email matches or prefix matching; no fuzzy search","Profile data does not include custom user fields or institutional identifiers","User role is course-specific in Canvas; global role determination requires querying all courses"],"requires":["Canvas API token with users:read scope","Canvas instance URL","User ID or searchable identifier (name, email)"],"input_types":["user_id (integer)","search_term (string: name or email)"],"output_types":["JSON user object with id, name, email, login_id, avatar_url","JSON array of user objects matching search criteria"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-canvas-lms__cap_5","uri":"capability://data.processing.analysis.grade.and.assessment.data.aggregation","name":"grade and assessment data aggregation","description":"Aggregates grades across assignments, quizzes, and assessments for individual students or cohorts, computing cumulative scores and grade distributions. Implements Canvas gradebook API calls to fetch grade data, applies weighting rules, and calculates derived metrics like class average and grade percentiles.","intents":["Get a student's current grade in a course including breakdown by assignment type","Calculate class-wide grade statistics (mean, median, distribution) for a course","Identify students at risk based on grade trends or current performance"],"best_for":["Early warning systems that flag struggling students","Grade analytics dashboards that visualize class performance","Adaptive tutoring systems that adjust difficulty based on student grades"],"limitations":["Grade weighting rules are course-specific and may not be exposed via API; manual configuration required","Incomplete submissions (no grade yet) require filtering logic; not automatically excluded","Grade history not available — cannot compute grade trends over time without external logging"],"requires":["Canvas API token with grades:read scope","Course ID and optionally student user IDs","Canvas instance with gradebook enabled"],"input_types":["course_id (integer)","user_id (integer, optional)"],"output_types":["JSON student grade object with current_score, grade_letter, assignment_grades array","JSON course grade statistics with mean, median, std_dev, grade_distribution"],"categories":["data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-canvas-lms__cap_6","uri":"capability://data.processing.analysis.course.content.and.module.navigation","name":"course content and module navigation","description":"Retrieves course modules, lessons, and content items from Canvas, including module structure, item sequencing, and completion tracking. Implements Canvas modules API to fetch module hierarchies, map content items to modules, and track student progress through module completion states.","intents":["Understand the structure of a course (modules, lessons, content items) to provide contextual help","Retrieve specific content items (pages, files, links) from a course module","Track which modules a student has completed to assess progress"],"best_for":["Intelligent tutoring systems that guide students through course content","Progress tracking dashboards that visualize module completion","Content recommendation engines that suggest next steps based on module structure"],"limitations":["Module completion tracking is binary (completed/not completed); no partial progress granularity","Content item types vary widely (pages, files, assignments, discussions); normalization incomplete","Module prerequisites and conditional logic not exposed via API"],"requires":["Canvas API token with modules:read scope","Course ID","Canvas instance with modules enabled"],"input_types":["course_id (integer)","module_id (integer, optional)"],"output_types":["JSON array of module objects with id, name, position, items array","JSON array of module item objects with id, title, type, content_id, completion_requirement"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-canvas-lms__cap_7","uri":"capability://data.processing.analysis.calendar.and.event.data.retrieval","name":"calendar and event data retrieval","description":"Fetches calendar events, assignment due dates, and course-related deadlines from Canvas, aggregating events across courses and filtering by date range. Implements Canvas calendar API to retrieve events, map events to courses, and extract deadline information for scheduling and reminder systems.","intents":["Get all upcoming deadlines across a student's courses","Retrieve calendar events for a specific course or date range","Identify conflicting deadlines or busy periods for workload planning"],"best_for":["Student planning and time management tools","Workload analytics systems that identify deadline conflicts","Notification systems that send deadline reminders"],"limitations":["Calendar API returns events as flat list; no built-in grouping by course or event type","Event descriptions may be truncated; full details require separate API call per event","Recurring events not expanded; agents must handle recurrence rules manually"],"requires":["Canvas API token with calendar:read scope","Canvas instance URL","Date range parameters (optional)"],"input_types":["start_date (ISO 8601 date string)","end_date (ISO 8601 date string)","course_id (integer, optional)"],"output_types":["JSON array of calendar event objects with title, start_at, end_at, course_id, type"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-canvas-lms__cap_8","uri":"capability://data.processing.analysis.file.and.attachment.access.with.metadata","name":"file and attachment access with metadata","description":"Retrieves file metadata, attachment information, and download URLs from Canvas course files and submissions. Implements Canvas files API to list course files, extract file metadata (name, size, MIME type, upload date), and generate temporary download URLs for accessing file contents.","intents":["List all files in a course to understand available resources","Get download URLs for student submission attachments","Extract file metadata to audit course content or track file usage"],"best_for":["Content management systems that mirror Canvas files to external storage","Document analysis tools that need to process course materials","Audit systems that track file access and modifications"],"limitations":["Download URLs are temporary (typically 1 hour expiration); not suitable for long-term linking","File contents not processed — only metadata and URLs provided; requires separate download and parsing","Large file listings (1000+ files) may require pagination; no bulk export endpoint"],"requires":["Canvas API token with files:read scope","Course ID or submission ID","Canvas instance with file storage enabled"],"input_types":["course_id (integer)","submission_id (integer, optional)"],"output_types":["JSON array of file objects with id, filename, size, content_type, created_at, url"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-canvas-lms__cap_9","uri":"capability://data.processing.analysis.announcement.and.notification.retrieval","name":"announcement and notification retrieval","description":"Fetches course announcements, system notifications, and communication messages from Canvas, including announcement content, author, and publication dates. Implements Canvas announcements API to retrieve announcements by course, filter by date, and extract notification metadata for communication tracking.","intents":["Retrieve all announcements in a course to understand instructor communications","Get recent announcements to provide context-aware responses to student questions","Track announcement publication dates to identify communication patterns"],"best_for":["AI tutoring systems that need to reference course announcements in responses","Communication analytics tools that track instructor messaging patterns","Student notification systems that aggregate Canvas announcements"],"limitations":["Announcements returned as HTML; requires parsing to extract plain text","No full-text search; filtering limited to date range and course","Announcement edit history not available; cannot track changes or corrections"],"requires":["Canvas API token with announcements:read scope","Course ID","Canvas instance with announcements enabled"],"input_types":["course_id (integer)","start_date (ISO 8601 date string, optional)","end_date (ISO 8601 date string, optional)"],"output_types":["JSON array of announcement objects with id, title, message (HTML), author_id, posted_at"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":27,"verified":false,"data_access_risk":"high","permissions":["Canvas LMS instance with API access enabled","Valid Canvas API token or OAuth2 credentials","MCP client capable of connecting to stdio-based servers","Canvas API token with courses:read and enrollments:read scopes","Canvas instance URL","Network access to Canvas API endpoints","Canvas API token with rubrics:read and outcomes:read scopes","Assignment ID or rubric ID","Canvas instance with rubrics and outcomes enabled","Canvas API token with assignments:read and submissions:read scopes"],"failure_modes":["Token storage mechanism not specified in available documentation — may lack encryption at rest","No built-in support for multi-tenant Canvas instances (one server per Canvas domain)","Requires manual credential provisioning; no automated OAuth2 flow UI","Pagination handled transparently but may introduce latency for institutions with 1000+ courses","No built-in caching — repeated queries hit Canvas API directly, subject to rate limits","Enrollment data is point-in-time; does not track historical enrollment changes","Rubric structure varies by Canvas version; normalization may be incomplete","Learning outcome associations with rubrics not always explicit; requires manual mapping","Rubric assessment data embedded in submission objects; requires separate query per submission","Submission attachments returned as URLs only — does not download or process file contents","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.05,"quality":0.32,"ecosystem":0.39999999999999997,"match_graph":0.25,"freshness":0.52,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.15,"match_graph":0.23,"freshness":0.12}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-06-17T09:51:02.371Z","last_scraped_at":"2026-05-03T14:00:15.503Z","last_commit":null},"community":{"stars":null,"forks":null,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=canvas-lms","compare_url":"https://unfragile.ai/compare?artifact=canvas-lms"}},"signature":"Ft4DyjBa0t393BGeJKDfpqtTZ9j8o/AFoCZaWPJXR4EahT1fIn7xaJt15BkA9Q0GNiygo8VQjKmqcHA1Q18eAg==","signedAt":"2026-06-20T14:07:55.465Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/canvas-lms","artifact":"https://unfragile.ai/canvas-lms","verify":"https://unfragile.ai/api/v1/verify?slug=canvas-lms","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}