brightspace-mcp-server 1.2.5 → 1.5.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 +9 -2
- package/build/api/cache.d.ts +1 -1
- package/build/api/cache.js +1 -1
- package/build/api/client.d.ts +1 -1
- package/build/api/client.d.ts.map +1 -1
- package/build/api/client.js +25 -3
- package/build/api/client.js.map +1 -1
- package/build/api/errors.d.ts +2 -2
- package/build/api/errors.js +2 -2
- package/build/api/index.d.ts +1 -1
- package/build/api/index.js +1 -1
- package/build/api/rate-limiter.d.ts +2 -2
- package/build/api/rate-limiter.js +2 -2
- package/build/api/types.d.ts +1 -1
- package/build/api/types.js +1 -1
- package/build/api/version-discovery.d.ts +2 -2
- package/build/api/version-discovery.js +2 -2
- package/build/auth/auth-runner.d.ts +2 -2
- package/build/auth/auth-runner.d.ts.map +1 -1
- package/build/auth/auth-runner.js +61 -12
- package/build/auth/auth-runner.js.map +1 -1
- package/build/auth/browser-auth.d.ts +35 -1
- package/build/auth/browser-auth.d.ts.map +1 -1
- package/build/auth/browser-auth.js +219 -28
- package/build/auth/browser-auth.js.map +1 -1
- package/build/auth/index.d.ts +5 -2
- package/build/auth/index.d.ts.map +1 -1
- package/build/auth/index.js +4 -2
- package/build/auth/index.js.map +1 -1
- package/build/auth/purdue-sso.d.ts +30 -1
- package/build/auth/purdue-sso.d.ts.map +1 -1
- package/build/auth/purdue-sso.js +144 -17
- package/build/auth/purdue-sso.js.map +1 -1
- package/build/auth/session-store.d.ts +1 -1
- package/build/auth/session-store.js +1 -1
- package/build/auth/sso-flow.d.ts +24 -0
- package/build/auth/sso-flow.d.ts.map +1 -0
- package/build/auth/sso-flow.js +21 -0
- package/build/auth/sso-flow.js.map +1 -0
- package/build/auth/suny-sso.d.ts +49 -0
- package/build/auth/suny-sso.d.ts.map +1 -0
- package/build/auth/suny-sso.js +146 -0
- package/build/auth/suny-sso.js.map +1 -0
- package/build/auth/token-manager.d.ts +29 -2
- package/build/auth/token-manager.d.ts.map +1 -1
- package/build/auth/token-manager.js +83 -4
- package/build/auth/token-manager.js.map +1 -1
- package/build/auth/token-mint.d.ts +32 -0
- package/build/auth/token-mint.d.ts.map +1 -0
- package/build/auth/token-mint.js +71 -0
- package/build/auth/token-mint.js.map +1 -0
- package/build/auth-cli.d.ts +1 -1
- package/build/auth-cli.js +9 -4
- package/build/auth-cli.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.js +6 -2
- package/build/index.js.map +1 -1
- package/build/setup.d.ts +2 -2
- package/build/setup.js +30 -4
- package/build/setup.js.map +1 -1
- package/build/tools/download-file.d.ts +6 -2
- package/build/tools/download-file.d.ts.map +1 -1
- package/build/tools/download-file.js +27 -7
- package/build/tools/download-file.js.map +1 -1
- package/build/tools/get-announcements.d.ts +65 -2
- package/build/tools/get-announcements.d.ts.map +1 -1
- package/build/tools/get-announcements.js +69 -25
- package/build/tools/get-announcements.js.map +1 -1
- package/build/tools/get-assignments.d.ts +8 -2
- package/build/tools/get-assignments.d.ts.map +1 -1
- package/build/tools/get-assignments.js +76 -17
- package/build/tools/get-assignments.js.map +1 -1
- package/build/tools/get-classlist-emails.d.ts +2 -2
- package/build/tools/get-classlist-emails.js +2 -2
- package/build/tools/get-course-content.d.ts +2 -2
- package/build/tools/get-course-content.js +2 -2
- package/build/tools/get-discussions.d.ts +1 -1
- package/build/tools/get-discussions.js +1 -1
- package/build/tools/get-my-courses.d.ts +2 -2
- package/build/tools/get-my-courses.d.ts.map +1 -1
- package/build/tools/get-my-courses.js +10 -4
- package/build/tools/get-my-courses.js.map +1 -1
- package/build/tools/get-my-grades.d.ts +1 -1
- package/build/tools/get-my-grades.js +1 -1
- package/build/tools/get-roster.d.ts +2 -2
- package/build/tools/get-roster.js +2 -2
- package/build/tools/get-syllabus.d.ts +1 -1
- package/build/tools/get-syllabus.js +1 -1
- package/build/tools/get-upcoming-due-dates.d.ts +2 -2
- package/build/tools/get-upcoming-due-dates.d.ts.map +1 -1
- package/build/tools/get-upcoming-due-dates.js +121 -45
- package/build/tools/get-upcoming-due-dates.js.map +1 -1
- package/build/tools/index.d.ts +2 -2
- package/build/tools/index.js +2 -2
- package/build/tools/schemas.d.ts +3 -3
- package/build/tools/schemas.d.ts.map +1 -1
- package/build/tools/schemas.js +11 -5
- package/build/tools/schemas.js.map +1 -1
- package/build/tools/tool-helpers.d.ts +1 -1
- package/build/tools/tool-helpers.js +1 -1
- package/build/types/index.d.ts +12 -2
- package/build/types/index.d.ts.map +1 -1
- package/build/types/index.js +2 -2
- package/build/update.d.ts +1 -1
- package/build/update.js +1 -1
- package/build/utils/config-store.d.ts +3 -2
- package/build/utils/config-store.d.ts.map +1 -1
- package/build/utils/config-store.js +2 -2
- package/build/utils/config-store.js.map +1 -1
- package/build/utils/config.d.ts +2 -2
- package/build/utils/config.d.ts.map +1 -1
- package/build/utils/config.js +3 -2
- package/build/utils/config.js.map +1 -1
- package/build/utils/course-filter.d.ts +2 -2
- package/build/utils/course-filter.js +2 -2
- package/build/utils/deep-links.d.ts +15 -0
- package/build/utils/deep-links.d.ts.map +1 -0
- package/build/utils/deep-links.js +31 -0
- package/build/utils/deep-links.js.map +1 -0
- package/build/utils/download-helpers.d.ts +2 -2
- package/build/utils/download-helpers.js +2 -2
- package/build/utils/errors.d.ts +2 -2
- package/build/utils/errors.js +2 -2
- package/build/utils/file-validator.d.ts +2 -2
- package/build/utils/file-validator.d.ts.map +1 -1
- package/build/utils/file-validator.js +21 -11
- package/build/utils/file-validator.js.map +1 -1
- package/build/utils/html-converter.d.ts +2 -2
- package/build/utils/html-converter.js +2 -2
- package/build/utils/logger.d.ts +2 -2
- package/build/utils/logger.js +2 -2
- package/build/utils/pdf-extractor.d.ts +2 -2
- package/build/utils/pdf-extractor.js +2 -2
- package/package.json +1 -1
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { SessionStore } from "./session-store.js";
|
|
7
|
+
import { mintAccessToken } from "./token-mint.js";
|
|
7
8
|
import { log } from "../utils/logger.js";
|
|
8
9
|
/**
|
|
9
10
|
* Token refresh buffer - tokens within this time of expiry are considered invalid.
|
|
10
11
|
* This prevents using tokens that might expire during a request.
|
|
11
12
|
*/
|
|
12
13
|
const REFRESH_BUFFER_MS = 5 * 60 * 1000; // 5 minutes
|
|
14
|
+
/** Matches the tokenTtl default in the app config. */
|
|
15
|
+
const DEFAULT_TOKEN_TTL_SECONDS = 3600;
|
|
13
16
|
/**
|
|
14
17
|
* TokenManager manages token lifecycle with in-memory caching and disk persistence.
|
|
15
18
|
* Handles expiry detection with a configurable refresh buffer.
|
|
@@ -17,8 +20,19 @@ const REFRESH_BUFFER_MS = 5 * 60 * 1000; // 5 minutes
|
|
|
17
20
|
export class TokenManager {
|
|
18
21
|
cachedToken = null;
|
|
19
22
|
sessionStore;
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
baseUrl;
|
|
24
|
+
tokenTtl;
|
|
25
|
+
mint;
|
|
26
|
+
/** Single in-flight mint, so concurrent callers share one request. */
|
|
27
|
+
mintInFlight = null;
|
|
28
|
+
constructor(sessionDirOrOptions) {
|
|
29
|
+
const options = typeof sessionDirOrOptions === "string" || sessionDirOrOptions === undefined
|
|
30
|
+
? { sessionDir: sessionDirOrOptions }
|
|
31
|
+
: sessionDirOrOptions;
|
|
32
|
+
this.sessionStore = new SessionStore(options.sessionDir);
|
|
33
|
+
this.baseUrl = options.baseUrl;
|
|
34
|
+
this.tokenTtl = options.tokenTtl ?? DEFAULT_TOKEN_TTL_SECONDS;
|
|
35
|
+
this.mint = options.mint ?? mintAccessToken;
|
|
22
36
|
}
|
|
23
37
|
/**
|
|
24
38
|
* Get the current token if valid, otherwise null.
|
|
@@ -38,9 +52,74 @@ export class TokenManager {
|
|
|
38
52
|
this.cachedToken = storedToken;
|
|
39
53
|
return storedToken;
|
|
40
54
|
}
|
|
55
|
+
// The token is stale, but if it carried the session material we can trade
|
|
56
|
+
// that for a fresh JWT over plain HTTP instead of relaunching the browser.
|
|
57
|
+
const mintable = this.pickMintable(this.cachedToken, storedToken);
|
|
58
|
+
if (mintable) {
|
|
59
|
+
const minted = await this.mintFromSession(mintable);
|
|
60
|
+
if (minted)
|
|
61
|
+
return minted;
|
|
62
|
+
}
|
|
41
63
|
log("DEBUG", "No valid token available");
|
|
42
64
|
return null;
|
|
43
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* First candidate that carries both the cookie header and the XSRF token,
|
|
68
|
+
* or null when neither can be used to mint.
|
|
69
|
+
*/
|
|
70
|
+
pickMintable(...candidates) {
|
|
71
|
+
if (!this.baseUrl)
|
|
72
|
+
return null;
|
|
73
|
+
for (const candidate of candidates) {
|
|
74
|
+
if (candidate?.cookieHeader && candidate.csrfToken)
|
|
75
|
+
return candidate;
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Mint a fresh token from the stale one's session material, collapsing
|
|
81
|
+
* concurrent callers onto a single request.
|
|
82
|
+
*/
|
|
83
|
+
async mintFromSession(stale) {
|
|
84
|
+
if (this.mintInFlight) {
|
|
85
|
+
log("DEBUG", "Joining the in-flight token mint");
|
|
86
|
+
return this.mintInFlight;
|
|
87
|
+
}
|
|
88
|
+
const inFlight = this.runMint(stale).finally(() => {
|
|
89
|
+
this.mintInFlight = null;
|
|
90
|
+
});
|
|
91
|
+
this.mintInFlight = inFlight;
|
|
92
|
+
return inFlight;
|
|
93
|
+
}
|
|
94
|
+
async runMint(stale) {
|
|
95
|
+
log("DEBUG", "Trying to mint an access token from the session cookie");
|
|
96
|
+
const result = await this.mint({
|
|
97
|
+
baseUrl: this.baseUrl,
|
|
98
|
+
cookieHeader: stale.cookieHeader,
|
|
99
|
+
csrfToken: stale.csrfToken,
|
|
100
|
+
});
|
|
101
|
+
if (result.ok) {
|
|
102
|
+
const now = Date.now();
|
|
103
|
+
const token = {
|
|
104
|
+
accessToken: result.accessToken,
|
|
105
|
+
capturedAt: now,
|
|
106
|
+
expiresAt: now + this.tokenTtl * 1000,
|
|
107
|
+
source: "browser",
|
|
108
|
+
cookieHeader: stale.cookieHeader,
|
|
109
|
+
csrfToken: stale.csrfToken,
|
|
110
|
+
};
|
|
111
|
+
await this.setToken(token);
|
|
112
|
+
log("INFO", "Minted a fresh access token from the session cookie");
|
|
113
|
+
return token;
|
|
114
|
+
}
|
|
115
|
+
if (result.reason === "sessionExpired") {
|
|
116
|
+
log("INFO", "The session cookie has expired, a browser login is needed");
|
|
117
|
+
await this.clearToken();
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
log("WARN", `Could not mint an access token: ${result.detail ?? "transport failure"}`);
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
44
123
|
/**
|
|
45
124
|
* Set a new token, caching in memory and persisting to disk.
|
|
46
125
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AAErD;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,WAAW,GAAqB,IAAI,CAAC;IAC5B,YAAY,CAAe;
|
|
1
|
+
{"version":3,"file":"token-manager.js","sourceRoot":"","sources":["../../src/auth/token-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
+
export interface MintOptions {
|
|
7
|
+
/** Tenant base URL, with or without a trailing slash. */
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
/** "d2lSessionVal=...; d2lSecureSessionVal=..." */
|
|
10
|
+
cookieHeader: string;
|
|
11
|
+
/** Without this header the mint answers 403 even with a good cookie. */
|
|
12
|
+
csrfToken: string;
|
|
13
|
+
fetchImpl?: typeof fetch;
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
}
|
|
16
|
+
export type MintResult = {
|
|
17
|
+
ok: true;
|
|
18
|
+
accessToken: string;
|
|
19
|
+
} | {
|
|
20
|
+
ok: false;
|
|
21
|
+
reason: "sessionExpired" | "transport";
|
|
22
|
+
detail?: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Exchange the D2L session cookies for a fresh Bearer token in one request.
|
|
26
|
+
* This is the cheap alternative to relaunching Chromium when the JWT expires.
|
|
27
|
+
*
|
|
28
|
+
* Classification order matters: a network throw is transport, the expiry marker
|
|
29
|
+
* wins over the status code, then a non-2xx status, then a missing access_token.
|
|
30
|
+
*/
|
|
31
|
+
export declare function mintAccessToken({ baseUrl, cookieHeader, csrfToken, fetchImpl, timeoutMs, }: MintOptions): Promise<MintResult>;
|
|
32
|
+
//# sourceMappingURL=token-mint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-mint.d.ts","sourceRoot":"","sources":["../../src/auth/token-mint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAQ3E;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,EACpC,OAAO,EACP,YAAY,EACZ,SAAS,EACT,SAAiB,EACjB,SAA8B,GAC/B,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6CnC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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 { log } from "../utils/logger.js";
|
|
7
|
+
/**
|
|
8
|
+
* The marker in the HTML stub a dead session gets instead of a token payload.
|
|
9
|
+
* Measured against purdue.brightspace.com: an expired session answers HTTP 200
|
|
10
|
+
* carrying a script that redirects to /d2l/login?sessionExpired=1. There is no
|
|
11
|
+
* 401 on this path, so the marker, not the status, is the only honest signal.
|
|
12
|
+
*/
|
|
13
|
+
const EXPIRED_MARKER = "sessionExpired=1";
|
|
14
|
+
/** Same identity the API client sends, see buildAuthHeaders in api/client.ts. */
|
|
15
|
+
const USER_AGENT = "BrightspaceMCP/1.0 (Rohan Muppa; github.com/rohanmuppa/brightspace-mcp-server)";
|
|
16
|
+
const DEFAULT_TIMEOUT_MS = 15000;
|
|
17
|
+
const transport = (detail) => ({
|
|
18
|
+
ok: false,
|
|
19
|
+
reason: "transport",
|
|
20
|
+
detail,
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* Exchange the D2L session cookies for a fresh Bearer token in one request.
|
|
24
|
+
* This is the cheap alternative to relaunching Chromium when the JWT expires.
|
|
25
|
+
*
|
|
26
|
+
* Classification order matters: a network throw is transport, the expiry marker
|
|
27
|
+
* wins over the status code, then a non-2xx status, then a missing access_token.
|
|
28
|
+
*/
|
|
29
|
+
export async function mintAccessToken({ baseUrl, cookieHeader, csrfToken, fetchImpl = fetch, timeoutMs = DEFAULT_TIMEOUT_MS, }) {
|
|
30
|
+
const url = `${baseUrl.replace(/\/+$/, "")}/d2l/lp/auth/oauth2/token`;
|
|
31
|
+
let status;
|
|
32
|
+
let body;
|
|
33
|
+
try {
|
|
34
|
+
const response = await fetchImpl(url, {
|
|
35
|
+
method: "POST",
|
|
36
|
+
headers: {
|
|
37
|
+
"content-type": "application/x-www-form-urlencoded",
|
|
38
|
+
cookie: cookieHeader,
|
|
39
|
+
"x-csrf-token": csrfToken,
|
|
40
|
+
"User-Agent": USER_AGENT,
|
|
41
|
+
},
|
|
42
|
+
body: "scope=*:*:*",
|
|
43
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
44
|
+
});
|
|
45
|
+
status = response.status;
|
|
46
|
+
body = await response.text();
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
50
|
+
return transport(message);
|
|
51
|
+
}
|
|
52
|
+
if (body.includes(EXPIRED_MARKER)) {
|
|
53
|
+
log("DEBUG", "The token mint answered with the session-expired stub");
|
|
54
|
+
return { ok: false, reason: "sessionExpired" };
|
|
55
|
+
}
|
|
56
|
+
if (status < 200 || status >= 300) {
|
|
57
|
+
return transport(`HTTP ${status}`);
|
|
58
|
+
}
|
|
59
|
+
let accessToken;
|
|
60
|
+
try {
|
|
61
|
+
accessToken = JSON.parse(body).access_token;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return transport("the token mint returned an unparseable body");
|
|
65
|
+
}
|
|
66
|
+
if (typeof accessToken !== "string" || accessToken.length === 0) {
|
|
67
|
+
return transport("the token mint returned no access_token");
|
|
68
|
+
}
|
|
69
|
+
return { ok: true, accessToken };
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=token-mint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-mint.js","sourceRoot":"","sources":["../../src/auth/token-mint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAE1C,iFAAiF;AACjF,MAAM,UAAU,GACd,gFAAgF,CAAC;AAEnF,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAiBjC,MAAM,SAAS,GAAG,CAAC,MAAc,EAAc,EAAE,CAAC,CAAC;IACjD,EAAE,EAAE,KAAK;IACT,MAAM,EAAE,WAAW;IACnB,MAAM;CACP,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,OAAO,EACP,YAAY,EACZ,SAAS,EACT,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,kBAAkB,GAClB;IACZ,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,2BAA2B,CAAC;IAEtE,IAAI,MAAc,CAAC;IACnB,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;gBACnD,MAAM,EAAE,YAAY;gBACpB,cAAc,EAAE,SAAS;gBACzB,YAAY,EAAE,UAAU;aACzB;YACD,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;SACvC,CAAC,CAAC;QACH,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QACzB,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,OAAO,EAAE,uDAAuD,CAAC,CAAC;QACtE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,WAAoB,CAAC;IACzB,IAAI,CAAC;QACH,WAAW,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgC,CAAC,YAAY,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC,6CAA6C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAC,yCAAyC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC"}
|
package/build/auth-cli.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* Brightspace MCP Server
|
|
4
|
-
* Copyright (c)
|
|
4
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
5
5
|
* Licensed under MIT — see LICENSE file for details.
|
|
6
6
|
*
|
|
7
7
|
* https://github.com/rohanmuppa/brightspace-mcp-server
|
package/build/auth-cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* Brightspace MCP Server
|
|
4
|
-
* Copyright (c)
|
|
4
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
5
5
|
* Licensed under MIT — see LICENSE file for details.
|
|
6
6
|
*
|
|
7
7
|
* https://github.com/rohanmuppa/brightspace-mcp-server
|
|
@@ -33,7 +33,8 @@ async function main() {
|
|
|
33
33
|
// Check for credentials and provide status
|
|
34
34
|
if (config.username && config.password) {
|
|
35
35
|
console.log(`Authenticating as: ${config.username}`);
|
|
36
|
-
console.log("Approve the
|
|
36
|
+
console.log("Approve the sign-in request in Microsoft Authenticator when prompted.");
|
|
37
|
+
console.log("If it shows a number, it is printed below: enter that number in the app.");
|
|
37
38
|
}
|
|
38
39
|
else {
|
|
39
40
|
console.log("No credentials. Opening browser for manual login.");
|
|
@@ -44,7 +45,11 @@ async function main() {
|
|
|
44
45
|
// Authenticate and get token
|
|
45
46
|
const token = await browserAuth.authenticate();
|
|
46
47
|
// Create TokenManager and persist token
|
|
47
|
-
const tokenManager = new TokenManager(
|
|
48
|
+
const tokenManager = new TokenManager({
|
|
49
|
+
sessionDir: config.sessionDir,
|
|
50
|
+
baseUrl: config.baseUrl,
|
|
51
|
+
tokenTtl: config.tokenTtl,
|
|
52
|
+
});
|
|
48
53
|
await tokenManager.setToken(token);
|
|
49
54
|
// Verify session.json was actually written to disk
|
|
50
55
|
const sessionFile = path.join(config.sessionDir, "session.json");
|
|
@@ -77,7 +82,7 @@ async function main() {
|
|
|
77
82
|
console.error("\nError:", error instanceof Error ? error.message : String(error));
|
|
78
83
|
console.error("\nTroubleshooting tips:");
|
|
79
84
|
console.error("1. Ensure D2L_USERNAME and D2L_PASSWORD are set correctly in .env");
|
|
80
|
-
console.error("2. If MFA approval failed,
|
|
85
|
+
console.error("2. If MFA approval failed, approve the sign-in request in Microsoft Authenticator, entering the number shown above if there was one");
|
|
81
86
|
console.error("3. Check that you have a stable internet connection");
|
|
82
87
|
console.error("4. Try running with D2L_HEADLESS=false to see the browser");
|
|
83
88
|
console.error("\nFor more details, check the error message above.\n");
|
package/build/auth-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-cli.js","sourceRoot":"","sources":["../src/auth-cli.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE5D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE/B,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAChF,OAAO,CACR,CACF,CAAC;QACF,OAAO,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,sCAAsC;QACtC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAE5B,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,qCAAqC,UAAU,yBAAyB,CAAC,CAAC;QAEtF,2CAA2C;QAC3C,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"auth-cli.js","sourceRoot":"","sources":["../src/auth-cli.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* Brightspace MCP Server
|
|
4
|
-
* Copyright (c)
|
|
4
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
5
5
|
* Licensed under MIT — see LICENSE file for details.
|
|
6
6
|
*
|
|
7
7
|
* https://github.com/rohanmuppa/brightspace-mcp-server
|
package/build/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* Brightspace MCP Server
|
|
4
|
-
* Copyright (c)
|
|
4
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
5
5
|
* Licensed under MIT — see LICENSE file for details.
|
|
6
6
|
*
|
|
7
7
|
* https://github.com/rohanmuppa/brightspace-mcp-server
|
|
@@ -63,7 +63,11 @@ else {
|
|
|
63
63
|
log("INFO", "========================================");
|
|
64
64
|
log("INFO", "");
|
|
65
65
|
// Create TokenManager for reading cached tokens
|
|
66
|
-
const tokenManager = new TokenManager(
|
|
66
|
+
const tokenManager = new TokenManager({
|
|
67
|
+
sessionDir: config.sessionDir,
|
|
68
|
+
baseUrl: config.baseUrl,
|
|
69
|
+
tokenTtl: config.tokenTtl,
|
|
70
|
+
});
|
|
67
71
|
// Create AuthRunner for auto-reauthentication
|
|
68
72
|
const authRunner = new AuthRunner();
|
|
69
73
|
// Create D2L API Client with auto-reauth support
|
package/build/index.js.map
CHANGED
|
@@ -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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"}
|
package/build/setup.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* Brightspace MCP Server
|
|
4
|
-
* Copyright (c)
|
|
5
|
-
* Licensed under
|
|
4
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
5
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
6
6
|
*
|
|
7
7
|
* https://github.com/rohanmuppa/brightspace-mcp-server
|
|
8
8
|
*/
|
package/build/setup.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* Brightspace MCP Server
|
|
4
|
-
* Copyright (c)
|
|
5
|
-
* Licensed under
|
|
4
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
5
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
6
6
|
*
|
|
7
7
|
* https://github.com/rohanmuppa/brightspace-mcp-server
|
|
8
8
|
*/
|
|
@@ -26,6 +26,14 @@ const SCHOOL_PRESETS = {
|
|
|
26
26
|
usernameLabel: "Purdue career account username",
|
|
27
27
|
mfaNote: "Approve the Duo push on your phone.",
|
|
28
28
|
},
|
|
29
|
+
suny: {
|
|
30
|
+
name: "SUNY",
|
|
31
|
+
baseUrl: "https://mylearning.suny.edu",
|
|
32
|
+
usernameLabel: "SUNY campus username",
|
|
33
|
+
mfaNote: "Approve the sign-in request from your campus MFA app.",
|
|
34
|
+
campusPrompt: "Which SUNY campus are you at? (e.g. SUNY Poly)",
|
|
35
|
+
usernameHint: "Most campuses want the full sign-in address, e.g. abc123@sunypoly.edu",
|
|
36
|
+
},
|
|
29
37
|
};
|
|
30
38
|
// Parse --purdue, --osu, etc. from argv
|
|
31
39
|
const schoolFlag = process.argv.find((a) => a.startsWith("--"))?.replace(/^--/, "").toLowerCase();
|
|
@@ -114,12 +122,14 @@ function normalizeUrl(input) {
|
|
|
114
122
|
if (!/^https?:\/\//i.test(url)) {
|
|
115
123
|
url = `https://${url}`;
|
|
116
124
|
}
|
|
125
|
+
// Upgrade http:// to https://
|
|
126
|
+
url = url.replace(/^http:\/\//i, "https://");
|
|
117
127
|
return url;
|
|
118
128
|
}
|
|
119
129
|
function isValidUrl(url) {
|
|
120
130
|
try {
|
|
121
131
|
const parsed = new URL(url);
|
|
122
|
-
return parsed.protocol === "https:"
|
|
132
|
+
return parsed.protocol === "https:";
|
|
123
133
|
}
|
|
124
134
|
catch {
|
|
125
135
|
return false;
|
|
@@ -248,10 +258,23 @@ async function main() {
|
|
|
248
258
|
console.log(dim(` → ${baseUrl}`));
|
|
249
259
|
console.log("");
|
|
250
260
|
}
|
|
261
|
+
// ── Campus (shared multi-campus instances only) ──────────────────
|
|
262
|
+
let campus = "";
|
|
263
|
+
if (preset?.campusPrompt) {
|
|
264
|
+
console.log(dim(" Several campuses share this Brightspace site."));
|
|
265
|
+
campus = await ask(rl, `${preset.campusPrompt} `);
|
|
266
|
+
console.log(campus
|
|
267
|
+
? dim(` → ${campus}`)
|
|
268
|
+
: dim(" No campus set — you'll pick it in the browser at sign-in."));
|
|
269
|
+
console.log("");
|
|
270
|
+
}
|
|
251
271
|
// ── Step 2: Username ─────────────────────────────────────────────
|
|
252
272
|
const usernamePrompt = preset
|
|
253
273
|
? `What is your ${preset.usernameLabel}? `
|
|
254
274
|
: "What is your Brightspace username? ";
|
|
275
|
+
if (preset?.usernameHint) {
|
|
276
|
+
console.log(dim(` ${preset.usernameHint}`));
|
|
277
|
+
}
|
|
255
278
|
let username = "";
|
|
256
279
|
while (!username) {
|
|
257
280
|
username = await ask(rl, usernamePrompt);
|
|
@@ -284,7 +307,7 @@ async function main() {
|
|
|
284
307
|
console.log(dim(` MFA: ${preset.mfaNote}`));
|
|
285
308
|
}
|
|
286
309
|
else {
|
|
287
|
-
console.log(dim(" MFA: You will be prompted to approve
|
|
310
|
+
console.log(dim(" MFA: You will be prompted to approve the sign-in on your phone during auth."));
|
|
288
311
|
}
|
|
289
312
|
console.log("");
|
|
290
313
|
// ── Step 5: Save config ──────────────────────────────────────────
|
|
@@ -293,6 +316,9 @@ async function main() {
|
|
|
293
316
|
username,
|
|
294
317
|
password,
|
|
295
318
|
};
|
|
319
|
+
if (campus) {
|
|
320
|
+
config.campus = campus;
|
|
321
|
+
}
|
|
296
322
|
saveConfigStore(config);
|
|
297
323
|
console.log(green(" Config saved to: " + getConfigStorePath()));
|
|
298
324
|
console.log("");
|
package/build/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
7
7
|
import { D2LApiClient } from "../api/index.js";
|
|
@@ -9,4 +9,8 @@ import { D2LApiClient } from "../api/index.js";
|
|
|
9
9
|
* Register download_file tool
|
|
10
10
|
*/
|
|
11
11
|
export declare function registerDownloadFile(server: McpServer, apiClient: D2LApiClient): void;
|
|
12
|
+
/**
|
|
13
|
+
* Extract a filename from a Content-Disposition header.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseContentDispositionFilename(disposition: string): string | null;
|
|
12
16
|
//# sourceMappingURL=download-file.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-file.d.ts","sourceRoot":"","sources":["../../src/tools/download-file.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAc/C;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,GACtB,IAAI,CA6EN"}
|
|
1
|
+
{"version":3,"file":"download-file.d.ts","sourceRoot":"","sources":["../../src/tools/download-file.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAc/C;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,YAAY,GACtB,IAAI,CA6EN;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAoBf"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Purdue Brightspace MCP Server
|
|
3
|
-
* Copyright (c)
|
|
4
|
-
* Licensed under
|
|
3
|
+
* Copyright (c) 2026 Rohan Muppa. All rights reserved.
|
|
4
|
+
* Licensed under MIT — see LICENSE file for details.
|
|
5
5
|
*/
|
|
6
6
|
import { DownloadFileSchema } from "./schemas.js";
|
|
7
7
|
import { toolResponse, sanitizeError, errorResponse } from "./tool-helpers.js";
|
|
@@ -63,6 +63,30 @@ export function registerDownloadFile(server, apiClient) {
|
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Extract a filename from a Content-Disposition header.
|
|
68
|
+
*/
|
|
69
|
+
export function parseContentDispositionFilename(disposition) {
|
|
70
|
+
const extended = disposition.match(/filename\*\s*=\s*([^;]+)/i);
|
|
71
|
+
if (extended?.[1]) {
|
|
72
|
+
const value = extended[1].trim();
|
|
73
|
+
const parts = value.split("'");
|
|
74
|
+
const encoded = parts.length >= 3 ? parts.slice(2).join("'") : value;
|
|
75
|
+
try {
|
|
76
|
+
return decodeURIComponent(encoded);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return encoded;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const plain = disposition.match(/filename\s*=\s*("([^"]*)"|[^;\n]*)/i);
|
|
83
|
+
if (plain) {
|
|
84
|
+
const value = (plain[2] ?? plain[1] ?? "").trim();
|
|
85
|
+
if (value)
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
66
90
|
/**
|
|
67
91
|
* Download a content file using topicId
|
|
68
92
|
*/
|
|
@@ -79,11 +103,7 @@ async function downloadContentFile(apiClient, courseId, topicId, downloadPath, c
|
|
|
79
103
|
}
|
|
80
104
|
// Get filename from Content-Disposition header
|
|
81
105
|
const disposition = response.headers.get("Content-Disposition") ?? "";
|
|
82
|
-
|
|
83
|
-
const match = disposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
|
|
84
|
-
if (match?.[1]) {
|
|
85
|
-
filename = match[1].replace(/['"]/g, "");
|
|
86
|
-
}
|
|
106
|
+
const filename = parseContentDispositionFilename(disposition) ?? "download";
|
|
87
107
|
log("DEBUG", `Content-Disposition filename: ${filename}`);
|
|
88
108
|
// Download body as buffer
|
|
89
109
|
const buffer = Buffer.from(await response.arrayBuffer());
|