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 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
- log("DEBUG", "MCP tools registered (13 tools)");
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 (13 tools registered)");
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
+ }
@@ -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";
@@ -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.0",
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",