brightspace-mcp-server 3.3.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/build/index.js +4 -3
- package/build/tools/get-server-info.js +32 -0
- package/build/tools/index.js +1 -0
- package/build/tools/schemas.js +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -117,6 +117,7 @@ npx -y brightspace-mcp-server@latest auth
|
|
|
117
117
|
| Roster | "Who are the TAs for ECE 264?" · "Get me my instructor's email" |
|
|
118
118
|
| Discussions | "What are people saying in the final project thread?" · "Summarize the latest discussion posts" |
|
|
119
119
|
| Video transcripts | "What did the professor say about pinch-off in Tuesday's lecture recording?" · "Summarize last week's BoilerCast video" — works for Kaltura and YouTube embeds; other platforms report that they aren't supported yet |
|
|
120
|
+
| Troubleshooting | "Which version of the Brightspace server am I running?" · "Where is my Brightspace config file?" — `get_server_info` reports the version, Node runtime, platform, config and session paths, school URL, and whether a credential is stored, without contacting Brightspace or revealing secrets |
|
|
120
121
|
| Planning | "Build me a study schedule based on my upcoming due dates" · "Which class needs the most attention right now?" — pulls from assignments, quizzes, and graded discussion topics (any topic with a due date) |
|
|
121
122
|
|
|
122
123
|
|
package/build/index.js
CHANGED
|
@@ -16,7 +16,7 @@ import { startUpdateChecks } from "./utils/update-checker.js";
|
|
|
16
16
|
import { readFileSync } from "node:fs";
|
|
17
17
|
import { fileURLToPath } from "node:url";
|
|
18
18
|
import { dirname, resolve } from "node:path";
|
|
19
|
-
import { registerGetMyCourses, registerGetUpcomingDueDates, registerGetMyGrades, registerGetAnnouncements, registerGetAssignments, registerGetAssignmentFiles, registerGetCourseContent, registerDownloadFile, registerGetClasslistEmails, registerGetRoster, registerGetSyllabus, registerGetDiscussions, registerGetVideoTranscript, } from "./tools/index.js";
|
|
19
|
+
import { registerGetMyCourses, registerGetUpcomingDueDates, registerGetMyGrades, registerGetAnnouncements, registerGetAssignments, registerGetAssignmentFiles, registerGetCourseContent, registerDownloadFile, registerGetClasslistEmails, registerGetRoster, registerGetSyllabus, registerGetDiscussions, registerGetVideoTranscript, registerGetServerInfo, } from "./tools/index.js";
|
|
20
20
|
const __filename = fileURLToPath(import.meta.url);
|
|
21
21
|
const __dirname = dirname(__filename);
|
|
22
22
|
const PKG_VERSION = (() => {
|
|
@@ -113,11 +113,12 @@ else {
|
|
|
113
113
|
registerGetSyllabus(server, apiClient);
|
|
114
114
|
registerGetDiscussions(server, apiClient);
|
|
115
115
|
registerGetVideoTranscript(server, apiClient);
|
|
116
|
-
|
|
116
|
+
registerGetServerInfo(server, config, PKG_VERSION);
|
|
117
|
+
log("DEBUG", "MCP tools registered (14 tools)");
|
|
117
118
|
// Connect stdio transport
|
|
118
119
|
const transport = new StdioServerTransport();
|
|
119
120
|
await server.connect(transport);
|
|
120
|
-
log("INFO", "Brightspace MCP Server by Rohan Muppa — running on stdio (
|
|
121
|
+
log("INFO", "Brightspace MCP Server by Rohan Muppa — running on stdio (14 tools registered)");
|
|
121
122
|
log("INFO", "Setup: see README.md for MCP client configuration (Claude Desktop, ChatGPT Desktop, Cursor, etc.)");
|
|
122
123
|
}
|
|
123
124
|
catch (error) {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Purdue Brightspace MCP Server
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
|
+
*/
|
|
6
|
+
import { getConfigStorePath } from "../utils/config-store.js";
|
|
7
|
+
import { GetServerInfoSchema } from "./schemas.js";
|
|
8
|
+
import { toolResponse } from "./tool-helpers.js";
|
|
9
|
+
/**
|
|
10
|
+
* Register get_server_info tool.
|
|
11
|
+
*
|
|
12
|
+
* Answers from the startup config alone: no network call, so it can never
|
|
13
|
+
* trigger a sign-in. hasStoredCredential reflects the keychain lookup made at
|
|
14
|
+
* startup, which is the credential this process actually holds. Nothing
|
|
15
|
+
* secret — password, username, token, cookie — is ever included.
|
|
16
|
+
*/
|
|
17
|
+
export function registerGetServerInfo(server, config, version) {
|
|
18
|
+
server.registerTool("get_server_info", {
|
|
19
|
+
title: "Get Server Info",
|
|
20
|
+
description: "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.",
|
|
21
|
+
inputSchema: GetServerInfoSchema,
|
|
22
|
+
}, async () => toolResponse({
|
|
23
|
+
version,
|
|
24
|
+
node: process.version,
|
|
25
|
+
platform: process.platform,
|
|
26
|
+
arch: process.arch,
|
|
27
|
+
configPath: getConfigStorePath(),
|
|
28
|
+
sessionStatePath: config.sessionDir,
|
|
29
|
+
schoolUrl: config.baseUrl,
|
|
30
|
+
hasStoredCredential: config.password !== undefined,
|
|
31
|
+
}));
|
|
32
|
+
}
|
package/build/tools/index.js
CHANGED
|
@@ -17,6 +17,7 @@ export { registerGetRoster } from "./get-roster.js";
|
|
|
17
17
|
export { registerGetSyllabus } from "./get-syllabus.js";
|
|
18
18
|
export { registerGetDiscussions } from "./get-discussions.js";
|
|
19
19
|
export { registerGetVideoTranscript } from "./get-video-transcript.js";
|
|
20
|
+
export { registerGetServerInfo } from "./get-server-info.js";
|
|
20
21
|
// Re-export shared helpers and schemas for convenience
|
|
21
22
|
export { toolResponse, errorResponse, sanitizeError } from "./tool-helpers.js";
|
|
22
23
|
export * from "./schemas.js";
|
package/build/tools/schemas.js
CHANGED
|
@@ -113,3 +113,4 @@ export const GetRosterSchema = z.object({
|
|
|
113
113
|
limit: z.coerce.number().int().positive().max(1000).default(100)
|
|
114
114
|
.describe("Maximum users to return. Default 100. The response reports the true total and whether it was truncated."),
|
|
115
115
|
});
|
|
116
|
+
export const GetServerInfoSchema = z.object({});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "brightspace-mcp-server",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.0",
|
|
4
4
|
"mcpName": "io.github.rohanmuppa/brightspace",
|
|
5
5
|
"description": "MCP server for Brightspace (D2L). Check grades, due dates, assignments, announcements, syllabus, rosters and more via Claude, ChatGPT, Cursor, Windsurf, or any MCP client.",
|
|
6
6
|
"type": "module",
|