Canvas LMS Integration
Status: Production
Overview
Section titled โOverviewโCanvas LMS integration provides real-time academic data for the School domain: courses, assignments, grades, announcements. Data flows through an MCP server to multiple consumers (dashboard, alerts, RAG pipeline).
Data Flow
Section titled โData FlowโCanvas LMS API โ โผcanvas-lms MCP Server (6 tools) โ โโโโบ canvas_sync.py โ assignments JSON + grades YAML + courses YAML โ โโโโบ grade_alerts.py โ Telegram notifications on grade changes โ โโโโบ deadline-watcher.sh โ 48h deadline alerts via Telegram โ โโโโบ morning-briefing.sh โ Academic alerts in daily briefing โ โโโโบ rag_ingest.py โ ChromaDB vector storeMCP Server Tools
Section titled โMCP Server Toolsโ| Tool | Purpose |
|---|---|
| list_courses | All enrolled courses |
| list_assignments | Assignments for a course (with due dates, points) |
| get_assignment | Single assignment details |
| get_grades | Current grades per course |
| list_announcements | Recent course announcements |
| get_course_pages | Course content pages (wiki) |
Canvas Sync
Section titled โCanvas Syncโ- Cron: daily at 7 AM
- Pulls all assignments across enrolled courses
- Saves to local JSON cache
- 120s timeout via perl alarm wrapper
- Handles courses with disabled pages gracefully
Grade Tracking
Section titled โGrade Trackingโ- Per-course: current grade, letter, trend, alerts
- Critical threshold: C- or below triggers alert
- Grade change detection: compares current vs previous sync
- Telegram alert on any grade change
RAG Pipeline
Section titled โRAG PipelineโComponents
Section titled โComponentsโ- ChromaDB โ vector store (persistent local storage)
- Ollama nomic-embed-text โ embedding model (137M params, local, zero cost)
- lightning-whisper-mlx โ audio transcription (Apple Silicon optimized)
Scripts
Section titled โScriptsโ| Script | Purpose |
|---|---|
| rag_ingest.py | 512-token recursive chunking, 100 overlap, ingest to ChromaDB |
| rag_query.py | CLI cross-course semantic search with distance ranking |
| canvas_to_rag.sh | Cron-ready Canvas pages to ChromaDB sync |
| transcribe.py | Whisper audio transcription with auto-ingest |
Performance
Section titled โPerformanceโ- 88 chunks ingested across 3 courses
- Query accuracy: 0.24 distance for relevant results
- 5 courses returned 404 on pages (Canvas pages disabled by instructor)