Skip to content

kleinpanic/canvas-lms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

canvas-lms

Author: Klein Panic · @kleinpanic · MIT License

An OpenClaw skill that gives AI agents read-only access to Canvas LMS via the REST API. Fetch courses, assignments, grades, announcements, submissions, modules, and upcoming events.

Features

  • Read-only by design — write operations (POST/PUT/DELETE/PATCH) are blocked at the script level
  • JSON output — all responses are clean JSON, ready for jq piping
  • Portable — works on Linux and macOS
  • Zero config bloat — two env vars and you're done
  • Content normalization — HTML entities and tags are stripped from text fields so AI agents receive clean, readable content

Requirements

Dependency Purpose
curl HTTP requests
jq JSON filtering (used in announcements-all)
python3 Response normalization

Setup

1. Get a Canvas API Token

  1. Log in to your Canvas instance
  2. Go to Account → Settings → New Access Token
  3. Give it a name, set an expiry (optional), click Generate Token
  4. Copy the token — you won't see it again

2. Configure Environment

Add to your shell config (~/.zshrc, ~/.bashrc, etc.):

export CANVAS_TOKEN="your_token_here"
export CANVAS_BASE_URL="https://canvas.yourinstitution.edu"

Or set them per-session:

export CANVAS_TOKEN="$(cat ~/.secret/canvas-token)"
export CANVAS_BASE_URL="https://canvas.example.edu"

3. Make the Script Executable

chmod +x ~/.openclaw/skills/canvas-lms/bin/canvas-api

4. OpenClaw Integration

The skill auto-registers with OpenClaw. Reference the binary in agent configs:

CANVAS_API="$HOME/.openclaw/skills/canvas-lms/bin/canvas-api"

Or add to your PATH:

export PATH="$HOME/.openclaw/skills/canvas-lms/bin:$PATH"

Usage

canvas-api courses
canvas-api upcoming
canvas-api todo
canvas-api missing
canvas-api grades-all
canvas-api assignments <course_id>
canvas-api announcements <course_id>
canvas-api announcements-all
canvas-api grades [course_id]
canvas-api syllabus <course_id>
canvas-api files <course_id>
canvas-api submissions <course_id>
canvas-api modules <course_id>
canvas-api calendar

# Raw API path (anything not matching a shorthand)
canvas-api "/api/v1/courses?enrollment_state=active&per_page=100"

COURSE_ID shortcut

export COURSE_ID=12345
canvas-api assignments   # uses COURSE_ID automatically
canvas-api syllabus      # same

Output Examples

# Course list
canvas-api courses | jq '.[] | {id, name, course_code}'

# Assignments due this week with submission status
canvas-api assignments 12345 | jq '.[] | select(.due_at != null) | {name, due_at, submitted: .submission.submitted_at}'

# Missing submissions
canvas-api missing | jq '.[] | {name, course_id, due_at}'

# Current grade across all courses
canvas-api grades-all | jq '.[] | {course_id, score: .grades.current_score, grade: .grades.current_grade}'

# Recent announcements
canvas-api announcements-all | jq '.[] | {title, posted_at}'

Environment Variables

Variable Required Description
CANVAS_TOKEN Canvas API access token
CANVAS_BASE_URL Canvas instance base URL (no trailing slash)
COURSE_ID optional Default course ID for shorthands that require one
CANVAS_SANITIZE_DISABLE optional Set to 1 to receive raw API output without normalization

Notes

  • Pagination: Canvas defaults to 10 results per page. Shorthands request up to 50-100. For very large courses, use raw paths with ?per_page=100.
  • Rate limits: Canvas enforces rate limits (usually ~3000 req/hr). The script doesn't retry automatically — add retry logic in your agent if needed.
  • Token expiry: Tokens can expire. If you get 401, regenerate in Canvas Settings.
  • Cross-platform date: announcements-all uses date -d (Linux) with date -v (macOS) fallback.

Contributing

Issues and PRs welcome. Please keep contributions read-only in spirit — don't add write operations to this skill.

Author

Klein Panic · kleinpanic.com · @kleinpanic

License

MIT — Copyright (c) 2026 Klein Panic — see LICENSE

About

Read-only Canvas LMS API wrapper for OpenClaw agents — courses, assignments, grades, announcements, and more

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages