CANVAS MCP + CLI

Canvas in your
terminal

Mirror your semester, read live Canvas data, and connect an AI client without needing a developer key. Use a Personal Access Token when your school allows one—or complete normal SSO/MFA in a visible browser when it does not.

Architecture

One project, every surface

The original CLI, vault, and chat experience now live beside a typed live-Canvas core used by desktop MCP and an optional private mobile gateway.

CanvasCtrl 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 CanvasCtrl core typed services + catalog READ · LOCAL · WRITE CLI canvasctrl due · status · sync MCP server local + private remote tools Chat agent canvasctrl · ask · chat
What's inside

Your semester, without the API-key dead end

Use the local mirror for speed and scripting, or query Canvas live when you need current syllabi, files, grades, calendars, and course state.

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 canvasctrl for a session, or put your question right after it.

Live MCP for AI clients

A 164-operation map across 29 Canvas areas, including 73 ready-to-invoke reads for courses, assignments, dates, files, grades, appointments, Inbox, quizzes, and more.

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. canvasctrl changes replays exactly what shifted between two syncs — added, moved, or edited.

Human-gated writes

Writes are off by default and never automatic. File, text, and URL submissions get exact previews plus fresh Mac owner authentication: Touch ID when available, with the account password as fallback. A Classic Quiz uses one scoped authentication before start.

Two steps

Your account, your machine, your choice

Install CanvasCtrl first. Once that finishes, choose the AI client you want to connect.

01

Install CanvasCtrl

Copy the command, run it in Terminal, and enter your school's Canvas URL when asked.

02

Connect your AI client

Confirm Step 1 is complete, then choose Codex, ChatGPT desktop, Claude Code, Cursor, or VS Code.

Get started

Install, then connect

Complete these in order. Your client choices unlock only after you confirm the installer finished.

Step 1 of 2

Install CanvasCtrl on your Mac

Copy this command and paste it into Terminal. CanvasCtrl brings its own verified runtime, then asks for your school's Canvas URL so it can save the right default profile. If it finds an older Codex MCP path, follow the printed replacement and restart note.

$ curl -fsSL https://canvasctrl.vivek-patel.com/install.sh | sh

Enter your school's Canvas URL when prompted. Resolve any old-runtime warning, then continue to Step 2.

Step 2 of 2

Choose your AI client

Open a guided setup in the app you want to use with CanvasCtrl.

Locked until you confirm the installer completed in Step 1.
ChatGPT web, Claude.ai, and mobile need your own remote endpoint. Local stdio cannot be reached from a cloud client. Start with the guided Codex setup above and ask it to configure optional mobile access in your Cloudflare account. No shared CanvasCtrl endpoint or maintainer credentials are distributed. For other local clients, download the generic MCP configuration.
Deep links never run commands silently. Review the prefilled task or MCP configuration, then approve it in your client. Canvas authentication still happens locally, and every Canvas write workflow remains confirmation-gated.
BYOK · privacy by design

Your keys stay on your machine.

CanvasCtrl talks to your Canvas institution directly. Canvas credentials live in your OS credential vault and are never MCP arguments or results. Optional remote access uses your own endpoint back to your Mac.

  • Your PAT or Canvas session stays on your device. Signed URLs, cookies, CSRF values, and upload parameters never enter model context.
  • Data lives in ~/canvas-vault/. Plain JSON on disk. Delete the folder and it's gone.
  • Writes are never automatic. They are disabled by default and require an exact preview plus fresh Touch ID or Mac-password authentication; Classic Quizzes use one bounded authentication before the attempt starts.
Questions

Frequently asked

The live MCP currently targets macOS 13.5 or newer on Apple Silicon and Intel. The one-line installer supplies CanvasCtrl's private Node.js runtime and prebuilt Keychain helper, so no system Node.js, npm, Homebrew, Apple Command Line Tools, Apple Developer account, or administrator access is required. Chrome is used only for browser-session authentication; a PAT remains optional.

canvasctrl 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. Updater-enabled installations check the maintainer-approved stable channel when the MCP starts and at most once daily while it remains running. CanvasCtrl accepts only signed, checksum-matched releases, validates them before atomic activation, and keeps the previous runtime for rollback. New code loads the next time your AI client starts the MCP; Canvas login, profiles, vault files, and client configuration stay unchanged. Installations from before the updater need to run the same one-line installer once more.

PATs and captured Canvas sessions are stored in macOS Keychain. The MCP never returns them, and Canvas authentication is stripped from off-origin downloads. Your AI client can still receive course data you ask tools to read, so connect only clients you trust.

CanvasCtrl is designed for standard Canvas LMS installations. During setup you point it at your school's HTTPS Canvas origin. Compatibility can still vary with institution policy, roles, feature flags, session behavior, and undocumented APIs, so the built-in doctor and capability checks report what is actually available.

Only when you explicitly enable confirmed writes. File, text-entry, and URL submissions each need an exact preview and separate Mac owner authentication. A successful Touch ID touch approves the exact action; if Touch ID cannot be used, macOS asks for the account password. Cancel or failure denies it. Uploading a file does not submit coursework; a file submission requires its own later authentication. Grading, enrollment, SIS, and administrative generic writes require another locally approved privileged capability, which itself requires Mac owner authentication, then still require per-write authentication. Classic Quiz attempts use the bounded one-approval workflow described below.

Do not retry the write. Run canvasctrl doctor, then the harmless canvasctrl test-approval-dialog. The test invokes the same macOS Touch ID/password policy but never contacts Canvas or authorizes a later action. If it works but your AI client still does not prompt, check canvas_get_runtime_info; an absent tool or old version usually means the client needs the installed ~/.local/bin/canvasctrl launcher and a full restart.

Yes, for documented Classic Quizzes when Canvas authorizes the student. CanvasCtrl previews the exact quiz, asks you to say “Yes, I want you to attempt this quiz.”, and requires one fresh Touch ID or Mac-password authentication before start. That short-lived session covers start, answer saves, and final submission without prompting on every question; it cannot be reused for another quiz or attempt. New Quizzes exposes public authoring APIs but no documented student start/answer/submit lifecycle, so CanvasCtrl does not imitate its browser-only flow.

No. Remote mode is optional and every installer supplies their own Cloudflare hostname, tunnel, Access policy, and identity. The project never ships the maintainer's endpoint or gives another installation access to it.

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.