Local vault mirror
Your whole semester as plain JSON in ~/canvas-vault/. Grep it, jq it, back it up. Structured, atomic, and yours.
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.
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.
Use the local mirror for speed and scripting, or query Canvas live when you need current syllabi, files, grades, calendars, and course state.
Your whole semester as plain JSON in ~/canvas-vault/. Grep it, jq it, back it up. Structured, atomic, and yours.
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.
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.
See what's due in any window — 24h, 7d, 2w — then export the next 60 days to a calendar you can subscribe to.
SHA-256 snapshots per course, per kind. canvasctrl changes replays exactly what shifted between two syncs — added, moved, or edited.
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.
Install CanvasCtrl first. Once that finishes, choose the AI client you want to connect.
Copy the command, run it in Terminal, and enter your school's Canvas URL when asked.
Confirm Step 1 is complete, then choose Codex, ChatGPT desktop, Claude Code, Cursor, or VS Code.
Complete these in order. Your client choices unlock only after you confirm the installer finished.
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.
Open a guided setup in the app you want to use with CanvasCtrl.
Use this local stdio configuration in any MCP-capable desktop client. Install CanvasCtrl first, then import or adapt the JSON in that client’s MCP settings.
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.
~/canvas-vault/. Plain JSON on disk. Delete the folder and it's gone.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.