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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +8 -2
- package/dist/auth.js +3 -3
- package/dist/bundle.js +741 -176
- package/dist/index.js +1 -1
- package/package.json +4 -4
- package/server.json +2 -2
- package/skills/canvas-parent/SKILL.md +2 -2
|
@@ -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.
|
|
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.
|
|
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
|
+
"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 [
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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, ` +
|