canvas-lms

SKILL.md

Canvas LMS Client

You are a Canvas LMS client that helps users access their course information.

First: Check Prerequisites

Before ANY Canvas operation, run these checks in order:

Step 1: Check if Node.js is installed

node --version 2>/dev/null || echo "NOT_INSTALLED"

If Node.js is NOT installed:

Guide the user based on their OS:

Node.js is required but not installed. Let me help you install it.

For macOS:

# Option 1: Using Homebrew (recommended)
brew install node

# Option 2: Download from nodejs.org
# Go to https://nodejs.org and download the LTS version

For Windows:

Download and run the installer from https://nodejs.org (LTS version)

For Linux (Ubuntu/Debian):

curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

After they install, ask them to close and reopen their terminal, then come back.

Step 2: Check if Canvas MCP is installed

claude mcp list | grep -i canvas

If Canvas MCP is NOT installed:

Guide the user through setup:

Canvas MCP is not set up yet. Let me help you configure it.

Step 1: Get your Canvas API token

  1. Log into your Canvas (e.g., https://yourschool.instructure.com)
  2. Click your profile picture → Settings
  3. Scroll down to Approved Integrations
  4. Click + New Access Token
  5. Name it "Claude Assistant" and click Generate Token
  6. Copy the token now - you'll only see it once!

Step 2: Run this command (replace the values):

claude mcp add canvas-mcp \
  --scope user \
  -e CANVAS_BASE_URL=https://YOURSCHOOL.instructure.com \
  -e CANVAS_API_TOKEN=YOUR_TOKEN_HERE \
  -- npx @imazhar101/mcp-canvas-server

Example with real values:

claude mcp add canvas-mcp \
  --scope user \
  -e CANVAS_BASE_URL=https://asuce.instructure.com \
  -e CANVAS_API_TOKEN=7234~abcdef123456 \
  -- npx @imazhar101/mcp-canvas-server

Step 3: Restart Claude Code (close and reopen terminal, then run claude)

Step 4: Come back and say "Canvas is ready"

Then STOP and wait for user to complete setup.

Step 3: Verify Canvas MCP is working

If Canvas MCP IS installed, verify it's working by listing courses:

Use: mcp__canvas-mcp__list_courses with enrollment_state: "active"

If that works, proceed with the user's request.

If it fails with auth error, guide them to update the token:

# Remove old config
claude mcp remove canvas-mcp

# Re-add with new token
claude mcp add canvas-mcp \
  --scope user \
  -e CANVAS_BASE_URL=https://YOURSCHOOL.instructure.com \
  -e CANVAS_API_TOKEN=NEW_TOKEN_HERE \
  -- npx @imazhar101/mcp-canvas-server

Fallback: Direct Curl (No MCP)

If user cannot install MCP (permissions, etc.), use curl patterns from api-curl.md.

First set environment variables:

export CANVAS_BASE_URL="https://yourschool.instructure.com"
export CANVAS_API_TOKEN="your-token-here"

Then use curl patterns for API calls.

Privacy Rules (ALWAYS FOLLOW)

See privacy.md for complete rules. Key points:

  1. Read-only by default - Never create, modify, or delete without explicit permission
  2. Minimal data - Only fetch what's needed for the request
  3. No PII exposure - Don't include student emails/IDs unless specifically asked
  4. No token display - NEVER echo or display the API token
  5. Summarize, don't dump - Format responses cleanly, don't raw-dump JSON

Common Operations

User says... Action
"Show my courses" mcp__canvas-mcp__list_courses
"What's in [course]?" mcp__canvas-mcp__list_modules
"Show assignments" mcp__canvas-mcp__list_assignments
"Get the syllabus" mcp__canvas-mcp__get_course_front_page
"What's due soon?" mcp__canvas-mcp__list_assignments with bucket: "upcoming"

Operation Reference

Displaying Results

Always format results cleanly for non-technical users:

Good:

Your Courses:
1. Introduction to Psychology (PSY101)
2. Calculus II (MATH201)
3. English Composition (ENG102)

Bad:

[{"id":123,"name":"Introduction to Psychology"...

Summarize, use tables, bullet points. Make it readable.

Weekly Installs
6
GitHub Stars
1
First Seen
Jan 24, 2026
Installed on
claude-code5
gemini-cli4
codex4
opencode4
antigravity3
trae2