Releases: vishalsachdev/canvas-mcp
v1.0.7 - File Upload Support
What's New
File Upload Tool 📁
New upload_course_file tool enables uploading files from the local filesystem to Canvas courses.
Features
- Canvas 3-step upload protocol - Handles the complete upload flow transparently
- Comprehensive validation - File existence, readability, size limits (100MB), extension whitelist
- MIME type detection - Automatic content-type detection from file extension
- Filename sanitization - Cleans special characters for safe Canvas storage
- Security-first - Whitelist approach blocks potentially dangerous file types
Usage Example
# Upload a PDF to Canvas
upload_course_file("CS101", "/path/to/syllabus.pdf")
# → "✅ Uploaded! File ID: 12345, Name: syllabus.pdf"
# Then add to a module
add_module_item("CS101", module_id, "File", content_id=12345)
# Or attach to a message
send_conversation("CS101", ["student_id"], "Subject", "Body", attachment_ids=["12345"])Parameters
course_identifier- Course code or IDfile_path- Local filesystem path to uploadfolder_path(optional) - Canvas folder destinationdisplay_name(optional) - Override filename in Canvason_duplicate- "rename" (default) or "overwrite"
New Files
src/canvas_mcp/core/file_validation.py- Validation utilitiessrc/canvas_mcp/tools/files.py- Upload tool implementationtests/tools/test_files.py- 33 unit tests
Testing
- 33 new tests for file upload functionality
- 183 total tests passing
Full Changelog: v1.0.6...v1.0.7
v1.0.5 - Claude Code Skills & Documentation Website
What's New
🎯 Claude Code Skills
Pre-built workflows that combine multiple tools into one-command actions:
| Skill | For | Description |
|---|---|---|
/canvas-morning-check |
Educators | Course health check: submission rates, struggling students, grade distribution, upcoming deadlines |
/canvas-week-plan |
Students | Weekly planner: all due dates, submission status, grades, peer reviews across courses |
🌐 GitHub Pages Website
Beautiful documentation site at vishalsachdev.github.io/canvas-mcp
- Modern dark theme with teal accent
- Responsive design
- Full HTML documentation for Students, Educators, and Developers
- Skills showcase with "Request a Skill" feature
📖 HTML Documentation
Want a custom skill? Submit a request describing your repetitive workflow!
Full Changelog: v1.0.4...v1.0.5
v1.0.4 - Major Performance & Feature Update
Canvas MCP v1.0.4
🚀 Major Features
Code Execution Environment
- TypeScript code execution API for token-efficient bulk operations (99.7% token savings)
- Execute custom TypeScript code for complex Canvas operations
- Dramatically reduces token usage for batch processing
New MCP Tools
bulk_grade_submissions- Efficient batch grading with optional rubric assessmentbulk_grade_discussions- Token-efficient discussion grading APIsearch_canvas_tools- Discover available MCP tools dynamically
✨ Improvements
- MCP 2.10 Compliance - Updated FastMCP to >=2.10.0
- Structured Logging - Standardized error handling and logging
- Flexible Grading - Rubric assessment now optional for simple grading scenarios
- GitHub Actions Integration - Automated workflows and chat session exports
- Enhanced Validation - Added validation for maxPeerReviewPoints configuration
🐛 Fixes
- Improved error handling with direct API calls
- Concurrent processing optimization
- Better validation and feedback
📚 Documentation
- Complete documentation for all new tools
- Code execution examples
- Bulk operations guides
Token Efficiency: The new code execution environment can reduce token usage by 99.7% for bulk operations compared to traditional tool-based approaches.
v1.0.3 - Critical Fix: grade_with_rubric
Critical Bug Fix
This release fixes a critical bug in the grade_with_rubric tool that prevented grades from being saved to the Canvas gradebook.
Fixed
🔧 grade_with_rubric now works correctly
The tool was completely non-functional due to incorrect API data format. Canvas requires form-encoded parameters with bracket notation, but the tool was sending JSON.
Changes:
- ✅ Changed parameter type from
stringtodict[str, Any]- no more JSON parsing errors - ✅ Added form data encoding with Canvas bracket notation (
rubric_assessment[criterion_id][points]=value) - ✅ Added pre-flight validation to check if rubric is configured for grading (
use_for_grading=true) - ✅ Enhanced error messages with actionable fix instructions
- ✅ Updated documentation with clear examples and format specifications
Before: Canvas accepted requests but silently failed to save grades
After: Grades are properly saved to gradebook with validation checks
Breaking Change
The rubric_assessment parameter format has changed:
Old format (broken):
{
"rubric_assessment": "{\"_8027\": {\"points\": 2}}"
}New format (working):
{
"rubric_assessment": {
"_8027": {
"points": 2,
"rating_id": "blank",
"comments": "Great work!"
}
}
}Impact
If you were using grade_with_rubric before this release:
- ❌ Grades were NOT being saved (tool was non-functional)
- ✅ Now grades will be saved correctly
⚠️ You'll need to update your code to use the new dict format
Additional Notes
The tool now validates that the rubric is properly configured before attempting to grade. If use_for_grading is false, you'll receive a clear error message with instructions to fix the configuration.
Full Changelog: v1.0.2...v1.0.3