The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Brightspace listing page.
MCP server for D2L Brightspace. Gives Claude (and any MCP-compatible client) access to your courses, grades, assignments, content, calendar, and more — with multi-strategy authentication, full MFA support, and production-grade resilience built in.
The interactive wizard handles everything: base URL, auth strategy, MFA, credential storage, and auto-registration with Claude Desktop / Cursor / Windsurf.
For CI pipelines or DevContainers with no TTY, use the non-interactive init command instead:
Deep-dive guides live in docs/ — start with docs/README.md.
| Topic | Doc |
|---|---|
| Setup walkthrough | docs/setup-guide.md |
| Auth strategies | docs/auth-strategies.md |
| Known-good presets (Microsoft AAD, etc.) | docs/presets.md |
| Write operations (submit, post, mark) | docs/writes.md |
| MCP tools reference | docs/tools.md |
| MCP Resources + Prompts | docs/tools.md#mcp-resources |
| Troubleshooting | docs/troubleshooting.md |
| Architecture (DDD) | docs/architecture.md |
| Register with MCP clients | docs/clients.md |
For AI assistants and contributors, AGENTS.md is a one-page map of the repo.
Requirements: Node.js ≥ 20.
Pick the strategy that matches your Brightspace setup. Run npx brightspace-mcp@latest setup and it will walk you through the right one.
Requires a Valence API token from your Brightspace admin panel.
Automates HTTP-level login — no browser window. Supports all MFA strategies including Duo Push.
Launches a headless Chromium instance and automates the login UI. Best for SSO flows (Microsoft Azure AD, SAML) where the login page has complex JavaScript.
The setup wizard includes a Microsoft SSO preset that fills all selectors automatically.
Paste the D2L session cookies from your browser's DevTools. Useful when other strategies are blocked.
| Strategy | When to use |
|---|---|
none | No MFA on your account |
totp | Authenticator app (Google Authenticator, Authy, etc.) |
duo_push | Duo Security — server polls for mobile approval automatically |
manual_prompt | Any TOTP/OTP — server pauses and asks you to paste the code |
Full config file (~/.brightspace-mcp/config.yaml):
Secret values are never stored in plain text. Use ref: notation to point to the actual value:
| Prefix | Example | Description |
|---|---|---|
env:NAME | env:BRIGHTSPACE_API_TOKEN | Read from environment variable |
keychain:service/account | keychain:brightspace-mcp/token | OS keychain (macOS Keychain, GNOME Keyring, Windows Credential Manager) |
file:label | file:api_token | Encrypted file (~/.brightspace-mcp/credentials.enc, AES-256-GCM) |
All tool responses are formatted in your configured timezone and language.
Run brightspace-mcp setup and choose your timezone and language. Or set it in ~/.brightspace-mcp/config.yaml.
When running multiple instances or want cache persistence across restarts, enable Redis:
1. Add the redis section to config:
2. Install ioredis (optional dependency):
3. Start Redis and the server:
The domain cache (courses, grades, assignments, etc.) automatically uses Redis as persistent layer when the redis: section is present in config. Session tokens are stored with TTL derived from the token expiry.
Write tools (submit_assignment, post_discussion_reply, mark_announcement_read) are disabled by default and require two separate opt-ins:
1. Config file:
2. CLI flag:
All write operations:
idempotency_key (8–128 chars). Repeat calls with the same key return the cached response without re-executing.dry_run: true to return a preview response without touching D2L.| Tool | Description |
|---|---|
check_auth | Verify authentication and show the active user identity |
list_my_courses | List all enrolled courses |
get_my_grades | Get grades for a course |
get_assignments | List assignments and dropbox folders |
get_assignment_files | Download and read instructor-posted assignment files |
get_upcoming_due_dates | List assignments due in the next N days |
get_feedback | Read instructor feedback on submitted assignments |
get_syllabus | Fetch the course syllabus |
get_course_content | Browse modules and topics (includes topic IDs) |
get_topic_file | Download and read a content topic file (DOCX, PDF, HTML, plain text) |
get_announcements | List course announcements |
get_discussions | Browse discussion forums and threads |
get_calendar_events | List calendar events in a date range |
get_roster | Get the full course roster |
get_classlist_emails | Get classmate email addresses |
get_my_groups | List group enrollments per course with member rosters |
list_quizzes | List quizzes with attempt counts, time limits, due dates |
get_quiz_attempts | Your attempts on a quiz with scores and timestamps |
list_notifications | User activity feed (announcements, due-date reminders, grade releases) |
search_course | Full-text search across content, announcements, and discussions |
get_audit_log | Local history of write operations (correlation IDs, redacted args) |
get_diagnostics | Show cache stats, circuit breaker state, and version info |
clear_cache | Clear memory and persistent cache backends |
--enable-writes)| Tool | Description |
|---|---|
submit_assignment | Upload a file to a Brightspace Dropbox folder |
post_discussion_reply | Reply to a discussion thread |
mark_announcement_read | Mark an announcement as read |
Four stable URIs for Brightspace content (readable by any MCP client via resources/read):
| URI | Content |
|---|---|
brightspace://{courseId}/syllabus | Course syllabus, HTML stripped |
brightspace://{courseId}/content/topics/{topicId} | Topic file (text extracted from PDF, or base64 fallback) |
brightspace://{courseId}/assignments/{assignmentId}/files | All assignment attachments as text |
brightspace://{courseId}/announcements/{announcementId} | Announcement text |
Obtain IDs from tools like list_my_courses, get_assignments, get_announcements.
Four pre-built prompt templates visible in your MCP client's prompt picker:
| Prompt | Arguments | Purpose |
|---|---|---|
weekly_briefing | none | 7-day overview: due dates, announcements, recent grades |
grade_audit | course_id? | Grade analysis + what you need to pass |
study_planner | days_ahead? (default 7) | Study plan from due dates and calendar |
course_summary | course_id (required) | Full course overview |
Full-screen interactive terminal UI (Ink + React). Six tabs navigated with Tab / → / ←:
| Tab | Contents |
|---|---|
| Inicio | 3-column dashboard: upcoming assignments, 7-day calendar agenda, recent announcements |
| Cursos | Live-search course list → drill into a course → sub-tabs Tareas / Notas / Anuncios |
| Calendario | 30-day event agenda across all active courses |
| Config | Profile summary, field-by-field form editor (dropdowns from schema) or $EDITOR |
| Caché | Hit rate, miss count, clear button |
| Logs | Audit log (last 50 entries, / to filter by tool name) |
Press Ctrl+C to exit.
See docs/clients.md for Claude Desktop, Cursor, and Windsurf snippets, or run brightspace-mcp setup which auto-detects and registers for you.
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
The config.yaml inside ~/.brightspace-mcp/ must have the redis: section pointing to redis://redis:6379 when using the compose profile.
assignments, authentication, calendar, communications, content, courses, grades, groups, notifications, quizzes) with clean domain / application / infrastructure separationMIT © Jhostin Aleck