MCP server for D2L Brightspace. Multi-auth, 26+ tools, MCP Resources, Prompts, and web dashboard.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
π Full documentation site β
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
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/brightspace)<a href="https://allmcps.com/mcp/brightspace"><img src="https://allmcps.com/api/badge/brightspace?style=directory" alt="Brightspace on AllMCPs" /></a>