Skip to main content
Glama
README.md
# 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

```sh
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:

```sh
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`.

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

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues