infinitecampus-mcp 3.1.4 → 3.1.6
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/auth.js +4 -4
- package/dist/bundle.js +1329 -315
- package/dist/client.js +80 -36
- package/dist/config.js +1 -1
- package/dist/index.js +2 -2
- package/dist/tools/healthcheck.js +1 -1
- package/mint.yaml +5 -5
- package/package.json +6 -6
- package/server.json +4 -4
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "MCP server for Infinite Campus (Campus Parent) — grades, attendance, assignments, messages, documents",
|
|
10
|
-
"version": "3.1.
|
|
10
|
+
"version": "3.1.6"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"displayName": "Infinite Campus",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "Infinite Campus (Campus Parent) MCP server for Claude — grades, attendance, assignments, messages, and documents via natural language",
|
|
18
|
-
"version": "3.1.
|
|
18
|
+
"version": "3.1.6",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "infinitecampus-mcp",
|
|
3
3
|
"displayName": "Infinite Campus",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.6",
|
|
5
5
|
"description": "Infinite Campus (Campus Parent) MCP server for Claude — grades, attendance, assignments, messages, and documents",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Chris Hall",
|
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ Tools that the harness will gate as write/IO operations: `ic_download_document`.
|
|
|
42
42
|
IC_PASSWORD=...
|
|
43
43
|
IC_NAME=Springfield # optional, defaults to IC_DISTRICT
|
|
44
44
|
```
|
|
45
|
-
2. **
|
|
45
|
+
2. **ContextMint Bridge fallback (no password needed).** Set only `IC_BASE_URL` + `IC_DISTRICT` (still required so the MCP knows which host to talk to and which district to dispatch on), then install the ContextMint Bridge browser extension from [its releases page](https://github.com/nullnet-app/contextmint-bridge/releases) (Chrome: download the chrome zip and load it unpacked via `chrome://extensions` → Developer mode → Load unpacked; there is no Chrome Web Store listing yet. Safari is not available yet — it will ship inside the ContextMint app, which has no public download — so use Chrome for now) and sign into your IC portal once. ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — [fetchproxy's own README](https://github.com/chrischall/fetchproxy#extension) points to it. Its source is public at [nullnet-app/contextmint-bridge](https://github.com/nullnet-app/contextmint-bridge): build it yourself, or check a release zip against the `.sha256` file published beside it (`shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256`). The MCP reads the `JSESSIONID` (HttpOnly) + `XSRF-TOKEN` cookies from that tab and goes direct-to-API from Node thereafter — the extension is **not** in the request hot path. The read is repeated whenever the session lapses (JSESSIONID is a servlet session with a short idle timeout), so you stay signed in without restarting the MCP.
|
|
46
46
|
|
|
47
47
|
Set `IC_DISABLE_FETCHPROXY=1` to opt out of the fallback (turns missing credentials into a hard error — useful in headless CI).
|
|
48
48
|
|
package/dist/auth.js
CHANGED
|
@@ -92,7 +92,7 @@ export async function resolveAuth() {
|
|
|
92
92
|
}
|
|
93
93
|
// ── Path 3: nothing configured and fetchproxy explicitly disabled.
|
|
94
94
|
throw new Error('IC auth: set IC_USERNAME + IC_PASSWORD, ' +
|
|
95
|
-
'or install the
|
|
95
|
+
'or install the ContextMint Bridge browser extension and sign into your IC portal ' +
|
|
96
96
|
'(unset IC_DISABLE_FETCHPROXY if it is set).');
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
@@ -156,11 +156,11 @@ async function liftBrowserSession(account) {
|
|
|
156
156
|
const xsrf = session.cookies['XSRF-TOKEN'];
|
|
157
157
|
if (!jsessionid) {
|
|
158
158
|
throw new Error(`JSESSIONID cookie not found on ${host}. ` +
|
|
159
|
-
'Sign into your IC portal in your browser (with the
|
|
159
|
+
'Sign into your IC portal in your browser (with the ContextMint Bridge extension installed) and retry.');
|
|
160
160
|
}
|
|
161
161
|
if (!xsrf) {
|
|
162
162
|
throw new Error(`XSRF-TOKEN cookie not found on ${host}. ` +
|
|
163
|
-
'Sign into your IC portal in your browser (with the
|
|
163
|
+
'Sign into your IC portal in your browser (with the ContextMint Bridge extension installed) and retry.');
|
|
164
164
|
}
|
|
165
165
|
return {
|
|
166
166
|
cookieHeader: `JSESSIONID=${jsessionid}; XSRF-TOKEN=${xsrf}`,
|
|
@@ -177,7 +177,7 @@ async function liftBrowserSession(account) {
|
|
|
177
177
|
// to hand-write here.
|
|
178
178
|
if (classifyBridgeError(e) === 'bridge_down') {
|
|
179
179
|
const downErr = e;
|
|
180
|
-
throw new Error(`IC auth:
|
|
180
|
+
throw new Error(`IC auth: ContextMint Bridge is down (extension service worker unreachable after retry). ${downErr.hint}`);
|
|
181
181
|
}
|
|
182
182
|
const msg = e instanceof Error ? e.message : String(e);
|
|
183
183
|
throw new Error('IC auth: no IC_USERNAME/IC_PASSWORD set, and fetchproxy lift failed: ' + msg);
|