Install
$ agentstack add mcp-r1ckyin-canvas-ed-mcp ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README — it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming — see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps — measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Canvas + Ed Discussion MCP Server
[](https://python.org) [](https://modelcontextprotocol.io) [](https://www.sydney.edu.au/) [](LICENSE)
An MCP server for accessing Canvas LMS and Ed Discussion platforms
[English](#features) | [中文](#中文)
Features
49 tools across Canvas LMS, Ed Discussion, and Gradescope.
Canvas — course content (read)
canvas_list_courses · canvas_get_course · canvas_list_announcements · canvas_list_assignments · canvas_get_grades · canvas_list_files · canvas_get_file_content · canvas_list_pages · canvas_get_page · canvas_list_modules · canvas_list_module_items · canvas_get_unit_outline_url · fetch_unit_outline (USYD unit outline parser) · canvas_list_calendar · canvas_get_syllabus · canvas_download_file
Canvas — student dashboard (read)
canvas_get_todo · canvas_get_upcoming · canvas_get_missing_submissions · canvas_get_submission_status (per-course, grouped by state) · canvas_list_discussions · canvas_get_discussion (full threaded view) · canvas_get_all_grades (all courses, one call) · canvas_get_my_submission (marker feedback + rubric) · canvas_get_peer_reviews
Canvas — write
canvas_submit_assignment (text / URL / file upload) · canvas_post_discussion_entry (post or reply)
Ed Discussion — read
ed_get_user_info · ed_list_courses · ed_list_threads · ed_get_thread · ed_search_threads · ed_list_lessons · ed_get_lesson (slides + content) · ed_list_resources (lecture slides / links / files by category) · ed_download_resource (save resource files locally, up to 50MB)
Ed Discussion — write
ed_post_thread · ed_edit_thread · ed_post_comment (comment or answer) · ed_reply_to_comment · ed_accept_answer · ed_thread_action (star/unstar; staff: pin/lock/endorse)
Ed Workspaces
ed_list_workspaces · ed_create_workspace · ed_update_workspace (rename / sharing) · ed_delete_workspace
Write content is markdown — automatically converted to Ed's XML document format (headings, bold/italic, code spans/blocks, lists, links, math, callouts).
Gradescope (read)
gradescope_list_courses · gradescope_list_assignments (due dates, submission status, grades)
Cross-platform
verify_assessment_coverage (Unit Outline vs Canvas assignments)
Installation
1. Install Dependencies
pip install -r requirements.txt
2. Configure Claude Desktop
Edit the Claude Desktop configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Add the following configuration:
{
"mcpServers": {
"canvas-ed-mcp": {
"command": "python",
"args": [
"/your/full/path/canvas_ed_mcp.py"
],
"env": {
"CANVAS_API_TOKEN": "your_Canvas_API_Token",
"ED_API_TOKEN": "your_Ed_API_Token",
"GRADESCOPE_EMAIL": "your_email (optional, for Gradescope tools)",
"GRADESCOPE_PASSWORD": "your_password (optional)"
}
}
}
}
> Gradescope has no official API — tools use the maintained > gradescopeapi scraping library. > University SSO accounts must first set a native Gradescope password via > the "forgot password" flow on gradescope.com.
3. Restart Claude Desktop
Usage Examples
Canvas Operations
List all my Canvas courses
Get announcements for course ID 12345
View my assignment list
Ed Discussion Operations
List my Ed Discussion courses
Get the latest discussion threads for Ed course ID 12345
Search for threads about "assignment" in Ed course
Get detailed content and replies for Ed thread ID 67890
Tool Reference
All 49 tools with their input parameters, taken from the Pydantic input models in canvas_ed_mcp.py (same grouping as [Features](#features)). Enum types:
ResponseFormat:markdown(default) orjsonEnrollmentState:active(default),completed, orallSubmissionType:online_text_entry,online_url, oronline_uploadThreadFilter:all(default),unread,unanswered, orstarredThreadSort:new(default),old,top, orhotEdThreadType:post,question(default), orannouncementEdCommentType:comment(default) oranswerEdThreadAction:star,unstar,pin,unpin,lock,unlock,endorse, orunendorse
Canvas — course content (read)
| Tool | Parameters | Description | | --- | --- | --- | | canvas_list_courses | enrollment_state (EnrollmentState, optional); limit (int, optional); response_format (ResponseFormat, optional) | Get all courses the current user is enrolled in on Canvas. | | canvas_get_course | course_id (str, required); response_format (ResponseFormat, optional) | Get detailed information for a specific Canvas course. | | canvas_list_announcements | course_id (str, required); limit (int, optional); response_format (ResponseFormat, optional) | Get announcements for a specific Canvas course. | | canvas_list_assignments | course_id (str, required); include_submissions (bool, optional); limit (int, optional); response_format (ResponseFormat, optional) | Get all assignments for a specific Canvas course. | | canvas_get_grades | course_id (str, optional); include_assignment_groups (bool, optional); response_format (ResponseFormat, optional) | Get current user's grades on Canvas. | | canvas_list_files | course_id (str, required); content_types (List[str], optional); sort (str, optional); search_term (str, optional); limit (int, optional); response_format (ResponseFormat, optional) | Get the file list for a Canvas course. | | canvas_get_file_content | file_id (str, required); response_format (ResponseFormat, optional) | Get file metadata and download URL for a Canvas file. | | canvas_list_pages | course_id (str, required); sort (str, optional); search_term (str, optional); limit (int, optional); response_format (ResponseFormat, optional) | Get the wiki page list for a Canvas course. | | canvas_get_page | course_id (str, required); page_url_or_id (str, required); response_format (ResponseFormat, optional) | Get the full content of a Canvas wiki page. | | canvas_list_modules | course_id (str, required); include_items (bool, optional); search_term (str, optional); limit (int, optional); response_format (ResponseFormat, optional) | Get the module list for a Canvas course (weekly/topic structure). | | canvas_list_module_items | course_id (str, required); module_id (str, required); include_content_details (bool, optional); response_format (ResponseFormat, optional) | Get items within a specific Canvas module. | | canvas_get_unit_outline_url | course_id (str, required); response_format (ResponseFormat, optional) | Get the Unit Outline URL for a Canvas course (University of Sydney). | | fetch_unit_outline | unit_outline_url (str, required); response_format (ResponseFormat, optional) | Fetch and parse a University of Sydney Unit Outline page. | | canvas_list_calendar | context_codes (List[str], optional); event_type (str, optional); start_date (str, optional); end_date (str, optional); limit (int, optional); response_format (ResponseFormat, optional) | Get calendar events and assignment due dates from Canvas. | | canvas_get_syllabus | course_id (str, required); response_format (ResponseFormat, optional) | Get the syllabus for a Canvas course. | | canvas_download_file | file_id (str, required); save_path (str, optional) | Download a Canvas file to the local filesystem. |
Canvas — student dashboard (read)
| Tool | Parameters | Description | | --- | --- | --- | | canvas_get_todo | limit (int, optional); response_format (ResponseFormat, optional) | Get the current user's Canvas to-do list across all courses. | | canvas_get_upcoming | response_format (ResponseFormat, optional) | Get the current user's upcoming Canvas events and assignment deadlines. | | canvas_get_missing_submissions | course_ids (List[str], optional); limit (int, optional); response_format (ResponseFormat, optional) | Get assignments that are past due and still unsubmitted. | | canvas_get_submission_status | course_id (str, required); response_format (ResponseFormat, optional) | Get per-assignment submission status for a Canvas course. | | canvas_list_discussions | course_id (str, required); limit (int, optional); response_format (ResponseFormat, optional) | Get discussion topics for a Canvas course. | | canvas_get_discussion | course_id (str, required); topic_id (str, required); response_format (ResponseFormat, optional) | Get a Canvas discussion topic with its full threaded replies. | | canvas_get_all_grades | enrollment_state (EnrollmentState, optional); response_format (ResponseFormat, optional) | Get current grades for ALL your Canvas courses in one call. | | canvas_get_my_submission | course_id (str, required); assignment_id (str, required); response_format (ResponseFormat, optional) | Get your own submission for an assignment, including marker feedback: score, grade, submission comments, and rubric assessment. | | canvas_get_peer_reviews | course_id (str, required); response_format (ResponseFormat, optional) | Get peer reviews assigned TO YOU in a Canvas course. |
Canvas — write
| Tool | Parameters | Description | | --- | --- | --- | | canvas_submit_assignment | course_id (str, required); assignment_id (str, required); submission_type (SubmissionType, required); body (str, optional); url (str, optional); file_paths (List[str], optional); comment (str, optional) | Submit a Canvas assignment on behalf of the current user. | | canvas_post_discussion_entry | course_id (str, required); topic_id (str, required); message (str, required); reply_to_entry_id (str, optional) | Post a new entry (or a reply to an existing entry) in a Canvas discussion. |
Ed Discussion — read
| Tool | Parameters | Description | | --- | --- | --- | | ed_get_user_info | response_format (ResponseFormat, optional) | Get current Ed Discussion user information. | | ed_list_courses | year (str, optional); session (str, optional); response_format (ResponseFormat, optional) | Get all courses the current user has on Ed Discussion. | | ed_list_threads | course_id (int, required); limit (int, optional); filter_type (ThreadFilter, optional); category (str, optional); sort (ThreadSort, optional); offset (int, optional); response_format (ResponseFormat, optional) | Get discussion thread list for a specific Ed course. | | ed_get_thread | thread_id (int, required); response_format (ResponseFormat, optional) | Get detailed content of a single Ed Discussion thread, including all replies and answers. | | ed_search_threads | course_id (int, required); query (str, required); limit (int, optional); response_format (ResponseFormat, optional) | Search threads in an Ed Discussion course. | | ed_list_lessons | course_id (int, required); response_format (ResponseFormat, optional) | Get the lesson list for an Ed course, grouped by module. | | ed_get_lesson | lesson_id (int, required); include_slide_content (bool, optional); response_format (ResponseFormat, optional) | Get detailed content of a single Ed Lesson, including all slides. | | ed_list_resources | course_id (int, required); response_format (ResponseFormat, optional) | List the Resources tab of an Ed course (lecture slides, links, files). | | ed_download_resource | resource_id (int, required); save_path (str, optional) | Download an Ed course resource file (lecture slides, handouts) to the local filesystem. |
Ed Discussion — write
| Tool | Parameters | Description | | --- | --- | --- | | ed_post_thread | course_id (int, required); title (str, required); content (str, required); thread_type (EdThreadType, optional); category (str, required); subcategory (str, optional); is_private (bool, optional); is_anonymous (bool, optional) | Post a new thread to an Ed Discussion course forum. | | ed_edit_thread | thread_id (int, required); title (str, optional); content (str, optional); category (str, optional); subcategory (str, optional) | Edit an existing Ed Discussion thread (typically your own). | | ed_post_comment | thread_id (int, required); content (str, required); comment_type (EdCommentType, optional); is_private (bool, optional); is_anonymous (bool, optional) | Post a comment or an answer on an Ed Discussion thread. | | ed_reply_to_comment | comment_id (int, required); content (str, required); is_private (bool, optional); is_anonymous (bool, optional) | Reply to an existing comment on an Ed Discussion thread. | | ed_accept_answer | thread_id (int, required); comment_id (int, required) | Accept an answer on your Ed question thread, marking it resolved. | | ed_thread_action | thread_id (int, required); action (EdThreadAction, required) | Toggle a state on an Ed thread: star/unstar (student bookmark), pin/unpin, lock/unlock, endorse/unendorse (these six require staff role). |
Ed Workspaces
| Tool | Parameters | Description | | --- | --- | --- | | ed_list_workspaces | course_id (int, required); response_format (ResponseFormat, optional) | List workspaces (cloud IDE instances) of an Ed course. | | ed_create_workspace | course_id (int, required); title (str, required); workspace_type (str, optional) | Create a new workspace (cloud IDE instance) in an Ed course. | | ed_update_workspace | workspace_id (str, required); title (str, optional); is_public (bool, optional); public_write (bool, optional) | Update an Ed workspace you own (rename or change sharing). | | ed_delete_workspace | workspace_id (str, required) | Permanently delete an Ed workspace you own. |
Gradescope (read)
| Tool | Parameters | Description | | --- | --- | --- | | gradescope_list_courses | response_format (ResponseFormat, optional) | Get all Gradescope courses for the configured account. | | gradescope_list_assignments | course_id (str, required); response_format (ResponseFormat, optional) | Get all assignments in a Gradescope course with due dates, submission status, and grades. |
Cross-platform
| Tool | Parameters | Description | | --- | --- | --- | | verify_assessment_coverage | course_id (str, required); response_format (ResponseFormat, optional) | Cross-verify assessment coverage between Unit Outline and Canvas assignments. |
API Token Information
Canvas API Token
- Source: Canvas → Account → Settings → Approved Integrations → + New Access Token
Ed Discussion API Token
- Source: Ed Discussion → Settings → API
- Note: Ed API is an unofficial beta version, endpoints may change
Workflow Examples
View All Course Discussions
- First get Ed course list:
ed_list_courses - Note the Ed course ID of the course you're interested in
- Get threads for that course:
ed_list_threads(using course ID) - View specific thread details:
ed_get_thread(using thread ID)
Check Assignment Due Dates
- Get Canvas course list:
canvas_list_courses - Get course assignments:
canvas_list_assignments(using Canvas course ID)
Troubleshooting
Ed API Errors
401 Authentication Failed
- Check if Ed API token is correct
- Confirm token hasn't expired
404 Resource Not Found
- Ed course ID and Canvas course ID are different
- Use
ed_list_coursesto get the correct Ed course ID
Canvas API Errors
404 Resource Not Found
- Check if Canvas course ID is correct
- Confirm you have permission to access the course
Technical Notes
Ed API Endpoints
Ed Discussion API is unofficial and b
…
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: r1ckyIn
- Source: r1ckyIn/canvas-ed-mcp
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.