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

@charlie.act7/canvas-mcp-server

v1.1.8

Published

MCP Server for Canvas LMS - Use AI to interact with your courses, assignments, and grades.

Readme

🎓 Canvas LMS MCP Server

npm version License: MIT

Bring AI to your Canvas Virtual Classroom! 🚀

This project is a Model Context Protocol (MCP) server for Canvas LMS. It acts as a bridge that allows AI assistants (like Claude Desktop, Claude Code, Cursor, etc.) to query and manage your Canvas courses using natural language.


Table of Contents


How It Works

When you interact with the server, communication flows as follows:

graph LR
    User([User]) -->|Natural Language Instruction| AI["AI Assistant (e.g., Claude)"]
    AI -->|MCP Request| MCP["Canvas MCP Server"]
    MCP -->|REST API - HTTPS| Canvas["Canvas LMS"]
    Canvas -->|Response| MCP
    MCP -->|Processed Data| AI
    AI -->|Friendly Answer| User
  1. You ask the AI (e.g., "Create an assignment due next Friday").
  2. The AI detects your intent and communicates with the Canvas MCP Server, sending the required parameters.
  3. The server makes a secure call to the official Canvas API.
  4. Canvas processes the action and returns the response.
  5. The AI confirms the success of the action back to you in plain, natural language.

Use Cases & Examples

Here are some realistic, everyday prompts you can use with your AI assistant:

[!TIP] Token Saving & Efficiency: Whenever possible, specify the Canvas ID or the direct Canvas URL (e.g., https://[your_institution].instructure.com/courses/[course_id]/assignments/[assignment_id]) in your prompts. This prevents the AI from scanning all your courses/resources, leading to faster responses and substantial token savings.

📖 Course Auditing & Querying

  • 💬 "What active courses do I have this semester? Check if there are multiple active sections/parallels."
  • 💬 "Show me all ungraded submissions for 'Essay 1: Introduction to Sociology' in Sociology 101."
  • 💬 "Who is in Student Group A for the Chemistry class?"
  • 💬 "Does the assignment 'Project Proposal' have an active rubric associated? If so, retrieve its criteria."

✍️ Creating & Organizing Course Content

  • 💬 "Create a new module named 'Week 1: Foundations' in my course."
  • 💬 "Add a SubHeader 'REQUIRED READINGS' inside the 'Week 1' module, and link the syllabus page to it."
  • 💬 "In my Business course, create an assignment called 'Case Study 1: Market Analysis'. Add an instructions table with columns for Criteria, Requirements, and Points."

💯 Grading & Absence Management

  • 💬 "For assignment 'Case Study 1', find all students who haven't submitted their work. Assign them a grade of 0 and add the comment: 'Activity not submitted. Please contact the instructor if you have a valid excuse.'"
  • 💬 "Grade John's submission for 'Essay 1' with a 90 based on the rubric, and add a comment: 'Great job! The analysis is well-structured, though you could expand more on the conclusion. Keep it up!'"

Setup Guide

To connect your AI assistant to Canvas, you need to configure two things: your Canvas credentials and your AI client (like Claude).

Step 1: Obtain Canvas Credentials

To let the server act on your behalf, it needs permission:

  1. Log in to your Canvas LMS account.
  2. Go to Account ➡️ Settings in the sidebar menu.
  3. Scroll down to the Approved Integrations section and click + New Access Token.
  4. Enter a purpose (e.g., "Claude Assistant") and click Generate Token.
  5. Copy the generated token immediately and store it somewhere safe (you won't be able to see it again after closing the page).

[!IMPORTANT] You will also need your Canvas Domain. This is the web address of your school/university, for example: myschool.instructure.com.


Step 2: Connect to your AI Client

Option A: Claude Desktop (Desktop Application)

  1. Open your Claude Desktop configuration file. On Windows, it is located at: %APPDATA%\Claude\claude_desktop_config.json (On macOS: ~/Library/Application Support/Claude/claude_desktop_config.json)
  2. Add the Canvas server configuration under mcpServers:
{
  "mcpServers": {
    "canvas": {
      "command": "npx",
      "args": ["-y", "@charlie.act7/canvas-mcp-server"],
      "env": {
        "CANVAS_API_TOKEN": "YOUR_ACCESS_TOKEN_HERE",
        "CANVAS_API_DOMAIN": "myschool.instructure.com"
      }
    }
  }
}
  1. Save the file and restart Claude Desktop. You will see a socket/plug icon indicating the server is successfully connected.

Option B: Claude Code (Terminal CLI)

If you are using the Claude Code terminal tool, install the plugin by running:

/plugin install canvas-lms@claude-community

Then, configure your credentials interactively:

/canvas-lms:config

CLI Configuration

If you prefer to configure your credentials locally for development, run:

npx @charlie.act7/canvas-mcp-server config

This will guide you step-by-step to input your domain and API token, storing them securely in a local configuration file.


Supported Tools & Resources

Tools List

The server exposes the following tools organized by category:

| Category | Included Tools | |---|---| | Courses | List courses, get course details, set basic configuration | | Modules | List and manage course modules | | Pages | List pages, read page content HTML | | Files | List files uploaded to a course | | Announcements | List and create announcements | | Assignments | List, create, and update assignments; bulk update due dates | | Submissions | View student submissions and attachments | | Grading | Grade submissions, audit course grades | | Quizzes | List quizzes, manage questions, update quiz dates | | Students | Course roster, progress tracking, and student details | | Groups | List and manage student groups | | Calendar | List and create calendar events/reminders | | Rubrics | Create and manage grading rubrics | | Communication | Send direct messages, manage discussions and threads |

Supported MCP Resources

For clients supporting direct resources:

  • canvas://courses/{id}/readme — Formatted course summary.
  • canvas://courses/{id}/pages/{slug} — Direct HTML content of Canvas pages.

Local Development

To clone this repository and modify the code:

  1. Install Dependencies:
    npm install
  2. Build the Project (TypeScript to JavaScript):
    npm run build
  3. Start Server in Stdio Mode (MCP):
    npm start
  4. Start HTTP Server with Swagger Documentation: If you want to use this as an OpenAI GPT Custom Action, spin up the web server with:
    npm run start:http
    Then visit http://localhost:3000 to view the interactive Swagger interface.

License

This project is licensed under the MIT License. Created by Charlie Cárdenas Toledo.