infinitecampus-mcp 3.1.3 → 3.1.5

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.
@@ -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.3"
10
+ "version": "3.1.5"
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.3",
18
+ "version": "3.1.5",
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.3",
4
+ "version": "3.1.5",
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. **fetchproxy 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 [fetchproxy 0.3.0 extension](https://github.com/chrischall/fetchproxy) (Chrome Web Store / Safari `.dmg`) and sign into your IC portal once. 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.
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 fetchproxy extension and sign into your IC portal ' +
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 fetchproxy extension installed) and retry.');
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 fetchproxy extension installed) and retry.');
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: fetchproxy bridge is down (extension service worker unreachable after retry). ${downErr.hint}`);
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);