D2L Brightspace MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@D2L Brightspace MCP Server what assignments are due this week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
D2L Brightspace MCP Server
An MCP (Model Context Protocol) server that provides AI assistants with tools to interact with D2L Brightspace LMS.
⚠️ WARNING! ⚠️
This server should not be used in any way to engage in academic misconduct. Do not use this MCP server to cheat on any assignments, or to gain an unfair advantage over other students. This server is only intended for use to enable agents to better understand your assignment scheduling and to help with your learning of the course material.
I do not condone the use of this server in any activities that would violate the user's university's Academic Code of Conduct.
Related MCP server: Canvas LMS MCP Server
Features
Automated SSO authentication via Playwright (handles Microsoft/institutional login)
Persistent session storage - login once, use for hours
12 tools for accessing assignments, grades, calendar, announcements, course content
File downloads with automatic text extraction (docx, txt, etc.)
LLM-optimized responses - clean, token-efficient output
Installation
npm install -g d2l-mcp-serverThis will automatically install Chromium for browser automation.
Setup
1. First-time authentication
d2l-mcp-authThis opens a browser window where you log in to Brightspace. Your session is saved to ~/.d2l-session/.
2. Configure Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"d2l": {
"command": "d2l-mcp",
"env": {
"D2L_HOST": "learn.ul.ie",
"D2L_COURSE_ID": "68929"
}
}
}
}Available Tools
Assignments
Tool | Description |
| List all assignments with due dates and instructions |
| Get full details for a specific assignment |
| Get your submissions, grades, and feedback |
Course Content
Tool | Description |
| Get complete course syllabus/structure |
| Get details for a specific topic/lecture |
| Get main sections/modules of a course |
| Get contents within a specific module |
Grades & Calendar
Tool | Description |
| Get all your grades with scores and feedback |
| Get calendar events and deadlines |
Other
Tool | Description |
| Get course announcements from instructors |
| List all your enrolled courses |
| Download and extract content from course files |
Example Prompts
Once connected to Claude, you can ask things like:
"What assignments are due this week?"
"Show me my grades"
"What announcements have been posted?"
"Download the weekly report template"
"What's the syllabus for this course?"
Environment Variables
Variable | Description | Default |
| Your Brightspace hostname |
|
| Default course ID (optional) | none |
Setting D2L_COURSE_ID allows you to omit the course ID from tool calls.
Session Management
Token expiry: Auth tokens expire after ~1 hour but auto-refresh using the saved browser session
Session expiry: Browser sessions expire after ~24h of inactivity
Re-authenticate: Run
d2l-mcp-authif your session expires
Development
# Run tests
npm test
# Run integration tests (requires auth)
npm run test:integration
# Watch mode
npm run test:watchLicense
MIT
Available Tools
12 toolsdownload_fileA
Download a file from D2L Brightspace. Provide a D2L content URL (e.g., https://learn.ul.ie/content/enforced/68929-CS4444.../file.docx or /content/enforced/...). The file will be saved to your Downloads folder by default, or to a custom path if specified. Returns the local file path, filename, size, and content type. Use this to download lecture slides, assignment files, course materials, or any file linked in course content.
Inputs: url (required), savePath.
get_announcementsA
Get course announcements/news items from instructors. Returns: title, body (text and HTML), created date, author, attachments, whether it's pinned. Use to answer: "Any new announcements?", "What did the professor post?", "Are there any updates?", "What's the latest news?"
Inputs: orgUnitId.
get_assignmentA
Get full details about a specific assignment including complete instructions, due date, point value, allowed file types, and grading rubrics. Use after get_assignments when you need more detail about one assignment.
Inputs: assignmentId (required), orgUnitId.
get_assignmentsA
List all assignments for a course with their due dates and instructions. Returns: Name, DueDate (ISO 8601 format - compare with current date to find upcoming/overdue), instructions (in CustomInstructions.Text), point value (Assessment.ScoreDenominator), and Id (needed for get_assignment_submissions). Use this to answer: "What assignments do I have?", "What's due this week?", "What are my upcoming deadlines?", "Show me assignment instructions", "What homework is due soon?"
Inputs: orgUnitId.
get_assignment_submissionsA
Get the user's submissions for an assignment. Shows submitted files, submission timestamps, feedback comments, and grades received. Use to answer: "Did I submit this assignment?", "What grade did I get?", "When did I submit?", "What feedback did I receive?"
Inputs: assignmentId (required), orgUnitId.
get_course_contentA
Get the complete course syllabus/structure including all modules, topics, lectures, and learning materials. Returns module titles, descriptions, topic names with URLs, and linked assignments. Use to answer: "What's in this course?", "Show me the syllabus", "What topics are covered?", "What lectures are available?", "What reading materials do I have?"
Inputs: orgUnitId.
get_course_moduleA
Get all contents within a specific course module/section including child topics, sub-modules, and materials. Use to explore one section of the course in detail.
Inputs: moduleId (required), orgUnitId.
get_course_modulesA
Get the main sections/modules of a course. Returns module names, descriptions, and ModuleIds. Use for a high-level overview of course organization.
Inputs: orgUnitId.
get_course_topicA
Get details about a specific course topic/lecture/reading including title, description, URL, and linked assignments. Use after get_course_content to get more info about a specific item.
Inputs: topicId (required), orgUnitId.
get_my_coursesA
List all courses you're enrolled in. Returns: course name, course code, org unit ID (needed for other tools), access status, start/end dates. Use to answer: "What courses am I in?", "Show my classes", "What's the course ID for X?", "List my enrollments"
Inputs: no named parameters.
get_my_gradesA
Get your grades for a course. Returns all grade items with your scores, including: grade item name, points earned, points possible, percentage (DisplayedGrade), and any feedback comments. Use to answer: "What are my grades?", "What's my score on the quiz?", "How did I do on the assignment?", "What grade did I get?"
Inputs: orgUnitId.
get_upcoming_due_datesA
Get calendar events and due dates for a course within a time range. Returns: event title, start/end date, associated entity (assignment, quiz, etc.), course name. By default returns events from 7 days ago to 30 days ahead. Use to answer: "What's due this week?", "When is the assignment due?", "What are my upcoming deadlines?", "What do I need to submit?"
Inputs: orgUnitId, daysBack, daysAhead.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Most tools have distinct purposes, but there is some overlap between get_course_content, get_course_modules, and get_course_module, which could cause confusion about which to use for exploring course structure. Similarly, get_assignments and get_upcoming_due_dates both handle assignment deadlines, though their scopes differ (list vs. calendar view). Descriptions help clarify, but minor ambiguity exists.
All tool names follow a consistent verb_noun pattern with clear, descriptive verbs (e.g., get_, download_) and nouns (e.g., announcements, assignments). The naming is uniform and predictable, making it easy to understand each tool's function at a glance.
With 12 tools, the server is well-scoped for managing a D2L Brightspace learning management system. Each tool serves a specific purpose in the domain, such as accessing courses, content, assignments, announcements, and grades, without being overly broad or sparse.
The tool set covers core LMS functionalities like course listing, content browsing, assignment management, announcements, and grades. Minor gaps include no tools for submitting assignments, posting to discussions, or interacting with quizzes, which might limit some agent workflows, but the existing tools support most common student queries.
Maintenance
Related MCP Connectors
Connect AI assistants to Edusign attendance, courses, learners, documents, and API docs via OAuth.
Create, edit, translate, and export SCORM eLearning modules from a connected AI assistant.
Web search, data extraction and controlled browser automation for AI assistants via OAuth.
Connect AI assistants to your approved computer for files, commands, browser and desktop tasks.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceConnects Canvas LMS to AI assistants, enabling users to list courses and retrieve assignment details through natural language. It features secure multi-institution support with encrypted token storage and a simplified setup process for students.2-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access Canvas LMS course content, including assignments, modules, announcements, and files, to help students manage their coursework.14 npmISC
- FlicenseNot gradedqualityBmaintenanceEnables LLMs to interact with a Brightspace account to retrieve courses, grades, due items, quizzes, course content, and files, including batch operations across multiple courses.-
- AlicenseAqualityBmaintenanceEnables AI assistants to connect to D2L Brightspace and retrieve grades, assignments, announcements, and course content on demand via natural language, working across clients like Claude, ChatGPT, Cursor, and Windsurf.2124,195 npmMIT