{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"npm_npm-canvas-mcp-tool","slug":"npm-canvas-mcp-tool","name":"canvas-mcp-tool","type":"mcp","url":"https://www.npmjs.com/package/canvas-mcp-tool","page_url":"https://unfragile.ai/npm-canvas-mcp-tool","categories":["mcp-servers"],"tags":["canvas","canvas-mcp-tool","canvas-lms","mcp","model-context-protocol","cli","api","education","lms","tool"],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"npm_npm-canvas-mcp-tool__cap_0","uri":"capability://tool.use.integration.canvas.lms.api.integration.via.mcp.protocol","name":"canvas lms api integration via mcp protocol","description":"Exposes Canvas Learning Management System REST API endpoints through the Model Context Protocol (MCP) server interface, enabling Claude and other MCP-compatible clients to authenticate with Canvas instances and execute API calls without direct HTTP handling. Uses MCP's tool-calling schema to map Canvas API operations (courses, assignments, grades, users) into callable functions with standardized request/response formatting.","intents":["I need Claude to query my Canvas course data and retrieve student information programmatically","I want to automate Canvas operations like posting grades or creating assignments through an AI agent","I need to build an educational tool that reads Canvas data without managing API authentication myself"],"best_for":["educators building AI tutoring agents integrated with Canvas","EdTech developers prototyping Canvas automation workflows","students building personal Canvas data analysis tools"],"limitations":["Requires valid Canvas API token with appropriate institutional permissions — token scope limitations restrict which operations are available","No built-in rate limiting or request queuing — high-volume operations may hit Canvas API throttling","Canvas API version compatibility depends on institution's Canvas deployment version","No local caching of Canvas data — every request hits the live API"],"requires":["Node.js 16+","Canvas instance with API access enabled","Valid Canvas API token (generated from Canvas account settings)","MCP-compatible client (Claude desktop, or custom MCP host)"],"input_types":["Canvas API endpoint paths","Query parameters (course_id, user_id, assignment_id)","JSON request bodies for POST/PUT operations"],"output_types":["JSON course objects","JSON user/student records","JSON assignment and submission data","JSON grade records"],"categories":["tool-use-integration","education-lms"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"npm_npm-canvas-mcp-tool__cap_1","uri":"capability://data.processing.analysis.canvas.course.and.assignment.data.retrieval","name":"canvas course and assignment data retrieval","description":"Implements read-only access to Canvas course structures, assignments, submissions, and metadata through MCP tool functions that query Canvas REST endpoints (/api/v1/courses, /api/v1/courses/:id/assignments, /api/v1/courses/:id/submissions). Returns structured JSON containing course hierarchies, assignment rubrics, due dates, submission status, and student enrollment data with pagination support for large datasets.","intents":["I want to fetch all assignments in a course and their due dates to build a study schedule","I need to retrieve student submission data to analyze class performance patterns","I want to list all courses a user is enrolled in and their current grades"],"best_for":["students building personal Canvas dashboards or study tools","instructors analyzing course data for insights","researchers studying Canvas usage patterns"],"limitations":["Read-only access — cannot modify assignments or grades through this capability","Pagination required for courses/assignments with 100+ items — requires manual iteration through pages","Submission data includes only metadata; file contents require separate file download API calls","Real-time updates not supported — data reflects Canvas state at query time, no webhooks or subscriptions"],"requires":["Canvas API token with 'courses:read' and 'assignments:read' scopes","Course ID or user ID to query against","Network connectivity to Canvas instance"],"input_types":["course_id (integer)","user_id (integer)","query parameters (include[], per_page, page)"],"output_types":["JSON course objects with name, code, enrollment_term_id","JSON assignment objects with title, description, due_at, points_possible","JSON submission objects with submission_type, submitted_at, grade"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"npm_npm-canvas-mcp-tool__cap_2","uri":"capability://tool.use.integration.canvas.grade.and.submission.management","name":"canvas grade and submission management","description":"Provides write access to Canvas grading operations through MCP tool functions that call Canvas PUT/POST endpoints (/api/v1/courses/:id/assignments/:id/submissions/:id, /api/v1/courses/:id/assignments/:id/submissions/:id/grade). Supports posting grades, adding comments to submissions, updating submission status, and bulk grading operations with validation against assignment rubrics and point scales.","intents":["I want to post grades for all submissions in an assignment and add feedback comments","I need to bulk update submission statuses (mark as graded, complete, etc.)","I want to automate grade calculation based on rubric criteria and post results to Canvas"],"best_for":["instructors automating grading workflows","teaching assistants managing large class sections","EdTech platforms integrating Canvas grading into their assessment engines"],"limitations":["Requires 'assignments:grade' permission scope — not all Canvas tokens have grading rights","No transaction support — bulk operations fail per-item, requiring retry logic for partial failures","Grade validation happens server-side; invalid grades (exceeding point_possible) are rejected without preview","Comments are posted as plain text — no rich formatting or file attachments in feedback"],"requires":["Canvas API token with 'assignments:grade' scope","Instructor or TA role in the course","Valid assignment_id and submission_id","Grade value within assignment's point_possible range"],"input_types":["submission_id (integer)","grade (number or text)","comment (string)","submission status (string: 'graded', 'pending_review')"],"output_types":["JSON submission object with updated grade and comment","HTTP 200 success response with updated submission data","Error responses with validation messages"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"npm_npm-canvas-mcp-tool__cap_3","uri":"capability://data.processing.analysis.canvas.user.and.enrollment.data.access","name":"canvas user and enrollment data access","description":"Retrieves Canvas user profiles, enrollment records, and role information through MCP tool functions calling Canvas endpoints (/api/v1/courses/:id/enrollments, /api/v1/users/:id, /api/v1/accounts/:id/users). Returns structured user data including names, email addresses, enrollment status, roles (student/instructor/ta), and course sections with filtering by enrollment type and status.","intents":["I need to list all students in my course and their enrollment status","I want to find a specific student's email and contact information from Canvas","I need to identify which students are enrolled in multiple sections of the same course"],"best_for":["instructors managing course rosters and communications","administrators auditing enrollment data","student support tools needing to verify enrollment status"],"limitations":["Email addresses only visible if user has 'users:read' permission scope — restricted by Canvas privacy settings","Enrollment data is snapshot at query time — no historical enrollment changes or audit trail","Cannot filter by custom user fields — only standard Canvas user attributes available","Bulk user operations limited to ~100 users per request due to API pagination"],"requires":["Canvas API token with 'users:read' scope","Course ID or account ID to query against","Appropriate institutional permissions to view user data"],"input_types":["course_id (integer)","user_id (integer)","enrollment_type (string: 'student', 'teacher', 'ta')","enrollment_state (string: 'active', 'invited', 'rejected')"],"output_types":["JSON user objects with id, name, email, login_id","JSON enrollment objects with user_id, course_id, role, enrollment_state","JSON section objects with course_section_id, name"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"npm_npm-canvas-mcp-tool__cap_4","uri":"capability://tool.use.integration.mcp.server.lifecycle.and.configuration.management","name":"mcp server lifecycle and configuration management","description":"Implements the MCP server runtime that handles client connections, tool registration, and request routing. Uses Node.js MCP SDK to expose Canvas operations as standardized MCP tools with JSON schema definitions, manages authentication token storage (environment variables or config files), and handles server startup/shutdown with error logging and connection state management.","intents":["I want to run a Canvas MCP server locally and connect Claude Desktop to it","I need to configure the server with my Canvas instance URL and API token","I want to deploy this MCP server to a cloud environment for persistent access"],"best_for":["developers integrating Canvas with Claude Desktop or custom MCP hosts","teams deploying Canvas automation infrastructure","educators setting up local Canvas integration tools"],"limitations":["Single Canvas instance per server — requires separate server instances for multiple Canvas deployments","Token management is manual — no built-in token refresh or rotation logic","No built-in logging or monitoring — requires external observability tools for production deployments","Synchronous request handling — concurrent requests may queue if Canvas API is slow"],"requires":["Node.js 16+","npm or yarn package manager","Canvas API token stored in environment variable (CANVAS_API_TOKEN) or config file","Canvas instance URL (CANVAS_URL environment variable)"],"input_types":["environment variables (CANVAS_API_TOKEN, CANVAS_URL)","MCP client connection requests","tool invocation requests from MCP clients"],"output_types":["MCP server initialization response","Tool schema definitions (JSON)","Tool execution results (JSON)","Error responses with diagnostic information"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"npm_npm-canvas-mcp-tool__cap_5","uri":"capability://safety.moderation.canvas.api.error.handling.and.validation","name":"canvas api error handling and validation","description":"Implements error handling for Canvas API responses with mapping of HTTP status codes to user-friendly error messages, request validation against Canvas API constraints (e.g., grade ranges, required fields), and retry logic for transient failures. Catches Canvas-specific errors (invalid course_id, permission denied, rate limiting) and translates them into MCP error responses with diagnostic context.","intents":["I want to know why a grade posting failed (e.g., exceeds point_possible) with clear error messages","I need the server to retry failed requests automatically when Canvas is temporarily unavailable","I want to understand permission errors when accessing restricted Canvas data"],"best_for":["developers building robust Canvas automation workflows","production deployments requiring reliability and diagnostics","users needing clear feedback on why operations failed"],"limitations":["Retry logic is basic — no exponential backoff or jitter, may overwhelm Canvas API during outages","Error messages are Canvas API responses — may be technical and not user-friendly","No circuit breaker pattern — repeated failures don't prevent subsequent requests","Validation is post-request — some invalid inputs only caught by Canvas server, not client-side"],"requires":["Canvas API token with appropriate scopes for the operation","Valid Canvas instance URL","Network connectivity to Canvas"],"input_types":["Canvas API HTTP responses (status codes, error bodies)","Request parameters (grades, user IDs, etc.)"],"output_types":["MCP error responses with error codes and messages","Diagnostic context (Canvas error details, HTTP status)","Retry indicators (transient vs permanent failures)"],"categories":["safety-moderation","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":27,"verified":false,"data_access_risk":"high","permissions":["Node.js 16+","Canvas instance with API access enabled","Valid Canvas API token (generated from Canvas account settings)","MCP-compatible client (Claude desktop, or custom MCP host)","Canvas API token with 'courses:read' and 'assignments:read' scopes","Course ID or user ID to query against","Network connectivity to Canvas instance","Canvas API token with 'assignments:grade' scope","Instructor or TA role in the course","Valid assignment_id and submission_id"],"failure_modes":["Requires valid Canvas API token with appropriate institutional permissions — token scope limitations restrict which operations are available","No built-in rate limiting or request queuing — high-volume operations may hit Canvas API throttling","Canvas API version compatibility depends on institution's Canvas deployment version","No local caching of Canvas data — every request hits the live API","Read-only access — cannot modify assignments or grades through this capability","Pagination required for courses/assignments with 100+ items — requires manual iteration through pages","Submission data includes only metadata; file contents require separate file download API calls","Real-time updates not supported — data reflects Canvas state at query time, no webhooks or subscriptions","Requires 'assignments:grade' permission scope — not all Canvas tokens have grading rights","No transaction support — bulk operations fail per-item, requiring retry logic for partial failures","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.05,"quality":0.22,"ecosystem":0.5000000000000001,"match_graph":0.25,"freshness":0.6,"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-05-24T12:16:23.903Z","last_scraped_at":"2026-04-22T08:11:22.524Z","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=npm-canvas-mcp-tool","compare_url":"https://unfragile.ai/compare?artifact=npm-canvas-mcp-tool"}},"signature":"JmSoO/HSYXG2tuAoIicGeij5eJQZHWetgqLEIvt4KdujG9w+/RTlGTqkPY3ltqTZof2p404GsKTz9Q1WVQiVCw==","signedAt":"2026-06-21T10:45:29.990Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/npm-canvas-mcp-tool","artifact":"https://unfragile.ai/npm-canvas-mcp-tool","verify":"https://unfragile.ai/api/v1/verify?slug=npm-canvas-mcp-tool","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"}}