Canvas Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Canvas Mcp (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A bulleted imperative like {match} tells the agent to never reveal, disclose, or mention something to the user. Used adversarially it can instruct the agent to hide its tool calls or lie about what it did — stripping the transparency a user relies on to trust the agent.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An MCP (Model Context Protocol) server that connects Claude to Canvas LMS, letting you manage your coursework through natural conversation.
Ask Claude things like:
# Clone this repository
git clone https://github.com/lucanardinocchi/canvas-mcp.git
cd canvas-mcp
# Install dependencies
npm install
# Build the project
npm run buildOpen Claude Desktop's config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonAdd (or merge) this configuration:
{
"mcpServers": {
"canvas": {
"command": "node",
"args": ["/FULL/PATH/TO/canvas-mcp/dist/index.js"],
"env": {
"CANVAS_API_TOKEN": "YOUR_TOKEN_HERE",
"CANVAS_BASE_URL": "https://your-school.instructure.com"
}
}
}
}Replace:
/FULL/PATH/TO/canvas-mcp with the actual path where you cloned this repoYOUR_TOKEN_HERE with your Canvas API tokenhttps://your-school.instructure.com with your Canvas URLCommon Canvas URLs:
| University | Canvas URL |
|---|---|
| University of Sydney | https://canvas.sydney.edu.au |
| Generic Instructure | https://canvas.instructure.com |
| Your school | Check your browser when logged into Canvas |
Quit Claude Desktop completely (Cmd+Q / Alt+F4) and reopen it.
You should now see Canvas tools available in Claude!
| Tool | What it does |
|---|---|
list_courses | List your enrolled courses |
get_course | Get details about a specific course |
list_assignments | List assignments (with filters) |
get_assignment | Get full assignment details + rubric |
get_rubric | Get grading rubric for an assignment |
get_submission | View your submission and feedback |
submit_assignment | Submit text or URL to an assignment |
upload_file | Upload a file for submission |
list_modules | Browse course modules |
list_announcements | Get course announcements |
list_discussions | View discussion topics |
get_discussion_entries | Read discussion posts |
post_discussion_entry | Post to a discussion |
reply_to_discussion | Reply to a discussion post |
find_assignments_by_due_date | Find assignments in a date range |
get_upcoming_assignments | Get work due in the next N days |
get_overdue_assignments | Find past-due work |
search_course_content | Search modules and assignments |
get_all_upcoming_work | Upcoming work across ALL courses |
claude_desktop_config.json is valid JSONYour API token is invalid or expired. Generate a new one in Canvas settings.
You don't have access to that resource. The course may have ended, or you're not enrolled.
Check that your CANVAS_BASE_URL is correct (no trailing slash).
⚠️ Keep your API token secret!
Your API token has the same access as your Canvas account - anyone with it can view your grades, submit assignments, etc.
# Install dependencies
npm install
# Build once
npm run build
# Watch mode (auto-rebuild on changes)
npm run devcanvas-mcp/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── canvas-client.ts # Canvas API wrapper
│ ├── tools/ # Tool implementations
│ │ ├── courses.ts
│ │ ├── assignments.ts
│ │ ├── submissions.ts
│ │ ├── discussions.ts
│ │ ├── modules.ts
│ │ └── search.ts
│ └── types/
│ └── canvas.ts # TypeScript types
├── dist/ # Compiled output
├── package.json
└── tsconfig.jsonContributions welcome! Feel free to:
MIT - Use it however you want!
Built with:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.