# RohanMuppa/brightspace-mcp-server [Health: Active]

**Category:** 🎓 Education  
**Repository:** https://github.com/RohanMuppa/brightspace-mcp-server  
**GitHub Stars:** 59  
**npm Downloads (last month):** 769  
**Views:** 3  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/rohanmuppa-brightspace-mcp-server

## Description
MCP server for D2L Brightspace LMS. Check grades, due dates, assignments, announcements, syllabus, rosters, discussions, and course content. Works with any school that uses Brightspace. Install via npx brightspace-mcp-server@latest.

## Tools
Capabilities this server exposes over MCP:

- **get_my_courses** — Fetch your enrolled Brightspace courses with names, codes, and IDs. Use this when the user asks about their courses, enrolled classes, what they're taking this semester, or needs a course ID for other queries.
- **get_upcoming_due_dates** — Fetch upcoming due dates across all your courses, derived from the due dates on assignments (dropbox folders), quizzes, and graded discussion topics themselves, plus course calendar events such as exams and labs (type: event). Use this when the user asks about deadlines, what's due, upcoming work, or what they need to do this week.
- **get_calendar_events** — Fetch course calendar events — exams, midterms, labs, recitations, review sessions, schedule changes, and deadlines instructors typed straight onto the calendar — across all your courses or one course, in a time window (default: the next 7 days). Use this when the user asks when an exam is, what's on their calendar, or what's happening this week.
- **get_my_grades** — Fetch your grade breakdown for a specific course or all enrolled courses. Shows grade items with points, percentages, and comments. Use this when the user asks about grades, scores, marks, GPA, academic performance, or how they're doing in a class.
- **get_announcements** — Fetch recent announcements from your courses. Can filter to a specific course or get announcements across all courses. Use this when the user asks about announcements, news, updates from instructors, recent posts, or what professors said. Attachments are listed per announcement; fetch them with download_file (newsId + fileId) or read them with get_announcement_files.
- **get_assignments** — Fetch assignments and quizzes for a specific course or all enrolled courses. Shows dropbox submissions and quizzes with due dates, status, and rubric info. Use this when the user asks about assignments, homework, what to submit, quizzes, or assignment details and rubrics.
- **get_assignment_files** — Read the files an instructor attached to an assignment: the spec or instructions PDF, a starter workbook, a rubric document. Call it with just courseId to see which assignments have attachments, then with folderId and fileId to read one. Use this when the user asks what an assignment requires, what the instructions say, or to summarize a handout. Returns the text itself. Use download_file instead when the user wants the file saved to disk.
- **get_announcement_files** — Read the files an instructor attached to an announcement: prompt questions, a rubric, an updated schedule, slides. Call it with just courseId to see which announcements have attachments, then with newsId and fileId to read one. Use this when the user asks what a file attached to an announcement says. Returns the text itself. Use download_file (newsId + fileId) instead when the user wants the file saved to disk.
- **get_course_content** — Fetch the content tree for a course showing modules, topics, files, and links. Use this when the user asks about course materials, lecture slides, uploaded files, content structure, or what's in a course module. Use moduleTitle to filter to a specific module (e.g. 'Labs', 'Staff', 'Homeworks') instead of fetching the entire tree. Use maxDepth to limit recursion depth for a table-of-contents view.
- **download_file** — Download a file from course content, assignment submissions, or an announcement's attachments to a local directory. Use this when the user wants to download, save, or get a file from Brightspace course content, dropbox submissions, or an announcement (newsId + fileId, from get_announcements). IMPORTANT: You MUST ask the user where they want to save the file before calling this tool. Never guess or assume a download directory. After identifying the file to download, suggest a clean readable filename to the user (e.g., 'Lecture 7 - Memory Management.pdf' instead of 'L07_CS251_2026SP_v2.pdf') and ask if they'd like to rename it. Pass their preferred name as customFilename, or omit it to keep the original.
- **get_classlist_emails** — Fetch all email addresses for everyone in a course — instructors, TAs, and students. Use this when the user wants a list of emails for a class, needs to email the whole class, or wants contact info for everyone enrolled.
- **get_roster** — Fetch the roster for a course including instructors, TAs, and optionally students with their names, emails, and roles. Use this when the user asks about classmates, instructor contact info, TA emails, professor names, or who's in a class. By default returns only instructors and TAs for privacy. Use includeStudents to get full class list.
- **get_syllabus** — Fetch the syllabus/overview text and optional attachment for a course. Returns the course overview description as markdown. If downloadPath is provided, also downloads the syllabus attachment (e.g. PDF). IMPORTANT: You MUST ask the user where they want to save the file before calling this tool with a downloadPath.
- **get_discussions** — Fetch discussion board content for a course including forums, topics, and posts. Use this when the user asks about discussion boards, forum posts, class discussions, or wants to see what's been posted. Provide just courseId to list all forums and their topics. Add forumId to get topics and posts for a specific forum. Add both forumId and topicId to get all posts in a specific discussion topic.
- **get_video_transcript** — Read the transcript of a video embedded in course content, such as a recorded lecture or explainer clip. Call it with courseId and topicId from get_course_content (typeFilter: 'video' or 'other'), or with videoUrl directly if you already have the link. Returns transcript text with timestamps, plus title and duration when available. Currently supports Kaltura (e.g. BoilerCast) and YouTube; other platforms return a clear message naming what isn't supported yet. Use offset/maxChars to page through a long transcript. Read only — this never marks the video as watched.
- **get_server_info** — Report which version of the Brightspace MCP server is running, the Node.js runtime, platform, config file path, session state directory, configured school URL, and whether a credential is stored. Use this for troubleshooting or when the user asks which version they have. Never contacts Brightspace and never returns secrets.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "brightspace-mcp-server": {
    "command": "npx",
    "args": ["-y","brightspace-mcp-server@latest"]
  }
}
```

## Documentation

## What RohanMuppa/brightspace-mcp-server does

RohanMuppa/brightspace-mcp-server exposes D2L Brightspace information through the Model Context Protocol. It is designed for students, instructors, and TAs who need an AI client to inspect course data and materials. The server is read-only: it does not submit work or change or delete Brightspace content.

It can identify enrolled courses, retrieve grades and feedback, find assignments and quizzes, calculate upcoming work from several Brightspace sources, and inspect calendar events. It also reads announcements, syllabi, discussion boards, course content trees, attached documents, and supported video transcripts. Roster tools can return instructors and TAs by default, or students when explicitly requested.

## How it works

The server connects to a school’s D2L Brightspace site using the address and sign-in details supplied during setup. Authentication may involve a phone approval, an authenticator code, or another school-specific method. The password is stored in the computer’s native password store rather than in a configuration file.

Most operations begin with a course ID returned by `get_my_courses`. For example, an agent can locate a course, inspect its content tree, and then read an assignment attachment or download a selected file. Course content can be narrowed by module and recursion depth. Long video transcripts support paging, and transcript retrieval is read-only and does not mark a video as watched.

Supported video transcript sources include Kaltura, including BoilerCast-style links, and YouTube. Other video platforms return a message identifying the unsupported source. The server can also report its runtime, configuration paths, configured school URL, and credential state through `get_server_info` without contacting Brightspace or exposing secrets.

## Setup and configuration

Node.js 22 or newer is required. Run the guided setup with:

```bash
npx -y brightspace-mcp-server@latest setup
```

Setup asks for the Brightspace address, username, password, and the school’s sign-in confirmation method. It can connect the server to Claude Desktop, Cursor, Antigravity, Codex, or Claude Code when those applications are available. If an existing `brightspace` MCP entry is found, setup displays it and requests confirmation before replacing it.

For a different MCP client, use `npx -y brightspace-mcp-server@latest` as the server command. On Windows, use `cmd /c npx -y brightspace-mcp-server@latest`. Restart the AI client after setup. School shortcuts are available for Purdue, SUNY, Western University, TU Delft, CUNY, Leiden University, McGill University, Ngee Ann Polytechnic, and Javeriana Cali; other D2L schools can use their Brightspace address directly.

## Tools and capabilities

- `get_my_courses` lists enrolled courses with names, codes, and IDs.
- `get_upcoming_due_dates` combines assignment, quiz, graded discussion, and course calendar deadlines.
- `get_calendar_events` filters exams, labs, recitations, schedule changes, and other calendar entries by course and time range.
- `get_my_grades` returns grade items, points, percentages, and comments for one or all courses.
- `get_announcements`, `get_assignments`, and `get_syllabus` retrieve course updates, coursework, and syllabus material.
- `get_assignment_files` and `get_announcement_files` read attached file contents; `download_file` saves selected content, submissions, or attachments locally.
- `get_course_content` exposes modules, topics, files, and links, with module and depth filters.
- `get_roster` and `get_classlist_emails` provide course people and contact information, with student roster access controlled by an option.
- `get_discussions` reads forums, topics, and posts at progressively narrower scopes.
- `get_video_transcript` returns supported lecture video text with timestamps, titles, and durations when available.

## Limitations and notes

The server only reads Brightspace data. Download operations require a destination path, so the user should choose where a file is saved before the tool is called. Syllabus attachments can also be downloaded when a destination is supplied.

Access depends on the permissions and data exposed by the connected Brightspace account. Student accounts may receive an instructor-access message for instructor-only information, while released personal feedback can remain available. A syllabus maintained in an external system may be represented by a link rather than inline text. YouTube transcripts may require the user to complete a browser sign-in or anti-bot check and paste the transcript manually.

The server supports D2L Brightspace schools, with built-in sign-in handling for several listed institutions. Other schools can use the manual sign-in option when their login page is not recognized.

_Full upstream README: https://allmcps.com/mcp/rohanmuppa-brightspace-mcp-server/readme_

