npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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.

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

  1. Log in to your institution's Canvas LMS (e.g. https://canvas.skku.edu).
  2. Go to Account → Settings.
  3. Scroll to Approved Integrations+ New Access Token.
  4. Purpose: essentia-learningx-mcp. Leave expiration blank for no expiry.
  5. 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 smoke

License

MIT © Essentia Edu