Skip to main content
Glama

nyu-brightspace-mcp

MCP server for NYU Brightspace (brightspace.nyu.edu). Read-only: deadlines, assignments, grades, announcements, course content.

A rewrite of brightspace-mcp-server (Purdue-oriented, Microsoft Entra SSO) for NYU's Shibboleth + Duo login and NYU course conventions.

Setup

bun install
bun run build
node dist/index.js setup    # optional: NetID + password (macOS Keychain) for auto-fill
node dist/index.js login    # Chrome window: NetID + Duo, tick "trust this browser"
node dist/index.js status

Register with Claude Code:

claude mcp add -s user brightspace -- node /absolute/path/to/nyu-brightspace-mcp/dist/index.js

Login runs a real browser through playwright-core, trying in order: installed Google Chrome, Microsoft Edge, then Playwright's Chromium if already downloaded. Nothing is downloaded at install time, so ignore-scripts=true in .npmrc does not matter. With none of them installed, login fails with a hint to install Chrome or run npx playwright install chromium.

Related MCP server: Moodle MCP for Students

Auth model

  • login saves the full browser storage state (Brightspace, Shibboleth and Duo cookies) to ~/.nyu-brightspace-mcp/session.json (mode 0600).

  • API calls use the Brightspace session cookies directly.

  • When the Brightspace session expires, the server silently re-runs the SSO flow in headless Chrome. It succeeds without Duo while the Shibboleth session or Duo "trusted browser" cookie is alive. It never waits on a Duo push in the background; if interaction is needed, the tool error tells the model to call login, which opens a visible window.

  • With setup, the NetID password lives in the macOS Keychain (service nyu-brightspace-mcp) and is auto-filled on the Shibboleth page. Env vars NYU_NETID / NYU_PASSWORD also work.

Tools

Tool

What it does

get_upcoming

Deadlines across current courses from one calendar call, with submission/completion status, plus deadline sentences found in recent announcements (for Gradescope-only courses)

list_courses

Current-semester courses by default; parses FA26_CSCI-UA_310_1_040 style codes

get_assignments / get_assignment

Dropbox folders, submission status, scores, feedback, instructions, attachments

get_quizzes

Quiz windows, time limits, attempts

get_grades

Released grade items with weights and the final grade

get_announcements

Newest first, as markdown

get_content / search_content

Module outline with topicIds, file types, external tools (Gradescope, Ed), links

read_content

Text from PDF (per page), DOCX, PPTX, HTML, ZIP (inlines code/tex), plain text

download_file

Saves a topic file or assignment attachment to ~/Downloads/brightspace/<course>/

get_discussions, get_classlist

Brightspace forums; course staff

auth_status, login

Session check; interactive NetID + Duo

api_get

Raw GET on any Valence path (/le/..., /lp/...)

Every course argument takes an org unit id or text: cs310, CSCI-UA 480, algorithms, OS, or a word from the course's module titles (crypto).

Config

Env var

Default

NYU_BRIGHTSPACE_URL

https://brightspace.nyu.edu

NYU_BRIGHTSPACE_TZ

America/New_York

NYU_BRIGHTSPACE_HOME

~/.nyu-brightspace-mcp

NYU_BRIGHTSPACE_DOWNLOADS

~/Downloads/brightspace

NYU_BRIGHTSPACE_CHROME_CHANNEL

unset: try chrome, msedge, chromium; set to pin one

License

MIT

Available Tools

16 tools
api_getA
Read-only

Escape hatch: GET any Brightspace Valence API path and return raw JSON. Use /lp/... or /le/... to auto-insert the version (e.g. /le/123456/news/), or a full /d2l/api/... path.

Inputs: path (required).

auth_statusA
Read-only

Check whether the NYU Brightspace session works and who is logged in.

Inputs: no named parameters.

download_fileA

Save a file locally: a content topic (topicId) or an assignment attachment (assignmentId + fileId from get_assignment).

Inputs: course (required), dir, fileId, topicId, +1 more.

get_announcementsA
Read-only

Course announcements, newest first, as markdown. Omit course for all current courses.

Inputs: days, full, limit, course.

get_assignmentA
Read-only

One assignment in full: instructions, attached files/links, my submissions, feedback and score.

Inputs: course (required), assignmentId (required).

get_assignmentsB
Read-only

Brightspace assignments (dropbox folders) with due dates, submission status and scores. Omit course for all current courses.

Inputs: course.

get_classlistA
Read-only

Course staff (instructors, TAs) with NetIDs and emails; everyone=true lists all students too.

Inputs: course (required), everyone.

get_contentA
Read-only

Course content outline (modules and topics with topicIds, file types, links, due dates). Shows external tools like Gradescope/Ed and course website links.

Inputs: course (required), module.

get_discussionsC
Read-only

Brightspace discussion forums/topics; pass forumId + topicId to read posts.

Inputs: course (required), forumId, topicId.

get_gradesA
Read-only

My released grades per item (points, weight, comments) and the final grade if released.

Inputs: course.

get_quizzesB
Read-only

Brightspace quizzes/exams with open/due/close times, time limits and attempts.

Inputs: course.

get_upcomingA
Read-only

Upcoming deadlines across current courses (or one course): assignments with submission status, quizzes, readings with completion status, and instructor calendar events, in NYU local time. Also scans recent announcements for deadlines that live outside Brightspace (Gradescope, course websites). Start here for 'what's due'.

Inputs: days, course, pastDays, includeDone, +1 more.

list_coursesA
Read-only

List Brightspace courses with ids. Defaults to the current NYU semester; parses NYU codes like FA26_CSCI-UA_310_1_040.

Inputs: term.

loginA

Open a Chrome window for NYU NetID + Duo login. Use when other tools report the session is not logged in. The user must complete Duo on their phone. Waits up to ~100s; if still pending, tell the user to finish and call auth_status.

Inputs: no named parameters.

read_contentB
Read-only

Read a content topic: extracts text from PDF (per page), DOCX, PPTX, HTML, ZIP (lists files and inlines code) and plain text/code. Binary files are saved to ~/Downloads/brightspace//.

Inputs: course (required), topicId (required), dir, save, +2 more.

search_contentA
Read-only

Find modules/topics by title across current courses, e.g. "syllabus", "hw3", "lecture 5 slides".

Inputs: query (required), course.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 16 tools

    Disambiguation5/5

    Each tool maps to a distinct Brightspace resource or action: auth, courses, assignments, quizzes, grades, announcements, content outline, content reading, file download, content search, discussions, roster, and API escape hatch. get_upcoming aggregates several sources but is clearly the 'what's due' summary, not a duplicate of the detail tools.

    Naming Consistency4/5

    Most tools use lower_snake_case verb_noun names (list_courses, get_assignments, read_content, download_file, search_content), giving a predictable pattern. login is a bare verb and api_get reverses the object-verb order, so the pattern is not perfectly uniform.

    Tool Count4/5

    16 tools is slightly above the ideal 3–15 range, but the broad Brightspace feature set (auth, courses, assignments, quizzes, grades, content, discussions, roster) justifies the count. No tool feels redundant, though a few could potentially be consolidated.

    Completeness4/5

    The read-only workflow is well covered: listing courses, retrieving deadlines/assignments/grades/announcements, reading and downloading content, searching, discussions, and classlist all have clear entry points and no dead ends. Missing write operations like assignment submission or discussion posting are notable if the server is expected to be a full Brightspace interface, but they appear out of scope for this read-oriented toolset.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Enables AI assistants to read a student's courses, assignments, exam schedule, weekly course content, and Panopto lecture recordings with timestamped transcripts (transcribing audio when no captions exist). Access is read-only and uses the user's own credentials, which stay local.
      7
      MIT