AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

Canvas Mcp

mcp-tylergibbs1-canvas-mcp · by tylergibbs1

MCP server for Canvas LMS over the REST API — coursework, deadlines, grades, submissions, discussions, and messages for AI agents.

No reviews yet
0 installs
41 views
0.0% view→install

Install

$ agentstack add mcp-tylergibbs1-canvas-mcp

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-tylergibbs1-canvas-mcp)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
3mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Canvas Mcp? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

canvas-mcp

[](https://github.com/tylergibbs1/canvas-mcp/actions/workflows/ci.yml) [](LICENSE) [](https://nodejs.org) [](https://modelcontextprotocol.io)

> A Model Context Protocol server that gives AI agents structured access to Canvas LMS — coursework, deadlines, grades, submissions, discussions, and messages — over the official REST API.

Works with any Instructure-hosted Canvas instance. Built and validated against canvas.okstate.edu.

Contents

  • [Why the REST API](#why-the-rest-api)
  • [Features](#features)
  • [Tools](#tools)
  • [Installation](#installation)
  • [Configuration](#configuration)
  • [Usage](#usage)
  • [Write safety](#write-safety)
  • [Development](#development)
  • [Security](#security)
  • [Contributing](#contributing)
  • [License](#license)

Why the REST API

Canvas exposes a stable, versioned API at /api/v1/. Wrapping it — rather than scraping the web UI — yields:

  • Single-call actions instead of multi-page navigation.
  • Resilience to UI redesigns; the API is versioned.
  • Compact, structured JSON that doesn't flood an agent's context with rendered HTML.
  • Simple auth via one bearer token.

Browser automation is reserved for things genuinely outside Canvas — embedded LTI tools such as zyBooks, Cengage, or Coursera quizzes, whose contents Canvas itself cannot see.

Features

  • 11 workflow-oriented tools spanning the full student workflow, designed for agent ergonomics (human-readable names over opaque IDs, consolidated multi-step actions).
  • Dry-run safety on every write — nothing is submitted, posted, or sent without an explicit confirm: true.
  • Cross-course planner — one call returns everything due across all courses.
  • Zero-config secrets — the server auto-loads a local .env, so no token ever appears on a command line or in client config.
  • Tested — offline boot check in CI plus a live contract/regression suite.

Tools

| Tool | Description | Access | |---|---|:---:| | canvas_list_courses | Active courses with code, term, and current grade | read | | canvas_deadlines | Everything due soon across all courses (via the planner) | read | | canvas_list_assignments | Assignments in a course with due dates and submission status | read | | canvas_get_assignment | Full detail: instructions, rubric, accepted types, your status | read | | canvas_get_grades | Course grade summary, or per-assignment feedback and rubric | read | | canvas_list_announcements | Recent announcements, all courses or one | read | | canvas_get_discussion | List discussion topics, or read a full thread | read | | canvas_find_person | Resolve a name to a user ID for messaging | read | | canvas_submit_assignment | Submit a text entry, URL, or uploaded file | write | | canvas_post_reply | Reply to a discussion topic | write | | canvas_send_message | Send a Canvas inbox message | write |

Installation

Requirements: Node.js ≥ 22.

git clone https://github.com/tylergibbs1/canvas-mcp.git
cd canvas-mcp
npm install
npm run build

Configuration

Generate a token in Canvas: Account → Settings → "+ New Access Token". Treat it like a password.

cp .env.example .env   # then set CANVAS_TOKEN

| Variable | Required | Description | |---|:---:|---| | CANVAS_BASE_URL | yes | Your Canvas origin, e.g. https://canvas.okstate.edu (no trailing slash). | | CANVAS_TOKEN | yes | A personal access token. |

The server reads .env automatically. Real environment variables take precedence, so you may also pass these inline if you prefer.

Usage

Claude Code

The server auto-loads .env, so no secret is needed on the command line:

claude mcp add --scope user canvas -- node /absolute/path/to/canvas-mcp/dist/index.js

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "canvas": {
      "command": "node",
      "args": ["/absolute/path/to/canvas-mcp/dist/index.js"],
      "env": {
        "CANVAS_BASE_URL": "https://your-school.instructure.com",
        "CANVAS_TOKEN": "your_token_here"
      }
    }
  }
}

Any MCP-compatible client works — point it at node dist/index.js with the two environment variables set.

Write safety

Every write tool defaults to a dry run: it validates inputs and returns a preview of exactly what would be sent, but performs no action. You must re-call with confirm: true to actually submit, post, or send. An accidental or hallucinated call cannot change anything in Canvas.

Development

npm run dev       # run from source with tsx
npm run build     # compile TypeScript to dist/
npm test          # offline: boot the server and verify all tools register (no token)
npm run eval      # live: contract/regression suite (requires a token)
npm run inspect   # interactive MCP Inspector (requires a token)

Evaluation

  • eval/eval.mjs (npm run eval) asserts data-independent invariants against the live API — deadline ordering, valid status values, HTML stripping, cross-tool grade consistency, and that every write tool's confirm:false path returns a dry run and never executes.
  • eval/tasks.md provides realistic agent task prompts (happy path, multi-step, write safety, scope boundary) for behavioral evaluation, each with "what good looks like."

Security

  • Tokens are secrets. .env is git-ignored; never commit it. Anyone with your token can act as you in Canvas.
  • Scoped to your account. The server can only do what your Canvas account can do.
  • Revocation. Remove a token anytime in Canvas under Account → Settings → Approved Integrations.
  • Tokens are sent only to your configured CANVAS_BASE_URL over HTTPS.

Contributing

Issues and pull requests are welcome. Please run npm run build and npm test before opening a PR; if you have a Canvas token available, npm run eval is encouraged.

License

[MIT](LICENSE) © Tyler Gibbs

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.