@essentia-edu/learningx-mcp
v1.0.0
Published
MCP server for Canvas LMS + Xinics LearningX. Built for Korean university students (SKKU, 고려대, 한양대, 중앙대, 한동대 등). Works with Claude Code, Claude Desktop, ChatGPT Desktop, Gemini, Cursor, Windsurf.
Maintainers
Readme
@essentia-edu/learningx-mcp
Model Context Protocol server for Canvas LMS + Xinics LearningX, built for Korean university students. Works with Claude Code/Desktop, ChatGPT Desktop, Gemini, Cursor, Windsurf, Codex, and every other MCP-compatible AI client.
25 user-journey-driven tools (13 base + 9 composite + 1 safe write + 2 download) covering the Canvas student workflow plus LearningX attendance/learning-path extensions. See SAFETY.md for the safety policy.
Supported: 성균관대, 고려대, 한양대, 중앙대, 한동대, 한남대, 동서대, 영남이공대, 중부대, and every other LearningX-enabled Canvas deployment.
Install
추가 설정 없이 npx로 바로 실행. 아래 클라이언트별 config에 그대로 붙여 넣으세요.
Disclaimer: 본 패키지는 Xinics/Canvas의 공식 MCP가 아닙니다. 학생 본인의 Canvas 토큰으로 본인 데이터에만 접근하는 비공식 reverse-engineered 클라이언트입니다. 시험/퀴즈 자동 응시 도구는 의도적으로 포함하지 않습니다 (SAFETY.md). 각 학교/Xinics 정책 확인 책임은 사용자에게 있습니다.
Claude Desktop
Add to your Claude Desktop config (%APPDATA%\Claude\claude_desktop_config.json on Windows, ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"essentia-learningx": {
"command": "npx",
"args": ["-y", "@essentia-edu/learningx-mcp"],
"env": {
"CANVAS_ACCESS_TOKEN": "<your-token>",
"CANVAS_BASE_URL": "https://canvas.skku.edu"
}
}
}
}Restart Claude Desktop. The 25 tools appear in the "Search and tools" menu.
Claude Code
Create .mcp.json in your project root:
{
"mcpServers": {
"essentia-learningx": {
"command": "npx",
"args": ["-y", "@essentia-edu/learningx-mcp"],
"env": {
"CANVAS_ACCESS_TOKEN": "<your-token>",
"CANVAS_BASE_URL": "https://canvas.skku.edu"
}
}
}
}Other clients
Same npx command, same env vars. Consult your client's MCP config docs.
Getting a Canvas access token
- Log in to your institution's Canvas LMS (e.g. https://canvas.skku.edu).
- Go to Account → Settings.
- Scroll to Approved Integrations → + New Access Token.
- Purpose:
essentia-learningx-mcp. Leave expiration blank for no expiry. - Copy the token (shown only once). Treat it as a password.
Supported institutions
| University | CANVAS_BASE_URL |
|---|---|
| 성균관대학교 | https://canvas.skku.edu |
| 고려대학교 | https://lms.korea.ac.kr |
| 한양대학교 | https://canvas.hanyang.ac.kr |
| 중앙대학교 | https://eclass3.cau.ac.kr |
| 한동대학교 | https://lms.handong.edu |
| 한남대학교 | https://hiclass.hannam.ac.kr |
| 동서대학교 | https://canvas.dongseo.ac.kr |
| 영남이공대학교 | https://lms.ync.ac.kr |
| 중부대학교 | https://ccanvas.joongbu.ac.kr |
To fetch the live LearningX university registry from Xinics, use the @essentia-edu/learningx-sdk directly — this was pulled from the MCP surface in v0.2.0 since students rarely need it inside an AI conversation.
Tool reference (v0.5.0 — 25 tools)
Composite tools (9)
Each answers one common student question in a single MCP call.
| Tool | Purpose |
|---|---|
| daily_briefing | "오늘/이번 주 뭐 해야 돼?" — upcoming events + pending items + new announcements |
| get_weekly_content_tree | "이번 주 / 다음 주 전체 현황" — weekly items across all courses |
| check_new_announcements_since | Polling-friendly "new announcements since X" |
| summarize_course | "/init" for a course — syllabus + instructor + weekly structure + early announcements + discussions |
| list_pending_items | Cross-course unwatched videos + unsubmitted assignments + open quizzes |
| get_course_materials | Downloadable PDFs/PPT/XLSX for a course, default current week |
| exam_schedule_summary | Aggregate exams/quizzes across all courses in a window |
| get_material_analysis_context | Context bundle for deep-dive on one material (hallucination-free AI Q&A) |
| get_assignment | Full detail for one assignment with instruction PDFs parsed out of the description into a structured attachments array |
Base tools (13)
| Tool | Purpose |
|---|---|
| list_current_courses | Student enrollments in the current semester |
| list_modules | Weekly module tree for one course (LearningX superset) |
| list_attendance_items | LearningX attendance components |
| list_assignments | Assignments for one course |
| list_quizzes | Quizzes/exams metadata for one course |
| list_submissions | My submissions in one course |
| list_announcements | Course announcements (with since filter) |
| list_calendar_events | Calendar events in a date range |
| list_upcoming_events | Next 7 days of events |
| list_enrollments | My grade info in a course |
| get_syllabus_content | Raw syllabus page body |
| list_discussion_topics | Discussion boards in a course |
| list_discussion_entries | Posts in a discussion board |
Safe write (1)
| Tool | Behavior |
|---|---|
| submit_assignment | Defaults to confirm=false (dry-run preview + Canvas pre-flight). Pass confirm=true to actually submit. Supports three modes: online_url (with url), online_text_entry (with body), and online_upload (with file_path) — the last uploads a local file to Canvas and attaches it. Pre-flight catches wrong extension, past-lock, not-yet-unlocked, type mismatch, etc. before any write. Quizzes/exams are NOT writable — use Canvas web UI. |
Download (2)
| Tool | Behavior |
|---|---|
| download_material | Save a Canvas-hosted file or a Xinics LCMS course content (document PDF or lecture video MP4) to local disk. Accepts one of canvas_file_id, lcms_slug, or a url (auto-routed by domain). dest_dir defaults to $TMPDIR/essentia-learningx/<course_id>/. Videos (500MB–1GB) are streamed directly to disk — no memory bloat. See SAFETY.md for the local-study-only policy. |
| download_course_bulk | Composite. Iterate list_modules(course_id) and bulk-download every LCMS item. Filters: week (number / "current" / "all"), types (["pdf","movie","file"] default; pass ["pdf"] to skip heavy videos). concurrency default 3. Quiz items always excluded. Future-week items (empty url) silently skipped. Returns a summary + per-item results. Typical use: "학기 초 전 주차 PDF 백업" or "6주차 자료만 받아줘". |
See SAFETY.md for the full safety policy.
Environment variables
| Variable | Required | Default | Description |
|---|---|---|---|
| CANVAS_ACCESS_TOKEN | ✅ | — | Canvas Personal Access Token |
| CANVAS_BASE_URL | ✅ | — | Your institution's Canvas URL (no trailing slash) |
| LEARNINGX_MCP_LOG_LEVEL | ❌ | info | debug / info / warn / error — logs go to stderr |
Known limitations
- Tab label matching for LearningX features is regex-based and may miss unusual labels in non-SKKU institutions. Open an issue if your university's LearningX feature is not detected.
- VOD progress endpoints, Notification API, Total Gradebook, Question Bank: not yet implemented.
- Quiz/exam tools are intentionally not exposed in MCP (legal liability around AI-assisted exam taking). Use the Canvas web UI directly.
Development
pnpm install
pnpm test
pnpm build
# Integration test against live Canvas (requires env)
CANVAS_ACCESS_TOKEN=... CANVAS_BASE_URL=https://canvas.skku.edu pnpm smokeLicense
MIT © Essentia Edu
