New to Claude Skills? Learn how to install them →

nousresearch on GitHub

Canvas LMS Access

Free

Effortlessly fetch Canvas LMS courses and assignments.

Get this skill

Free · Opens the source repo

What Canvas LMS Access does

The Canvas LMS Access skill provides a straightforward way to interact with the Canvas Learning Management System via its API. Designed for educators, administrators, and developers, this skill allows users to retrieve a list of courses and assignments from their Canvas instance without any modification capabilities. It is particularly useful for those who need to automate the retrieval of course information or integrate Canvas data into other applications or workflows.

By utilizing a simple Python script, users can execute commands to list active courses or assignments for specific courses. The skill requires an API token for authentication, ensuring that access is secure and limited to read-only operations. The setup involves generating a token in the Canvas settings and configuring it in the environment, making it accessible for API calls. The provided script handles pagination automatically, which is essential for institutions with a large number of courses or assignments.

The output from the API calls is structured in JSON format, making it easy to parse and use in various applications. Users can specify parameters such as enrollment state and order assignments by due date, allowing for tailored queries that suit their specific needs. This skill is ideal for those looking to streamline their workflow when working with Canvas LMS data, whether for reporting, integration, or simply for personal use.

Overall, the Canvas LMS Access skill is a valuable tool for anyone needing to interact with Canvas in a programmatic way, providing essential functionality without the complexity of direct API management.

When to use it

Use this skill when you need to access course and assignment data from Canvas LMS programmatically, especially for reporting or integration purposes.

When not to use it

This skill is not suitable for modifying course or assignment data, as it is strictly read-only.

What you can build with it

Automate Course Reporting

Use the skill to automatically retrieve and report on active courses for administrative purposes.

Integrate with Other Tools

Fetch assignment data to integrate with project management or grading tools, streamlining workflows.

Monitor Assignment Deadlines

List assignments ordered by due date to help students and educators keep track of upcoming deadlines.

How to install Canvas LMS Access

View source

1. Install with the skills CLI

npx skills add nousresearch/hermes-agent/canvas --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by nousresearch

Canvas LMS — Course & Assignment Access

Read-only access to Canvas LMS for listing courses and assignments.

Scripts

  • scripts/canvas_api.py — Python CLI for Canvas API calls

Setup

  1. Log in to your Canvas instance in a browser
  2. Go to Account → Settings (click your profile icon, then Settings)
  3. Scroll to Approved Integrations and click + New Access Token
  4. Name the token (e.g., "Hermes Agent"), set an optional expiry, and click Generate Token
  5. Copy the token and add to ${HERMES_HOME:-~/.hermes}/.env:
CANVAS_API_TOKEN=your_token_here
CANVAS_BASE_URL=https://yourschool.instructure.com

The base URL is whatever appears in your browser when you're logged into Canvas (no trailing slash).

Usage

CANVAS="python $HERMES_HOME/skills/productivity/canvas/scripts/canvas_api.py"

# List all active courses
$CANVAS list_courses --enrollment-state active

# List all courses (any state)
$CANVAS list_courses

# List assignments for a specific course
$CANVAS list_assignments 12345

# List assignments ordered by due date
$CANVAS list_assignments 12345 --order-by due_at

Output Format

list_courses returns:

[{"id": 12345, "name": "Intro to CS", "course_code": "CS101", "workflow_state": "available", "start_at": "...", "end_at": "..."}]

list_assignments returns:

[{"id": 67890, "name": "Homework 1", "due_at": "2025-02-15T23:59:00Z", "points_possible": 100, "submission_types": ["online_upload"], "html_url": "...", "description": "...", "course_id": 12345}]

Note: Assignment descriptions are truncated to 500 characters. The html_url field links to the full assignment page in Canvas.

API Reference (curl)

# List courses
curl -s -H "Authorization: Bearer $CANVAS_API_TOKEN" \
  "$CANVAS_BASE_URL/api/v1/courses?enrollment_state=active&per_page=10"

# List assignments for a course
curl -s -H "Authorization: Bearer $CANVAS_API_TOKEN" \
  "$CANVAS_BASE_URL/api/v1/courses/COURSE_ID/assignments?per_page=10&order_by=due_at"

Canvas uses Link headers for pagination. The Python script handles pagination automatically.

Rules

  • This skill is read-only — it only fetches data, never modifies courses or assignments
  • On first use, verify auth by running $CANVAS list_courses — if it fails with 401, guide the user through setup
  • Canvas rate-limits to ~700 requests per 10 minutes; check X-Rate-Limit-Remaining header if hitting limits

Troubleshooting

ProblemFix
401 UnauthorizedToken invalid or expired — regenerate in Canvas Settings
403 ForbiddenToken lacks permission for this course
Empty course listTry --enrollment-state active or omit the flag to see all states
Wrong institutionVerify CANVAS_BASE_URL matches the URL in your browser
Timeout errorsCheck network connectivity to your Canvas instance

Frequently asked questions about Canvas LMS Access

Similar skills