brightspace-mcp-server 1.5.2 → 1.6.1

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
@@ -85,7 +85,8 @@ npx brightspace-mcp-server auth
85
85
  |-------|---------|
86
86
  | Grades | "Am I passing all my classes?" · "Compare my grades across all courses" |
87
87
  | Assignments | "What's due in the next 48 hours?" · "Summarize every assignment I haven't turned in yet" · "Give me the link to submit HW 4" |
88
- | Quizzes | "How many attempts do I have left on Quiz 3?" · "Which quizzes close this week?" |
88
+ | Quizzes | "Which quizzes close this week?" · "Is Quiz 3 timed, and does it have a grace period?" |
89
+ | Assignment files | "What does the lab 4 spec actually ask for?" · "Summarize the rubric attached to the project" |
89
90
  | Exams | "Is there a midterm in the gradebook that isn't on my assignments list?" |
90
91
  | Announcements | "Did any professor post something important today?" · "What did my CS prof announce this week?" |
91
92
  | Course content | "Find the midterm review slides" · "Download every PDF from Module 5" |
@@ -131,6 +132,12 @@ If you ever suspect you're on an old version (the auth banner prints the version
131
132
  npx clear-npx-cache
132
133
  ```
133
134
 
135
+ ## What's new in 1.6.0
136
+
137
+ - **Read the files attached to an assignment.** The spec PDF, the starter workbook, the rubric. Ask what an assignment requires and the answer comes from the actual document, not just its one-line description. Handles PDF, Word, Excel, and PowerPoint.
138
+ - The roster no longer hides people: a class larger than the limit now reports the true total and says it was truncated, and the limit can be raised.
139
+ - Fixed a case where a class list or course list could stop short of the last page.
140
+
134
141
  ## What's new in 1.5.0
135
142
 
136
143
  - Token refresh no longer opens a browser: the access token is re-minted from your session cookie in about 200 ms.
@@ -84,6 +84,11 @@ function nextPath(firstPath, next) {
84
84
  const url = new URL(next);
85
85
  return `${url.pathname}${url.search}`;
86
86
  }
87
+ // A Next that begins with a slash is already a path, not a bookmark.
88
+ // Appending it as one would ask for a page that does not exist.
89
+ if (next.startsWith("/")) {
90
+ return next;
91
+ }
87
92
  return withBookmark(firstPath, next);
88
93
  }
89
94
  //# sourceMappingURL=paginate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paginate.js","sourceRoot":"","sources":["../../src/api/paginate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paginate.js","sourceRoot":"","sources":["../../src/api/paginate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC;;;;;;GAMG;AAEH,MAAM,SAAS,GAAG,GAAG,CAAC;AAmBtB,mFAAmF;AACnF,SAAS,YAAY,CAAC,SAAiB,EAAE,QAAgB;IACvD,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACtD,OAAO,GAAG,SAAS,GAAG,SAAS,YAAY,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAuB,EACvB,SAAiB,EACjB,OAAyB;IAEzB,MAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,IAAI,GAAkB,SAAS,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,IAAI,KAAK,IAAI,EAAE,CAAC;QACrB,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,GAAG,CAAC,MAAM,EAAE,6BAA6B,SAAS,eAAe,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAClF,MAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAkB,MAAM,SAAS,CAAC,GAAG,CAAgB,IAAI,EAAE,OAAO,CAAC,CAAC;QAClF,KAAK,IAAI,CAAC,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,QAAQ,EAAE,UAAU,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,YAAY,IAAI,CAAC,QAAQ;YAAE,MAAM;QAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,MAAM,EAAE,oDAAoD,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACjF,MAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnB,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAuB,EACvB,SAAiB,EACjB,OAAyB;IAEzB,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,IAAI,GAAkB,SAAS,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO,IAAI,KAAK,IAAI,EAAE,CAAC;QACrB,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,GAAG,CAAC,MAAM,EAAE,6BAA6B,SAAS,eAAe,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAClF,MAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAoB,MAAM,SAAS,CAAC,GAAG,CAAkB,IAAI,EAAE,OAAO,CAAC,CAAC;QACtF,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAE3C,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,GAAG,CAAC,MAAM,EAAE,qDAAqD,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAClF,MAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+CAA+C;AAC/C,SAAS,QAAQ,CAAC,SAAiB,EAAE,IAAY;IAC/C,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;IACD,qEAAqE;IACrE,gEAAgE;IAChE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/auth/session-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,SAAS,EAA8B,MAAM,mBAAmB,CAAC;AAgB/E;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,UAAU,CAAC,EAAE,MAAM;IAK/B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAUjB;;;OAGG;IACH,OAAO,CAAC,OAAO;IAkBf;;;OAGG;IACH,OAAO,CAAC,OAAO;IAcf;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC3C;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA6BvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B"}
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/auth/session-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,SAAS,EAA8B,MAAM,mBAAmB,CAAC;AAgB/E;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,UAAU,CAAC,EAAE,MAAM;IAK/B;;;OAGG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAcjB;;;OAGG;IACH,OAAO,CAAC,OAAO;IAkBf;;;OAGG;IACH,OAAO,CAAC,OAAO;IAcf;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC3C;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAuCvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B"}
@@ -59,12 +59,16 @@ export class SessionStore {
59
59
  * Uses a per-installation random salt to prevent precomputation attacks.
60
60
  */
61
61
  deriveKey() {
62
+ // Deliberately NOT the hostname. On a campus network os.hostname() is a
63
+ // DHCP reverse-DNS name (pal-nat186-166-147.itap.purdue.edu), so it
64
+ // changes with the lease. Keying on it meant that moving between networks
65
+ // silently made the saved session undecryptable, and the user paid for it
66
+ // with a full MFA login. The per-install random salt already provides the
67
+ // uniqueness the hostname was there for, and it is stable.
62
68
  const username = os.userInfo().username;
63
- const hostname = os.hostname();
64
- const keyMaterial = username + hostname;
65
69
  const salt = this.getOrCreateSalt();
66
70
  // Use scrypt to derive a 32-byte key (256 bits for AES-256)
67
- return crypto.scryptSync(keyMaterial, salt, 32);
71
+ return crypto.scryptSync(username, salt, 32);
68
72
  }
69
73
  /**
70
74
  * Encrypt plaintext using AES-256-GCM.
@@ -154,6 +158,17 @@ export class SessionStore {
154
158
  catch (error) {
155
159
  const err = error instanceof Error ? error : new Error(String(error));
156
160
  log("WARN", `Failed to load session: ${err.message}`);
161
+ // A session this install cannot read is never going to become readable:
162
+ // it was written by an older build whose key derivation differed, or the
163
+ // file is damaged. Removing it means the next run does one clean login
164
+ // instead of logging the same warning on every start forever.
165
+ try {
166
+ await fs.rm(this.sessionFilePath, { force: true });
167
+ log("DEBUG", "Removed the unreadable session file, a fresh login is needed");
168
+ }
169
+ catch {
170
+ // Nothing more to do: the caller re-authenticates either way.
171
+ }
157
172
  // Return null instead of throwing - graceful degradation
158
173
  return null;
159
174
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/auth/session-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/auth/session-store.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -16,7 +16,7 @@ import { initUpdateChecker, getUpdateNotice } 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, registerGetCourseContent, registerDownloadFile, registerGetClasslistEmails, registerGetRoster, registerGetSyllabus, registerGetDiscussions, } from "./tools/index.js";
19
+ import { registerGetMyCourses, registerGetUpcomingDueDates, registerGetMyGrades, registerGetAnnouncements, registerGetAssignments, registerGetAssignmentFiles, registerGetCourseContent, registerDownloadFile, registerGetClasslistEmails, registerGetRoster, registerGetSyllabus, registerGetDiscussions, } from "./tools/index.js";
20
20
  const __filename = fileURLToPath(import.meta.url);
21
21
  const __dirname = dirname(__filename);
22
22
  const PKG_VERSION = (() => {
@@ -149,13 +149,14 @@ else {
149
149
  registerGetMyGrades(server, apiClient, config);
150
150
  registerGetAnnouncements(server, apiClient, config);
151
151
  registerGetAssignments(server, apiClient, config);
152
+ registerGetAssignmentFiles(server, apiClient, config.baseUrl);
152
153
  registerGetCourseContent(server, apiClient);
153
154
  registerDownloadFile(server, apiClient);
154
155
  registerGetClasslistEmails(server, apiClient);
155
156
  registerGetRoster(server, apiClient);
156
157
  registerGetSyllabus(server, apiClient);
157
158
  registerGetDiscussions(server, apiClient);
158
- log("DEBUG", "MCP tools registered (11 core tools, total 12 with check_auth)");
159
+ log("DEBUG", "MCP tools registered (12 core tools, total 13 with check_auth)");
159
160
  // Connect stdio transport
160
161
  const transport = new StdioServerTransport();
161
162
  await server.connect(transport);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
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 { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ import { D2LApiClient } from "../api/index.js";
8
+ type FileKind = "pdf" | "docx" | "xlsx" | "pptx" | "image" | "text" | "other";
9
+ export declare function fileKind(fileName: string): FileKind;
10
+ export declare function registerGetAssignmentFiles(server: McpServer, apiClient: D2LApiClient, baseUrl?: string): void;
11
+ export {};
12
+ //# sourceMappingURL=get-assignment-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-assignment-files.d.ts","sourceRoot":"","sources":["../../src/tools/get-assignment-files.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAsCnE,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAqB9E,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAGnD;AAiFD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,EACvB,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAwFN"}
@@ -0,0 +1,170 @@
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 { DEFAULT_CACHE_TTLS } from "../api/index.js";
7
+ import { GetAssignmentFilesSchema } from "./schemas.js";
8
+ import { toolResponse, sanitizeError } from "./tool-helpers.js";
9
+ import { extractPdfText } from "../utils/pdf-extractor.js";
10
+ import { officeDocumentText } from "../utils/zip-extract.js";
11
+ import { assignmentUrl } from "../utils/deep-links.js";
12
+ import { log } from "../utils/logger.js";
13
+ /** D2L list endpoints return either a paged { Objects: [...] } or a flat array. */
14
+ function unwrapList(raw) {
15
+ return Array.isArray(raw) ? raw : (raw?.Objects ?? []);
16
+ }
17
+ const KIND_BY_EXTENSION = {
18
+ pdf: "pdf",
19
+ docx: "docx",
20
+ doc: "other",
21
+ xlsx: "xlsx",
22
+ xls: "other",
23
+ pptx: "pptx",
24
+ ppt: "other",
25
+ png: "image",
26
+ jpg: "image",
27
+ jpeg: "image",
28
+ gif: "image",
29
+ webp: "image",
30
+ txt: "text",
31
+ md: "text",
32
+ csv: "text",
33
+ json: "text",
34
+ };
35
+ export function fileKind(fileName) {
36
+ const extension = fileName.split(".").pop()?.toLowerCase() ?? "";
37
+ return KIND_BY_EXTENSION[extension] ?? "other";
38
+ }
39
+ function describeAttachment(attachment) {
40
+ return {
41
+ fileId: attachment.FileId,
42
+ fileName: attachment.FileName,
43
+ size: attachment.Size,
44
+ kind: fileKind(attachment.FileName),
45
+ };
46
+ }
47
+ /** Every visible folder in the course that has at least one attachment. */
48
+ async function listFolders(apiClient, courseId, folderId) {
49
+ const raw = await apiClient.get(apiClient.le(courseId, "/dropbox/folders/"), {
50
+ ttl: DEFAULT_CACHE_TTLS.assignments,
51
+ });
52
+ return unwrapList(raw)
53
+ .filter((folder) => folder.IsHidden !== true)
54
+ .filter((folder) => (folderId === undefined ? true : folder.Id === folderId));
55
+ }
56
+ /**
57
+ * Read one attachment. The text is best effort: a scanned PDF or an image
58
+ * yields nothing, and that is reported rather than treated as a failure.
59
+ */
60
+ async function readAttachment(apiClient, courseId, folderId, attachment, extract, maxChars) {
61
+ const base = describeAttachment(attachment);
62
+ if (!extract)
63
+ return { ...base, text: null, note: "Text extraction was not requested." };
64
+ const response = await apiClient.getRaw(apiClient.le(courseId, `/dropbox/folders/${folderId}/attachments/${attachment.FileId}`));
65
+ const buffer = Buffer.from(await response.arrayBuffer());
66
+ let text = null;
67
+ let note;
68
+ switch (base.kind) {
69
+ case "pdf": {
70
+ const extracted = await extractPdfText(buffer);
71
+ text = extracted?.text?.trim() || null;
72
+ if (!text)
73
+ note = "No text layer in this PDF. It may be a scan.";
74
+ break;
75
+ }
76
+ case "docx":
77
+ case "xlsx":
78
+ case "pptx": {
79
+ text = officeDocumentText(buffer);
80
+ if (!text)
81
+ note = "No readable text found in this Office document.";
82
+ break;
83
+ }
84
+ case "text": {
85
+ text = buffer.toString("utf-8").trim() || null;
86
+ break;
87
+ }
88
+ default: {
89
+ note = `Cannot extract text from a ${base.kind} file. Use download_file to save it.`;
90
+ }
91
+ }
92
+ const truncated = text !== null && text.length > maxChars;
93
+ return {
94
+ ...base,
95
+ bytes: buffer.length,
96
+ text: truncated ? text.slice(0, maxChars) : text,
97
+ truncated,
98
+ ...(note ? { note } : {}),
99
+ };
100
+ }
101
+ export function registerGetAssignmentFiles(server, apiClient, baseUrl) {
102
+ server.registerTool("get_assignment_files", {
103
+ title: "Get Assignment Files",
104
+ description: "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.",
105
+ inputSchema: GetAssignmentFilesSchema,
106
+ }, async (args) => {
107
+ try {
108
+ log("DEBUG", "get_assignment_files tool called", { args });
109
+ const { courseId, folderId, fileId, extractText, maxChars } = GetAssignmentFilesSchema.parse(args);
110
+ const folders = await listFolders(apiClient, courseId, folderId);
111
+ if (folderId !== undefined && folders.length === 0) {
112
+ return toolResponse({
113
+ courseId,
114
+ folderId,
115
+ error: `No visible assignment with id ${folderId} in course ${courseId}.`,
116
+ });
117
+ }
118
+ // Read one file.
119
+ if (fileId !== undefined) {
120
+ if (folderId === undefined) {
121
+ return toolResponse({
122
+ courseId,
123
+ error: "folderId is required when fileId is given.",
124
+ });
125
+ }
126
+ const folder = folders[0];
127
+ const attachment = (folder.Attachments ?? []).find((a) => a.FileId === fileId);
128
+ if (!attachment) {
129
+ return toolResponse({
130
+ courseId,
131
+ folderId,
132
+ fileId,
133
+ error: `No attachment with id ${fileId} on assignment "${folder.Name}".`,
134
+ available: (folder.Attachments ?? []).map(describeAttachment),
135
+ });
136
+ }
137
+ const file = await readAttachment(apiClient, courseId, folderId, attachment, extractText, maxChars);
138
+ return toolResponse({
139
+ courseId,
140
+ folderId,
141
+ folderName: folder.Name,
142
+ url: baseUrl ? assignmentUrl(baseUrl, courseId, folderId) : null,
143
+ file,
144
+ });
145
+ }
146
+ // Discovery: which assignments have files, without downloading any.
147
+ const withFiles = folders
148
+ .filter((folder) => (folder.Attachments ?? []).length > 0)
149
+ .map((folder) => ({
150
+ folderId: folder.Id,
151
+ folderName: folder.Name,
152
+ dueDate: folder.DueDate,
153
+ url: baseUrl ? assignmentUrl(baseUrl, courseId, folder.Id) : null,
154
+ attachments: (folder.Attachments ?? []).map(describeAttachment),
155
+ }));
156
+ log("INFO", `get_assignment_files: ${withFiles.length} assignments with attachments in course ${courseId}`);
157
+ return toolResponse({
158
+ courseId,
159
+ assignments: withFiles,
160
+ ...(withFiles.length === 0
161
+ ? { note: "No assignment in this course has an attached file." }
162
+ : {}),
163
+ });
164
+ }
165
+ catch (error) {
166
+ return sanitizeError(error);
167
+ }
168
+ });
169
+ }
170
+ //# sourceMappingURL=get-assignment-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-assignment-files.js","sourceRoot":"","sources":["../../src/tools/get-assignment-files.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-roster.d.ts","sourceRoot":"","sources":["../../src/tools/get-roster.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAuDnE;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,GACtB,IAAI,CA6EN"}
1
+ {"version":3,"file":"get-roster.d.ts","sourceRoot":"","sources":["../../src/tools/get-roster.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AAuDnE;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,GACtB,IAAI,CA4FN"}
@@ -42,8 +42,8 @@ export function registerGetRoster(server, apiClient) {
42
42
  try {
43
43
  log("DEBUG", "get_roster tool called", { args });
44
44
  // Parse and validate input
45
- const { courseId, includeStudents, searchTerm } = GetRosterSchema.parse(args);
46
- let allUsers = [];
45
+ const { courseId, includeStudents, searchTerm, limit } = GetRosterSchema.parse(args);
46
+ const allUsers = [];
47
47
  if (!includeStudents) {
48
48
  // Fetch instructors and TAs in parallel
49
49
  const [instructorResult, taResult] = await Promise.allSettled([
@@ -76,26 +76,38 @@ export function registerGetRoster(server, apiClient) {
76
76
  }
77
77
  else {
78
78
  // Fetch all users
79
- allUsers = await fetchClasslistUsers(apiClient, courseId, {
80
- searchTerm,
79
+ allUsers.push(...(await fetchClasslistUsers(apiClient, courseId, { searchTerm })));
80
+ }
81
+ // A very large roster would swamp the response, so it is capped. The
82
+ // cap is reported in the payload rather than only in a log line the
83
+ // model never sees: a 340 person lecture used to look like a 100
84
+ // person one, with nothing to say otherwise.
85
+ const total = allUsers.length;
86
+ const truncated = total > limit;
87
+ const kept = truncated ? allUsers.slice(0, limit) : allUsers;
88
+ if (truncated) {
89
+ log("WARN", "get_roster: Result set exceeds the limit, truncating", {
90
+ total,
91
+ returned: kept.length,
81
92
  });
82
- // Cap at 100 users to prevent MCP response size issues
83
- if (allUsers.length > 100) {
84
- log("WARN", "get_roster: Result set exceeds 100 users, truncating", {
85
- total: allUsers.length,
86
- returned: 100,
87
- });
88
- allUsers = allUsers.slice(0, 100);
89
- }
90
93
  }
91
94
  // Map to clean output
92
- const roster = allUsers.map((user) => ({
95
+ const users = kept.map((user) => ({
93
96
  name: user.DisplayName,
94
97
  email: user.Email || null,
95
98
  role: user.ClasslistRoleDisplayName,
96
99
  }));
97
- log("INFO", `get_roster: Retrieved ${roster.length} users for course ${courseId}`);
98
- return toolResponse(roster);
100
+ log("INFO", `get_roster: Retrieved ${users.length} users for course ${courseId}`);
101
+ return toolResponse({
102
+ courseId,
103
+ total,
104
+ returned: users.length,
105
+ truncated,
106
+ ...(truncated
107
+ ? { note: `Showing ${users.length} of ${total}. Raise the limit argument to see more.` }
108
+ : {}),
109
+ users,
110
+ });
99
111
  }
100
112
  catch (error) {
101
113
  return sanitizeError(error);
@@ -1 +1 @@
1
- {"version":3,"file":"get-roster.js","sourceRoot":"","sources":["../../src/tools/get-roster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-roster.js","sourceRoot":"","sources":["../../src/tools/get-roster.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAgB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAczC,mEAAmE;AACnE,iEAAiE;AACjE,kFAAkF;AAClF,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAChC,SAAuB,EACvB,QAAgB,EAChB,OAAkD;IAElD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IAErC,IAAI,OAAO,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CACvB,QAAQ,EACR,oBAAoB,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3D,CAAC;IAEF,OAAO,eAAe,CAAgB,SAAS,EAAE,IAAI,EAAE;QACrD,GAAG,EAAE,kBAAkB,CAAC,MAAM;KAC/B,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAiB,EACjB,SAAuB;IAEvB,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,qVAAqV;QACvV,WAAW,EAAE,eAAe;KAC7B,EACD,KAAK,EAAE,IAAS,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,GAAG,CAAC,OAAO,EAAE,wBAAwB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAEjD,2BAA2B;YAC3B,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAErF,MAAM,QAAQ,GAAoB,EAAE,CAAC;YAErC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,wCAAwC;gBACxC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;oBAC5D,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE;wBACvC,MAAM,EAAE,kBAAkB;wBAC1B,UAAU;qBACX,CAAC;oBACF,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE;wBACvC,MAAM,EAAE,UAAU;wBAClB,UAAU;qBACX,CAAC;iBACH,CAAC,CAAC;gBAEH,gBAAgB;gBAChB,IAAI,gBAAgB,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBAC5C,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,MAAM,EAAE,yCAAyC,EAAE;wBACrD,KAAK,EAAE,gBAAgB,CAAC,MAAM;qBAC/B,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,MAAM,EAAE,iCAAiC,EAAE;wBAC7C,KAAK,EAAE,QAAQ,CAAC,MAAM;qBACvB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,kBAAkB;gBAClB,QAAQ,CAAC,IAAI,CACX,GAAG,CAAC,MAAM,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CACpE,CAAC;YACJ,CAAC;YAED,qEAAqE;YACrE,oEAAoE;YACpE,iEAAiE;YACjE,6CAA6C;YAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC9B,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;YAChC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAE7D,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,MAAM,EAAE,sDAAsD,EAAE;oBAClE,KAAK;oBACL,QAAQ,EAAE,IAAI,CAAC,MAAM;iBACtB,CAAC,CAAC;YACL,CAAC;YAED,sBAAsB;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAChC,IAAI,EAAE,IAAI,CAAC,WAAW;gBACtB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,IAAI,EAAE,IAAI,CAAC,wBAAwB;aACpC,CAAC,CAAC,CAAC;YAEJ,GAAG,CAAC,MAAM,EAAE,yBAAyB,KAAK,CAAC,MAAM,qBAAqB,QAAQ,EAAE,CAAC,CAAC;YAClF,OAAO,YAAY,CAAC;gBAClB,QAAQ;gBACR,KAAK;gBACL,QAAQ,EAAE,KAAK,CAAC,MAAM;gBACtB,SAAS;gBACT,GAAG,CAAC,SAAS;oBACX,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,KAAK,CAAC,MAAM,OAAO,KAAK,yCAAyC,EAAE;oBACxF,CAAC,CAAC,EAAE,CAAC;gBACP,KAAK;aACN,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -8,6 +8,7 @@ export { registerGetUpcomingDueDates } from "./get-upcoming-due-dates.js";
8
8
  export { registerGetMyGrades } from "./get-my-grades.js";
9
9
  export { registerGetAnnouncements } from "./get-announcements.js";
10
10
  export { registerGetAssignments } from "./get-assignments.js";
11
+ export { registerGetAssignmentFiles } from "./get-assignment-files.js";
11
12
  export { registerGetCourseContent } from "./get-course-content.js";
12
13
  export { registerDownloadFile } from "./download-file.js";
13
14
  export { registerGetClasslistEmails } from "./get-classlist-emails.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/E,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/E,cAAc,cAAc,CAAC"}
@@ -9,6 +9,7 @@ export { registerGetUpcomingDueDates } from "./get-upcoming-due-dates.js";
9
9
  export { registerGetMyGrades } from "./get-my-grades.js";
10
10
  export { registerGetAnnouncements } from "./get-announcements.js";
11
11
  export { registerGetAssignments } from "./get-assignments.js";
12
+ export { registerGetAssignmentFiles } from "./get-assignment-files.js";
12
13
  export { registerGetCourseContent } from "./get-course-content.js";
13
14
  export { registerDownloadFile } from "./download-file.js";
14
15
  export { registerGetClasslistEmails } from "./get-classlist-emails.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8CAA8C;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/E,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8CAA8C;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/E,cAAc,cAAc,CAAC"}
@@ -58,9 +58,17 @@ export declare const GetDiscussionsSchema: z.ZodObject<{
58
58
  forumId: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
59
59
  topicId: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
60
60
  }, z.core.$strip>;
61
+ export declare const GetAssignmentFilesSchema: z.ZodObject<{
62
+ courseId: z.ZodCoercedNumber<unknown>;
63
+ folderId: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
64
+ fileId: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
65
+ extractText: z.ZodDefault<z.ZodBoolean>;
66
+ maxChars: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
67
+ }, z.core.$strip>;
61
68
  export declare const GetRosterSchema: z.ZodObject<{
62
69
  courseId: z.ZodCoercedNumber<unknown>;
63
70
  includeStudents: z.ZodDefault<z.ZodBoolean>;
64
71
  searchTerm: z.ZodOptional<z.ZodString>;
72
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
65
73
  }, z.core.$strip>;
66
74
  //# sourceMappingURL=schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AAEH,eAAO,MAAM,kBAAkB;;iBAU7B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;iBAE5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;iBAGjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;iBAG/B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;iBASjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;iBAGnC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;iBAa7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;iBAK5B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;iBAO/B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;iBAO1B,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AAEH,eAAO,MAAM,kBAAkB;;iBAU7B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;iBAE5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;iBAGjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;iBAG/B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;iBASjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;iBAGnC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;iBAa7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;iBAK5B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;iBAO/B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;iBAWnC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;iBAS1B,CAAC"}
@@ -75,6 +75,18 @@ export const GetDiscussionsSchema = z.object({
75
75
  topicId: z.coerce.number().int().positive().optional()
76
76
  .describe("Specific topic ID to get posts for. Requires forumId."),
77
77
  });
78
+ export const GetAssignmentFilesSchema = z.object({
79
+ courseId: z.coerce.number().int().positive()
80
+ .describe("Course ID whose assignment attachments to look at."),
81
+ folderId: z.coerce.number().int().positive().optional()
82
+ .describe("Assignment (dropbox folder) ID. Omit to list every assignment in the course that has attachments."),
83
+ fileId: z.coerce.number().int().positive().optional()
84
+ .describe("Attachment file ID to read. Requires folderId. Omit to list the files without reading them."),
85
+ extractText: z.boolean().default(true)
86
+ .describe("Extract readable text from the file. Works for PDF, DOCX, XLSX, PPTX, and plain text."),
87
+ maxChars: z.coerce.number().int().positive().max(100000).default(12000)
88
+ .describe("Maximum characters of extracted text to return. The response reports whether it was truncated."),
89
+ });
78
90
  export const GetRosterSchema = z.object({
79
91
  courseId: z.coerce.number().int().positive()
80
92
  .describe("Course ID to get roster for."),
@@ -82,5 +94,7 @@ export const GetRosterSchema = z.object({
82
94
  .describe("Include students in results. Default is instructors and TAs only."),
83
95
  searchTerm: z.string().max(200).optional()
84
96
  .describe("Optional search term to filter by name."),
97
+ limit: z.coerce.number().int().positive().max(1000).default(100)
98
+ .describe("Maximum users to return. Default 100. The response reports the true total and whether it was truncated."),
85
99
  });
86
100
  //# sourceMappingURL=schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,yEAAyE;IACzE,0EAA0E;IAC1E,2EAA2E;IAC3E,UAAU,EAAE,CAAC;SACV,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,wHAAwH,CACzH;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACnH,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CACnG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mFAAmF,CAAC;CACtJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kGAAkG,CAAC;IACpK,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CAChH,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;SACpD,QAAQ,CAAC,6FAA6F,CAAC;CAC3G,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;SACzC,QAAQ,CAAC,oCAAoC,CAAC;IACjD,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;SACnF,QAAQ,CAAC,oDAAoD,CAAC;IACjE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC/B,QAAQ,CAAC,kMAAkM,CAAC;IAC/M,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;SACxD,QAAQ,CAAC,4KAA4K,CAAC;CAC1L,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;SACzC,QAAQ,CAAC,8BAA8B,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;SACzC,QAAQ,CAAC,gCAAgC,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;SACnD,QAAQ,CAAC,0DAA0D,CAAC;IACvE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;SACpD,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;SAClD,QAAQ,CAAC,+CAA+C,CAAC;IAC5D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5B,QAAQ,CAAC,gEAAgE,CAAC;IAC7E,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;SAC3C,QAAQ,CAAC,4HAA4H,CAAC;CAC1I,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;SACzC,QAAQ,CAAC,gCAAgC,CAAC;IAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;SACvC,QAAQ,CAAC,sEAAsE,CAAC;CACpF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;SACzC,QAAQ,CAAC,yCAAyC,CAAC;IACtD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;SACnD,QAAQ,CAAC,gFAAgF,CAAC;IAC7F,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;SACnD,QAAQ,CAAC,uDAAuD,CAAC;CACrE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;SACzC,QAAQ,CAAC,8BAA8B,CAAC;IAC3C,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;SACxC,QAAQ,CAAC,mEAAmE,CAAC;IAChF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;SACvC,QAAQ,CAAC,yCAAyC,CAAC;CACvD,CAAC,CAAC"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
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
+ /** One entry from a ZIP archive by exact name, or null. Never throws. */
7
+ export declare function extractZipEntry(buffer: Buffer, entryName: string): Buffer | null;
8
+ /** Every entry name in the archive, or null when it does not parse. */
9
+ export declare function listZipEntries(buffer: Buffer): string[] | null;
10
+ /**
11
+ * Readable text from a DOCX, XLSX, or PPTX buffer, or null when the archive
12
+ * is not an Office document or carries nothing readable.
13
+ */
14
+ export declare function officeDocumentText(buffer: Buffer): string | null;
15
+ //# sourceMappingURL=zip-extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip-extract.d.ts","sourceRoot":"","sources":["../../src/utils/zip-extract.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0GH,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUhF;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAM9D;AAuBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBhE"}
@@ -0,0 +1,170 @@
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 { inflateRawSync } from "node:zlib";
7
+ /**
8
+ * A dependency-free reader for the one thing we need out of a ZIP: a single
9
+ * named entry. DOCX, XLSX, and PPTX are all ZIP archives, and on a live course
10
+ * the assignment attachments were a DOCX and an XLSX, so reading them is what
11
+ * makes an attachment useful rather than just listed.
12
+ *
13
+ * The central directory is the index, and it is what this walks. Scanning the
14
+ * file for local header magic is the obvious shortcut and it is wrong: those
15
+ * four bytes can appear inside compressed content, and then the reader is
16
+ * parsing a header that does not exist.
17
+ *
18
+ * Nothing here throws. A truncated download, an unsupported compression
19
+ * method, or a ZIP64 archive all return null, because the caller's fallback
20
+ * is simply to report the file without its text.
21
+ */
22
+ const EOCD_SIGNATURE = 0x06054b50;
23
+ const CENTRAL_FILE_SIGNATURE = 0x02014b50;
24
+ const EOCD_MIN_SIZE = 22;
25
+ const EOCD_MAX_COMMENT = 0xffff;
26
+ const ZIP64_MARKER = 0xffffffff;
27
+ const METHOD_STORED = 0;
28
+ const METHOD_DEFLATE = 8;
29
+ /** Find the End of Central Directory record by scanning backwards. */
30
+ function findEocd(buffer) {
31
+ const earliest = Math.max(0, buffer.length - EOCD_MIN_SIZE - EOCD_MAX_COMMENT);
32
+ for (let i = buffer.length - EOCD_MIN_SIZE; i >= earliest; i--) {
33
+ if (buffer.readUInt32LE(i) === EOCD_SIGNATURE)
34
+ return i;
35
+ }
36
+ return null;
37
+ }
38
+ function readCentralDirectory(buffer) {
39
+ const eocd = findEocd(buffer);
40
+ if (eocd === null)
41
+ return null;
42
+ const count = buffer.readUInt16LE(eocd + 10);
43
+ let offset = buffer.readUInt32LE(eocd + 16);
44
+ if (offset === ZIP64_MARKER)
45
+ return null; // ZIP64 is out of scope.
46
+ const entries = [];
47
+ for (let i = 0; i < count; i++) {
48
+ if (offset + 46 > buffer.length)
49
+ return null;
50
+ if (buffer.readUInt32LE(offset) !== CENTRAL_FILE_SIGNATURE)
51
+ return null;
52
+ const method = buffer.readUInt16LE(offset + 10);
53
+ const compressedSize = buffer.readUInt32LE(offset + 20);
54
+ const uncompressedSize = buffer.readUInt32LE(offset + 24);
55
+ const nameLength = buffer.readUInt16LE(offset + 28);
56
+ const extraLength = buffer.readUInt16LE(offset + 30);
57
+ const commentLength = buffer.readUInt16LE(offset + 32);
58
+ const localHeaderOffset = buffer.readUInt32LE(offset + 42);
59
+ const nameStart = offset + 46;
60
+ if (nameStart + nameLength > buffer.length)
61
+ return null;
62
+ entries.push({
63
+ name: buffer.subarray(nameStart, nameStart + nameLength).toString("utf-8"),
64
+ method,
65
+ compressedSize,
66
+ uncompressedSize,
67
+ localHeaderOffset,
68
+ });
69
+ offset = nameStart + nameLength + extraLength + commentLength;
70
+ }
71
+ return entries;
72
+ }
73
+ function readEntryData(buffer, entry) {
74
+ const header = entry.localHeaderOffset;
75
+ if (header + 30 > buffer.length)
76
+ return null;
77
+ // The local header repeats the name and extra lengths, and its extra field
78
+ // can differ in length from the central one, so read them from here.
79
+ const nameLength = buffer.readUInt16LE(header + 26);
80
+ const extraLength = buffer.readUInt16LE(header + 28);
81
+ const start = header + 30 + nameLength + extraLength;
82
+ const end = start + entry.compressedSize;
83
+ if (end > buffer.length)
84
+ return null;
85
+ const raw = buffer.subarray(start, end);
86
+ if (entry.method === METHOD_STORED)
87
+ return Buffer.from(raw);
88
+ if (entry.method !== METHOD_DEFLATE)
89
+ return null;
90
+ try {
91
+ return inflateRawSync(raw);
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ }
97
+ /** One entry from a ZIP archive by exact name, or null. Never throws. */
98
+ export function extractZipEntry(buffer, entryName) {
99
+ try {
100
+ const entries = readCentralDirectory(buffer);
101
+ if (!entries)
102
+ return null;
103
+ const entry = entries.find((e) => e.name === entryName);
104
+ if (!entry)
105
+ return null;
106
+ return readEntryData(buffer, entry);
107
+ }
108
+ catch {
109
+ return null;
110
+ }
111
+ }
112
+ /** Every entry name in the archive, or null when it does not parse. */
113
+ export function listZipEntries(buffer) {
114
+ try {
115
+ return readCentralDirectory(buffer)?.map((e) => e.name) ?? null;
116
+ }
117
+ catch {
118
+ return null;
119
+ }
120
+ }
121
+ const XML_ENTITIES = {
122
+ "&amp;": "&",
123
+ "&lt;": "<",
124
+ "&gt;": ">",
125
+ "&quot;": '"',
126
+ "&apos;": "'",
127
+ "&#39;": "'",
128
+ };
129
+ /**
130
+ * Strip XML markup down to the words a reader cares about. Paragraph and
131
+ * cell boundaries become spaces so words from adjacent runs do not fuse.
132
+ */
133
+ function xmlToText(xml) {
134
+ return xml
135
+ .replace(/<[^>]+>/g, " ")
136
+ .replace(/&(?:amp|lt|gt|quot|apos|#39);/g, (m) => XML_ENTITIES[m] ?? m)
137
+ .replace(/\s+/g, " ")
138
+ .trim();
139
+ }
140
+ /**
141
+ * Readable text from a DOCX, XLSX, or PPTX buffer, or null when the archive
142
+ * is not an Office document or carries nothing readable.
143
+ */
144
+ export function officeDocumentText(buffer) {
145
+ const names = listZipEntries(buffer);
146
+ if (!names)
147
+ return null;
148
+ const read = (name) => xmlToText(extractZipEntry(buffer, name)?.toString("utf-8") ?? "");
149
+ let text = "";
150
+ if (names.includes("word/document.xml")) {
151
+ text = read("word/document.xml");
152
+ }
153
+ else if (names.includes("xl/sharedStrings.xml")) {
154
+ text = read("xl/sharedStrings.xml");
155
+ }
156
+ else if (names.some((n) => n.startsWith("ppt/slides/slide"))) {
157
+ const slides = names
158
+ .filter((n) => /^ppt\/slides\/slide\d+\.xml$/.test(n))
159
+ .sort((a, b) => slideNumber(a) - slideNumber(b));
160
+ text = slides.map(read).filter(Boolean).join("\n\n");
161
+ }
162
+ else {
163
+ return null;
164
+ }
165
+ return text.length > 0 ? text : null;
166
+ }
167
+ function slideNumber(name) {
168
+ return Number(/slide(\d+)\.xml$/.exec(name)?.[1] ?? 0);
169
+ }
170
+ //# sourceMappingURL=zip-extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip-extract.js","sourceRoot":"","sources":["../../src/utils/zip-extract.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brightspace-mcp-server",
3
- "version": "1.5.2",
3
+ "version": "1.6.1",
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",