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.

User: canvasctrl what’s due this week? ChatGPT: You have 4 items due this week. BIO 101, Lab 4 - Cell Structure, Wednesday 23:59, 40 points. HIST 210, Essay 2 - Source Analysis, Thursday 23:59, 25 points. BIO 101, Quiz 6 - Genetics, Friday 09:00, 15 points. HIST 210, Reading - Primary Sources, Sunday 23:59, 10 points. Which one would you like me to look into?
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 device-owner authentication: Touch ID/password on macOS or Windows Hello on Windows. 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

Choose macOS or Windows, run its one-line installer, 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 macOS

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 macOS 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, use the platform-specific configuration directly above.
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 CanvasCtrl host.

  • 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 native local approval. Step-up actions use fresh Touch ID/password on macOS or Windows Hello on Windows; a bounded in-memory lease can reduce repeated authentication only for ordinary writes, never their exact Approve/Deny prompt.
Questions

Frequently asked

The live MCP targets macOS 13.5 or newer on Apple Silicon or Intel, and Windows 11 on x64. Choose your platform in Step 1: both one-line installers supply CanvasCtrl's private Node.js runtime and native credential/approval helpers, so no system Node.js, npm, or administrator access is required. The Windows choice unlocks only when a Windows runtime covered by CanvasCtrl's maintainer-signed release manifest is present on this site. A prerelease is visibly labeled Beta test, is never selected automatically, and stays on the signed beta update channel; the normal label and stable channel appear only after approval for general release. This is not a claim of Microsoft Authenticode signing. macOS also needs no Homebrew, Apple Command Line Tools, or Apple Developer account. Chrome is supported for browser-session authentication; Windows can also use Microsoft Edge. Windows ARM64 is not currently advertised.

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 stable installations check the maintainer-approved stable channel when the MCP starts and at most once daily while it remains running. A visibly labeled Windows beta-test installation checks the signed beta channel instead until you switch it to stable. 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 or encrypted for the current Windows user with DPAPI. 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 device-owner authentication. macOS uses Touch ID or the Mac account password; Windows uses Windows Hello face, fingerprint, or PIN. Cancel or failure denies the action. 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, 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 or Windows Hello policy but never contacts Canvas or authorizes a later action. On Windows, reads remain available if Hello is not configured, but writes fail closed until it is ready. If the test 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 platform 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 device-owner authentication before start—Touch ID/password on macOS or Windows Hello on Windows. 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.