# io.github.AnonymousOnyx22/brightspace-d2l-mcp (npm · brightspace-d2l-mcp)

D2L Brightspace for AI agents: due dates with submission status, grades and course content.

- Trust score: 74/100 (medium)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-25

## Components

- npm · `brightspace-d2l-mcp`: 74/100 (this document), [markdown](https://verifymcp.io/servers/anonymousonyx22-brightspace-d2l-mcp/brightspace-d2l-mcp.md), [page](https://verifymcp.io/servers/anonymousonyx22-brightspace-d2l-mcp/brightspace-d2l-mcp)

## Channel facts

- Registry: `npm`
- Package: `brightspace-d2l-mcp`
- Version: `1.0.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-25.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 36 of 110 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 8 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 76/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1714 tokens (~131/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 13 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.AnonymousOnyx22/brightspace-d2l-mcp server?

io.github.AnonymousOnyx22/brightspace-d2l-mcp runs locally as an npm package, launched with npx -y brightspace-d2l-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add anonymousonyx22-brightspace-d2l-mcp -- npx -y brightspace-d2l-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "anonymousonyx22-brightspace-d2l-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "brightspace-d2l-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "anonymousonyx22-brightspace-d2l-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "brightspace-d2l-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add anonymousonyx22-brightspace-d2l-mcp -- npx -y brightspace-d2l-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "anonymousonyx22-brightspace-d2l-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "brightspace-d2l-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add anonymousonyx22-brightspace-d2l-mcp --command npx --arg -y --arg brightspace-d2l-mcp
```

### Hermes

```yaml
mcp_servers:
  anonymousonyx22-brightspace-d2l-mcp:
    command: "npx"
    args: ["-y", "brightspace-d2l-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "anonymousonyx22-brightspace-d2l-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "brightspace-d2l-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add anonymousonyx22-brightspace-d2l-mcp -t stdio -c npx -a -y brightspace-d2l-mcp
```

### Other

```json
{
  "mcpServers": {
    "anonymousonyx22-brightspace-d2l-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "brightspace-d2l-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-25 (score 74, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-24 (score 74, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-09-16 (score 70)

First indexed and scored.

## MCP tools (13)

### `get_todo` (~102 tokens)

What To Do Now

Prioritized to-do list across all courses: unfinished work due soon, recently overdue work, work not open yet, items to double-check (quizzes), and work already submitted. Use this first when the user asks what to work on, what's left, or what they should do now.

Input parameters:

- `daysAhead` (integer): How many days ahead to include
- `includeOverdueDays` (integer): Also include unfinished work that was due this many days ago

### `get_my_courses` (~78 tokens)

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.

Input parameters:

- `activeOnly` (boolean): Only return currently active courses. Defaults to the server's configured activeOnly setting (true unless overridden).

### `get_upcoming_due_dates` (~104 tokens)

Get Upcoming Due Dates

Upcoming due dates across all courses, with whether each assignment is already submitted (submissionStatus: submitted, graded, draft, not_submitted, not_open_yet, closed, past_due, restricted, unknown). Dates are UTC ISO strings; convert to the user's local time. Use for deadlines and what's due.

Input parameters:

- `courseId` (integer): Filter to a specific course ID
- `daysAhead` (integer): Number of days ahead to look for due dates

### `get_my_grades` (~84 tokens)

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.

Input parameters:

- `courseId` (integer): Course ID to get grades for. If omitted, returns grades for all enrolled courses.

### `get_announcements` (~89 tokens)

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.

Input parameters:

- `count` (integer): Maximum number of announcements to return
- `courseId` (integer): Course ID to get announcements for. If omitted, returns recent announcements across all courses.

### `get_assignments` (~86 tokens)

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.

Input parameters:

- `courseId` (integer): Course ID to get assignments for. If omitted, returns assignments for all enrolled courses.

### `get_assignment_files` (~224 tokens)

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.

Input parameters:

- `courseId` (integer, required): Course ID whose assignment attachments to look at.
- `extractText` (boolean): Extract readable text from the file. Works for PDF, DOCX, XLSX, PPTX, and plain text.
- `fileId` (integer): Attachment file ID to read. Requires folderId. Omit to list the files without reading them.
- `folderId` (integer): Assignment (dropbox folder) ID. Omit to list every assignment in the course that has attachments.
- `maxChars` (integer): Maximum characters of extracted text to return. The response reports whether it was truncated.

### `get_course_content` (~214 tokens)

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.

Input parameters:

- `courseId` (integer, required): Course ID to get content tree for.
- `maxDepth` (integer): Limit recursive depth of the content tree. Depth 1 returns top-level modules with direct children only. Useful for getting a table of contents without all nested content.
- `moduleTitle` (string): Case-insensitive substring match on module titles. Only returns modules whose title contains this string (e.g. 'Labs', 'Staff', 'Homeworks'). Children of matching modules are included in full.
- `typeFilter` (string): Optional filter to narrow results by content type.

### `download_file` (~256 tokens)

Download File

Download a file from course content or assignment submissions to a local directory. Use this when the user wants to download, save, or get a file from Brightspace course content or dropbox submissions. 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.

Input parameters:

- `courseId` (integer, required): Course ID the file belongs to.
- `customFilename` (string): Custom filename for the downloaded file (include extension). If not provided, uses the original filename from Brightspace.
- `downloadPath` (string, required): Absolute path to the directory where the file should be saved.
- `fileId` (integer): Specific file ID within a dropbox submission.
- `folderId` (integer): Dropbox folder ID (for submission/feedback file downloads).
- `topicId` (integer): Content topic ID to download (for course content files).

### `get_classlist_emails` (~72 tokens)

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.

Input parameters:

- `courseId` (integer, required): Course ID to get emails for.

### `get_roster` (~154 tokens)

Get Course 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.

Input parameters:

- `courseId` (integer, required): Course ID to get roster for.
- `includeStudents` (boolean): Include students in results. Default is instructors and TAs only.
- `limit` (integer): Maximum users to return. Default 100. The response reports the true total and whether it was truncated.
- `searchTerm` (string): Optional search term to filter by name.

### `get_syllabus` (~103 tokens)

Get Course 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.

Input parameters:

- `courseId` (integer, required): Course ID to get syllabus for.
- `downloadPath` (string): Absolute path to the directory where the attachment should be saved.

### `get_discussions` (~148 tokens)

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.

Input parameters:

- `courseId` (integer, required): Course ID to get discussion boards for.
- `forumId` (integer): Specific forum ID to get topics and posts for. If omitted, returns all forums.
- `topicId` (integer): Specific topic ID to get posts for. Requires forumId.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/anonymousonyx22-brightspace-d2l-mcp/brightspace-d2l-mcp#diagnostics

## Score history

- 2026-09-25: 74
- 2026-09-24: 74
- 2026-09-23: 70
- 2026-09-22: 70
- 2026-09-21: 70
- 2026-09-20: 70
- 2026-09-19: 70
- 2026-09-18: 70
- 2026-09-17: 70
- 2026-09-16: 70

## Common questions

### What is the io.github.AnonymousOnyx22/brightspace-d2l-mcp server?

io.github.AnonymousOnyx22/brightspace-d2l-mcp is listed in the public MCP registry as io.github.AnonymousOnyx22/brightspace-d2l-mcp. D2L Brightspace for AI agents: due dates with submission status, grades and course content. This page covers its npm package (brightspace-d2l-mcp).

### Is the io.github.AnonymousOnyx22/brightspace-d2l-mcp server safe to use?

io.github.AnonymousOnyx22/brightspace-d2l-mcp scores 74 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 25 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.AnonymousOnyx22/brightspace-d2l-mcp server expose?

io.github.AnonymousOnyx22/brightspace-d2l-mcp exposes 13 tools: get_todo, get_my_courses, get_upcoming_due_dates, get_my_grades, get_announcements, and 8 more. Their descriptions and schemas cost roughly 1,714 tokens of context every time the server is loaded.

### Is the io.github.AnonymousOnyx22/brightspace-d2l-mcp server still maintained?

io.github.AnonymousOnyx22/brightspace-d2l-mcp is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.AnonymousOnyx22/brightspace-d2l-mcp server under?

io.github.AnonymousOnyx22/brightspace-d2l-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/brightspace-d2l-mcp
- Socket report: https://socket.dev/npm/package/brightspace-d2l-mcp
- Repository: https://github.com/AnonymousOnyx22/brightspace-d2l-mcp
- Changelog RSS feed: https://verifymcp.io/servers/anonymousonyx22-brightspace-d2l-mcp/brightspace-d2l-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/anonymousonyx22-brightspace-d2l-mcp/brightspace-d2l-mcp.json
- HTML version of this page: https://verifymcp.io/servers/anonymousonyx22-brightspace-d2l-mcp/brightspace-d2l-mcp
