Read-focused Canvas LMS

Canvas in your
terminal

Mirror your whole semester into a local vault, then ask it questions in plain English. canvasctl what's due this week? — no subcommand, no quotes — answered by your own AI over your real course data. Claude-first; any provider's key works.

Architecture

One core, three surfaces

Every Canvas operation is defined exactly once in an ops registry — then served, unchanged, to the CLI, to Claude Code over MCP, and to the built-in chat agent.

CanvasCTL architecture diagram Canvas LMS course data flows into a central ops registry, which feeds three surfaces: the command-line interface, an MCP server for Claude Code, and a chat agent. Canvas LMS your school's course data ops registry one contract, defined once READ · LOCAL · WRITE CLI canvasctl due · status · sync MCP server tools for Claude Code Chat agent canvasctl · ask · chat
What's inside

Built for how you actually check on a semester

Fast, local, and scriptable. Everything reads from a plain-JSON mirror you own — no dashboards, no lock-in.

Local vault mirror

Your whole semester as plain JSON in ~/canvas-vault/. Grep it, jq it, back it up. Structured, atomic, and yours.

ask & chat, in English

Your own AI answers over your real data — Anthropic, OpenAI, or any compatible endpoint. Just type canvasctl for a session, or put your question right after it.

MCP for Claude Code

Expose every op as tools. claude mcp add canvasctl -- canvasctl mcp and your assistant can read your semester too.

Due-date radar + .ics

See what's due in any window — 24h, 7d, 2w — then export the next 60 days to a calendar you can subscribe to.

Change tracking

SHA-256 snapshots per course, per kind. canvasctl changes replays exactly what shifted between two syncs — added, moved, or edited.

BYOK privacy

Bring your own Canvas token and any AI provider's key — Anthropic, OpenAI, or a compatible endpoint. They never leave your machine. No servers, no telemetry, no account.

Three steps

From zero to answers in a minute

Install it, point it at your school, and start talking to your semester.

01

Install

One curl line drops canvasctl on your $PATH.

# one line, no sudo
curl -fsSL …/install.sh | sh
02

canvasctl setup

Answer three prompts: your Canvas URL, an access token, and an optional AI key (Anthropic or OpenAI-compatible).

$ canvasctl setup
Canvas URL › canvas.psu.edu
Access token › ••••••••
03

Talk to your semester

Sync once, then ask anything — a bare canvasctl drops into chat — or hand the tools to Claude Code.

$ canvasctl sync
$ canvasctl what changed today?
Get started

Install in one line

Copy, paste, run. Prefer isolation? Use the pipx tab. Either way, nothing phones home.

$ curl -fsSL https://raw.githubusercontent.com/vivekp-05/canvasctl/main/install.sh | sh
Then wire it into Claude Code: claude mcp add canvasctl -- canvasctl mcp
BYOK · privacy by design

Your keys stay on your machine.

canvasctl talks to Canvas and your AI provider directly, with credentials that live only in your shell and your vault. There is no CanvasCTL backend to send your data to — because there isn't one.

  • Your PAT & API key never leave your device. No proxy, no relay, no account to create.
  • Data lives in ~/canvas-vault/. Plain JSON on disk. Delete the folder and it's gone.
  • Read-focused by design. canvasctl mirrors and reads; any write would require explicit confirmation on every surface.
Questions

Frequently asked

Python 3.10 or newer and a Canvas access token (Account → Settings → New Access Token). The ask / chat agent also wants an AI key — Anthropic (first-class) or any OpenAI-compatible provider — but the core read commands and MCP work without one.

canvasctl itself is free and MIT-licensed. The only cost is your own AI usage when you use the agent — Anthropic, OpenAI, or even a free local model via an OpenAI-compatible endpoint. Billed directly to your key, at your rate, with no markup from us.

Yes. Your token and API key live only on your machine — in your shell environment and vault config. Nothing is sent to any server we operate; Canvas and your AI provider are called directly from your terminal. You can revoke the token in Canvas at any time.

Any Canvas LMS instance. During canvasctl setup you point CANVAS_BASE_URL at your school's Canvas host (for example canvas.your-school.edu). If your institution runs Canvas, canvasctl works.

No. canvasctl is read-focused by design — it mirrors, lists, and answers. There are no write operations in this release, and the architecture requires explicit user confirmation on every surface before any future write to Canvas could ever run.

In ~/canvas-vault/ as plain JSON — metadata, a change log, and any files you pull. It's yours to grep, back up, or delete. Remove the folder and every trace of your synced data is gone.