canvas-parent-mcp 2.1.4 → 2.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 Canvas LMS (Instructure) — courses, grades, assignments, announcements, planner, conversations, files",
10
- "version": "2.1.4"
10
+ "version": "2.1.5"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "Canvas LMS",
16
16
  "source": "./",
17
17
  "description": "Canvas LMS (Instructure) MCP server for Claude — student/observer access via natural language",
18
- "version": "2.1.4",
18
+ "version": "2.1.5",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "canvas-parent-mcp",
3
3
  "displayName": "Canvas LMS",
4
- "version": "2.1.4",
4
+ "version": "2.1.5",
5
5
  "description": "Canvas LMS (Instructure) MCP server for Claude — courses, grades, assignments, announcements, planner, conversations, files",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/README.md CHANGED
@@ -38,7 +38,7 @@ Set `CANVAS_BASE_URL` plus one of four auth modes. `canvas-parent-mcp` tries the
38
38
  1. **`CANVAS_TOKEN`** → personal access token
39
39
  2. **`CANVAS_CLIENT_ID` + `CANVAS_CLIENT_SECRET` + `CANVAS_REFRESH_TOKEN`** → OAuth
40
40
  3. **`CANVAS_USERNAME` + `CANVAS_PASSWORD`** → session-scrape (direct Canvas accounts only)
41
- 4. **fetchproxy fallback** → no env vars needed; reads `canvas_session` + `pseudonym_credentials` cookies from your signed-in Canvas tab via the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension
41
+ 4. **fetchproxy fallback** → no env vars needed; reads `canvas_session` + `pseudonym_credentials` cookies from your signed-in Canvas tab via the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension
42
42
 
43
43
  If none succeed, you get an error that names every escape hatch.
44
44
 
@@ -48,7 +48,13 @@ If none succeed, you get an error that names every escape hatch.
48
48
  CANVAS_BASE_URL=https://cms.instructure.com
49
49
  ```
50
50
 
51
- Install the fetchproxy 0.3.0 Chrome / Safari extension (Chrome Web Store / Safari `.dmg`), sign into your Canvas instance once, and the MCP reads your session cookies at startup. After that, all Canvas API calls go directly from Node — the extension is **not** in the request hot path. Works with any auth flow (SSO/SAML/2FA included) because Canvas itself handled the sign-in.
51
+ Install the ContextMint Bridge browser extension from its [releases page](https://github.com/nullnet-app/contextmint-bridge/releases) (Chrome: download the chrome zip, unzip it, and load it unpacked at `chrome://extensions` with Developer mode on — there is no Chrome Web Store listing yet; Safari: not available yet — it will ship inside the ContextMint app, which has no public download yet, so use Chrome for now), sign into your Canvas instance once, and the MCP reads your session cookies at startup. After that, all Canvas API calls go directly from Node — the extension is **not** in the request hot path. Works with any auth flow (SSO/SAML/2FA included) because Canvas itself handled the sign-in.
52
+
53
+ > **Where the extension comes from.** ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README ([Extension](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 (`npm run build`, per its README), or check a release zip against the `.sha256` file published beside it:
54
+ >
55
+ > ```bash
56
+ > shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256
57
+ > ```
52
58
 
53
59
  Multiple districts? Declared domain `instructure.com` matches every `*.instructure.com` host, so you only pair the extension once. The MCP uses whichever district you set in `CANVAS_BASE_URL`.
54
60
 
package/dist/auth.js CHANGED
@@ -140,7 +140,7 @@ export async function resolveAuth() {
140
140
  throw new Error('Missing Canvas auth config. Set one of: CANVAS_TOKEN (personal access token), ' +
141
141
  'CANVAS_USERNAME+CANVAS_PASSWORD (auto-login), ' +
142
142
  'all three of CANVAS_CLIENT_ID, CANVAS_CLIENT_SECRET, CANVAS_REFRESH_TOKEN (OAuth), ' +
143
- 'or install the fetchproxy extension and sign into your Canvas instance ' +
143
+ 'or install the ContextMint Bridge browser extension and sign into your Canvas instance ' +
144
144
  '(unset CANVAS_DISABLE_FETCHPROXY if it is set).');
145
145
  }
146
146
  /**
@@ -218,7 +218,7 @@ async function liftBrowserCookie(declaredDomain, baseHost) {
218
218
  if (!canvasSession || !pseudoCreds) {
219
219
  throw new Error(`required cookies not found on ${baseHost}. ` +
220
220
  'Sign into your Canvas instance in the browser ' +
221
- '(with the fetchproxy extension installed) and retry.');
221
+ '(with the ContextMint Bridge extension installed) and retry.');
222
222
  }
223
223
  return `canvas_session=${canvasSession}; pseudonym_credentials=${pseudoCreds}`;
224
224
  }
@@ -229,7 +229,7 @@ async function liftBrowserCookie(declaredDomain, baseHost) {
229
229
  // the user needs to wake it. `.hint` is the actionable copy.
230
230
  if (classifyBridgeError(e) === 'bridge_down') {
231
231
  const downErr = e;
232
- throw new Error(`Canvas auth: fetchproxy bridge is down (extension service worker unreachable after retry). ${downErr.hint}`);
232
+ throw new Error(`Canvas auth: ContextMint Bridge is down (extension service worker unreachable after retry). ${downErr.hint}`);
233
233
  }
234
234
  const msg = e instanceof Error ? e.message : String(e);
235
235
  throw new Error(`Canvas auth: no CANVAS_TOKEN, CANVAS_CLIENT_*/CANVAS_REFRESH_TOKEN, or CANVAS_USERNAME/CANVAS_PASSWORD set, ` +