name: canvas-parent-mcp description: This skill should be used when the user asks about Canvas LMS data — their own student account or any observed student. Triggers on phrases like "check Canvas", "what's my grade", "Canvas inbox", "what's due", "missing assignments", "Canvas LMS", "Instructure", "course announcements", "syllabus", or any request about courses, assignments, grades, conversations, announcements, planner items, or files in Canvas.
canvas-parent-mcp
MCP server for Canvas LMS (Instructure) — read courses, grades, assignments, announcements, planner items, and conversations; download course files. Mirrors the parent/observer scope of the sibling infinitecampus-mcp.
Setup
Option A — npx (recommended)
Add to .mcp.json in your project or ~/.claude/mcp.json:
{
"mcpServers": {
"canvas": {
"command": "npx",
"args": ["-y", "canvas-parent-mcp"],
"env": {
"CANVAS_BASE_URL": "https://cms.instructure.com"
}
}
}
}
With the fetchproxy extension installed and a signed-in Canvas tab, that's enough — the MCP reads your session cookies at startup. Add CANVAS_TOKEN, CANVAS_CLIENT_*/CANVAS_REFRESH_TOKEN, or CANVAS_USERNAME/CANVAS_PASSWORD to the env block if you'd rather use one of those modes.
Option B — from source
git clone https://github.com/chrischall/canvas-parent-mcp
cd canvas-parent-mcp
npm install && npm run build
Authentication
fetchproxy fallback (recommended, zero-config). Set only CANVAS_BASE_URL. Install the fetchproxy browser extension, sign into your Canvas instance once. The MCP reads canvas_session + pseudonym_credentials cookies from your tab at startup; all API calls go directly from Node after that. Works with any auth flow (SSO/SAML/2FA included).
Alternatives (env-var)
- Personal access token — set
CANVAS_TOKEN. Most institutions have disabled this for non-admins. - OAuth — set
CANVAS_CLIENT_ID,CANVAS_CLIENT_SECRET,CANVAS_REFRESH_TOKEN. Bootstrap viacanvas-parent-mcp-qr-login. - Username/password (session-scrape) — set
CANVAS_USERNAME+CANVAS_PASSWORD. Direct Canvas accounts only (no SSO/2FA). Brittle.
Precedence when multiple are set: CANVAS_TOKEN > username/password > OAuth > fetchproxy. Set CANVAS_DISABLE_FETCHPROXY=1 to opt out of the fallback.
Tools (prefix canvas_)
Profile & observees
canvas_get_profile— your Canvas profilecanvas_list_observees— students linked to your observer account
Courses
canvas_list_courses— your active courses with gradescanvas_get_course(courseId)— course detail with syllabus + teachers
Assignments & submissions
canvas_list_assignments(courseId)— assignments in a coursecanvas_list_missing_submissions— past-due unsubmitted workcanvas_get_submission(courseId, assignmentId)— your submission with comments + rubriccanvas_list_recent_submissions(courseId)— recently graded submissions (default 14d)
Grades
canvas_list_enrollments— per-course grades
Calendar & planner
canvas_list_calendar_events— calendar events / assignmentscanvas_list_upcoming_events— server-curated next 7 dayscanvas_list_planner_items— unified to-do feed
Communication
canvas_list_announcements(contextCodes)— course announcementscanvas_list_conversations— inboxcanvas_get_conversation(id)— full conversation threadcanvas_list_discussion_topics(courseId)— course discussion topics
Files
canvas_list_course_files(courseId)— file metadatacanvas_download_file(url, destinationPath)— download a file to disk
Notes
- Set
CANVAS_NAMEif you want a friendly label other than the host portion of the base URL. - All read tools that target a user accept an optional
observeeIdparameter (defaults toself) — useful when an observer is checking on a linked student.