Skip to main content
Glama

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-server

This will automatically install Chromium for browser automation.

Setup

1. First-time authentication

d2l-mcp-auth

This 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

get_assignments

List all assignments with due dates and instructions

get_assignment

Get full details for a specific assignment

get_assignment_submissions

Get your submissions, grades, and feedback

Course Content

Tool

Description

get_course_content

Get complete course syllabus/structure

get_course_topic

Get details for a specific topic/lecture

get_course_modules

Get main sections/modules of a course

get_course_module

Get contents within a specific module

Grades & Calendar

Tool

Description

get_my_grades

Get all your grades with scores and feedback

get_upcoming_due_dates

Get calendar events and deadlines

Other

Tool

Description

get_announcements

Get course announcements from instructors

get_my_courses

List all your enrolled courses

download_file

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

D2L_HOST

Your Brightspace hostname

learn.ul.ie

D2L_COURSE_ID

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-auth if your session expires

Development

# Run tests
npm test

# Run integration tests (requires auth)
npm run test:integration

# Watch mode
npm run test:watch

License

MIT

Available Tools

12 tools
download_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

    A4.1/5.0

    Scored across 12 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers