{"name":"io.github.vishalsachdev/canvas-mcp","slug":"vishalsachdev-canvas-mcp","title":null,"description":"Canvas LMS integration for students and educators with optional privacy controls","url":"https://mcp.market/server/vishalsachdev-canvas-mcp","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":41,"stars":256,"forks":86,"downloads_week":null,"last_push_at":"2026-09-20T17:47:29.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/vishalsachdev/canvas-mcp","website":"https://canvas-mcp.illinihunt.org/","version":"1.12.0","remotes":[],"packages":[{"registryType":"pypi","identifier":"canvas-mcp","version":"1.12.0","transport":{"type":"stdio"}}],"tools":[{"name":"_cap","description":"Truncate text to at most max_len characters total, sentinel included.","write_action":true,"price_micros":0,"input_schema":null},{"name":"add_module_item","description":"Add an item to a module.","write_action":false,"price_micros":0,"input_schema":null},{"name":"analyze_peer_review_quality","description":"Analyze the quality and content of peer review comments.","write_action":false,"price_micros":0,"input_schema":null},{"name":"assign_peer_review","description":"Manually assign a peer review to a student for a specific assignment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"associate_rubric","description":"Associate an existing rubric with an assignment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bulk_delete_announcements","description":"Delete multiple announcements by ID. Two-step: preview first, then confirm with the token.","write_action":true,"price_micros":0,"input_schema":null},{"name":"bulk_grade_submissions","description":"Grade multiple submissions efficiently with concurrent processing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"bulk_update_pages","description":"Update settings for multiple pages at once.","write_action":true,"price_micros":0,"input_schema":null},{"name":"check_enrollment","description":"Check whether a specific campus login ID is enrolled in a course.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_announcement","description":"Create a new announcement for a course with optional scheduling.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_assignment","description":"Create a new assignment in a course.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_content_migration","description":"Preview or confirm a full course-copy migration request.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_discussion_topic","description":"Create a new discussion topic for a course.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_module","description":"Create a new module in a course.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_page","description":"Create a new page in a Canvas course.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_rubric","description":"Create a new rubric in a course, optionally associating it with an assignment.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_rubric_from_csv","description":"Create one or more rubrics in a course from a CSV string.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_student_anonymization_map","description":"Create a local CSV file mapping real student data to anonymous IDs for a course.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_announcement_with_confirmation","description":"Delete an announcement. Two-step: preview first, then confirm with the token.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_announcements_by_criteria","description":"Delete announcements matching criteria. Two-step: preview first, then confirm with the token.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_assignment_with_confirmation","description":"Delete an assignment. Two-step: preview first, then confirm with the token.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_module","description":"Delete a module. Two-step: preview first, then confirm with the token.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_module_item","description":"Remove an item from a module. Two-step: preview first, then confirm with the token.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_page","description":"Delete a page. Two-step: preview first, then confirm with the token.","write_action":true,"price_micros":0,"input_schema":null},{"name":"download_course_file","description":"Download a file from a Canvas course to the local filesystem.","write_action":false,"price_micros":0,"input_schema":null},{"name":"edit_page_content","description":"Edit the content of a specific page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"execute_typescript","description":"Execute TypeScript code in a Node.js environment with access to Canvas API.","write_action":true,"price_micros":0,"input_schema":null},{"name":"extract_peer_review_dataset","description":"Export all peer review data in various formats for analysis.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fetch_ufixit_report","description":"Fetch UFIXIT accessibility report from Canvas course pages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fix_accessibility_issues","description":"Auto-fix accessibility issues in Canvas course content.","write_action":false,"price_micros":0,"input_schema":null},{"name":"format_accessibility_summary","description":"Format parsed violations into a human-readable summary.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_peer_review_feedback_report","description":"Create instructor-ready reports on peer review quality.","write_action":true,"price_micros":0,"input_schema":null},{"name":"generate_peer_review_report","description":"Generate peer review completion report with summary, analytics, and follow-up recommendations.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_anonymization_status","description":"Get current data anonymization status and statistics.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_assignment_analytics","description":"Get detailed analytics about student performance on a specific assignment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_assignment_details","description":"Get detailed information about a specific assignment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_content_migration_status","description":"Read one content migration and its current progress snapshot.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_conversation_details","description":"Get detailed conversation information with messages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_course_content_overview","description":"Get a comprehensive overview of course content including pages, modules, and syllabus.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_course_details","description":"Get detailed information about a specific course.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_course_structure","description":"Get the full module and item structure for a course in a single call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_discussion_entry_details","description":"Get detailed information about a specific discussion entry including all its replies.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_discussion_topic_details","description":"Get detailed information about a specific discussion topic.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_discussion_with_replies","description":"Enhanced function to get discussion entries with optional reply fetching.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_front_page","description":"Get the front page content for a course.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_my_course_grades","description":"Get your current grades across all enrolled courses.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_my_enrollments","description":"List the courses YOU are enrolled in, with your role in each.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_my_peer_reviews_todo","description":"Get peer reviews YOU need to complete.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_my_profile","description":"Get YOUR own Canvas identity (user ID, name, login ID).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_my_submission","description":"Get your own submission for an assignment, including attempts used.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_my_submission_status","description":"Get your submission status for assignments.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_my_todo_items","description":"Get your Canvas TODO list.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_my_upcoming_assignments","description":"Get your upcoming assignments across all courses.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_page_content","description":"Get the full content body of a specific page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_page_details","description":"Get a specific page's metadata plus a short text preview.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_peer_review_assignments","description":"Get peer review assignment mapping showing who reviews whom with completion status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_peer_review_comments","description":"Retrieve actual comment text for peer reviews on an assignment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_peer_review_completion_analytics","description":"Get peer review completion analytics with student-level breakdown and summary stats.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_peer_review_followup_list","description":"Get prioritized list of students needing follow-up on peer review completion.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_rubric","description":"Get detailed rubric criteria, ratings, and points.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_rubric_assessment","description":"Get rubric assessment scores for a specific submission.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_student_analytics","description":"Get per-student engagement analytics: page views, participations, and on-time/late/missing assignment counts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_syllabus","description":"Get the complete Canvas Syllabus tab content for a course, untruncated.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_unread_count","description":"Get number of unread conversations.","write_action":false,"price_micros":0,"input_schema":null},{"name":"grade_with_rubric","description":"Submit grades using rubric criteria.","write_action":true,"price_micros":0,"input_schema":null},{"name":"identify_problematic_peer_reviews","description":"Flag reviews that may need instructor attention.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_announcements","description":"List a course's announcements, and nothing else.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_assignments","description":"List assignments for a specific course.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_code_api_modules","description":"List all available TypeScript modules in the code execution API.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_conversations","description":"List conversations for the current user.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_course_files","description":"List files in a Canvas course with optional search.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_courses","description":"List courses for the authenticated user.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_discussion_entries","description":"List discussion entries (posts) for a specific discussion topic with optional full content and replies.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_discussion_topics","description":"List discussion topics for a specific course.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_groups","description":"List all groups and their members for a specific course.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_module_items","description":"List items within a specific module, including pages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_modules","description":"List all modules in a course.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_pages","description":"List pages for a specific course.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_peer_reviews","description":"List all peer review assignments for a specific assignment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_rubrics","description":"List all rubrics in a specific course with optional detailed criteria.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_submissions","description":"List submissions for a specific assignment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_users","description":"List users enrolled in a specific course.","write_action":false,"price_micros":0,"input_schema":null},{"name":"mark_conversations_read","description":"Mark multiple conversations as read.","write_action":false,"price_micros":0,"input_schema":null},{"name":"parse_ufixit_violations","description":"Parse UFIXIT report content to extract accessibility violations.","write_action":false,"price_micros":0,"input_schema":null},{"name":"post_discussion_entry","description":"Post a new top-level entry to a discussion topic.","write_action":true,"price_micros":0,"input_schema":null},{"name":"read_course_file","description":"Read a file from a Canvas course and return its content as base64.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reply_to_discussion_entry","description":"Reply to a student's discussion entry/comment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"scan_course_content_accessibility","description":"Scan Canvas course content for basic accessibility issues.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_canvas_tools","description":"Search available Canvas tools by keyword — both the registered MCP tools (e.g. list_peer_reviews, create_assignment) and the TypeScript code-execution API used by execute_typescript().","write_action":false,"price_micros":0,"input_schema":null},{"name":"send_bulk_messages_from_list","description":"Send customized messages to multiple recipients using templates.","write_action":true,"price_micros":0,"input_schema":null},{"name":"send_conversation","description":"Send messages to students via Canvas conversations.","write_action":true,"price_micros":0,"input_schema":null},{"name":"send_peer_review_followup_campaign","description":"Complete workflow: analyze peer reviews and send targeted reminders.","write_action":true,"price_micros":0,"input_schema":null},{"name":"send_peer_review_inbox_messages","description":"Send direct Canvas Inbox messages about incomplete peer reviews.","write_action":true,"price_micros":0,"input_schema":null},{"name":"submit_assignment","description":"Submit one of YOUR OWN assignments. Consumes an attempt.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_assignment","description":"Update an existing assignment in a course.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_discussion_topic","description":"Update an existing discussion topic or announcement.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_module","description":"Update an existing module's settings.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_module_item","description":"Update an existing module item.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_page_settings","description":"Update settings for an existing page (without changing content).","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_course_file","description":"Upload a file to Canvas course storage.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-09-20T20:57:14.146Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T20:57:14.003Z","components":{"code":{"score":20,"max":25,"notes":["82 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.shell-true","severity":"medium","component":"code","title":"subprocess with shell=True","evidence":"canvas_mcp-1.12.0/src/canvas_mcp/tools/code_execution.py: … asyncio.create_subprocess_exec without shell=True. This function finds the underlying…"}],"inputs":{"packages":[{"registryType":"pypi","identifier":"canvas-mcp","version":"1.12.0","found":true,"dependencyCount":10,"publishedAt":"2026-08-30T18:37:53.867456Z","repositoryUrl":"https://github.com/vishalsachdev/canvas-mcp"}],"repo":{"found":true,"owner":"vishalsachdev","repo":"canvas-mcp","archived":false,"pushedAt":"2026-09-20T17:47:29Z","stars":256,"forks":86,"openIssues":8,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/42612679?v=4","ownerCreatedAt":"2018-08-22T14:05:43Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/42612679?v=4&s=128","source":"github"},"presence":{"stars":256,"forks":86,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-20T17:47:29.000Z","score":41}}}},"grade_history":[],"reviews":[]}