canvas-parent-mcp 1.5.2 → 1.5.3
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/dist/bundle.js +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/skills/canvas-parent/SKILL.md +61 -6
|
@@ -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": "1.5.
|
|
10
|
+
"version": "1.5.3"
|
|
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": "1.5.
|
|
18
|
+
"version": "1.5.3",
|
|
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": "1.5.
|
|
4
|
+
"version": "1.5.3",
|
|
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/dist/bundle.js
CHANGED
|
@@ -39595,7 +39595,7 @@ function loadAccount(env = process.env) {
|
|
|
39595
39595
|
// package.json
|
|
39596
39596
|
var package_default = {
|
|
39597
39597
|
name: "canvas-parent-mcp",
|
|
39598
|
-
version: "1.5.
|
|
39598
|
+
version: "1.5.3",
|
|
39599
39599
|
mcpName: "io.github.chrischall/canvas-parent-mcp",
|
|
39600
39600
|
description: "Canvas LMS (Instructure) MCP server \u2014 student/observer read access with optional file download",
|
|
39601
39601
|
author: "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
@@ -41054,7 +41054,7 @@ try {
|
|
|
41054
41054
|
}
|
|
41055
41055
|
await runMcp({
|
|
41056
41056
|
name: "canvas",
|
|
41057
|
-
version: "1.5.
|
|
41057
|
+
version: "1.5.3",
|
|
41058
41058
|
// x-release-please-version
|
|
41059
41059
|
tools: [
|
|
41060
41060
|
// Outside the `if (resolved)` on purpose: an unconfigured server must
|
package/dist/index.js
CHANGED
|
@@ -47,7 +47,7 @@ catch (e) {
|
|
|
47
47
|
// host's install-time `tools/list` succeeds.
|
|
48
48
|
await runMcp({
|
|
49
49
|
name: 'canvas',
|
|
50
|
-
version: '1.5.
|
|
50
|
+
version: '1.5.3', // x-release-please-version
|
|
51
51
|
tools: [
|
|
52
52
|
// Outside the `if (resolved)` on purpose: an unconfigured server must
|
|
53
53
|
// still expose something that can say WHY (see the tool's docblock).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "canvas-parent-mcp",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.3",
|
|
4
4
|
"mcpName": "io.github.chrischall/canvas-parent-mcp",
|
|
5
5
|
"description": "Canvas LMS (Instructure) MCP server — student/observer read access with optional file download",
|
|
6
6
|
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/chrischall/canvas-parent-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "1.5.
|
|
9
|
+
"version": "1.5.3",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "canvas-parent-mcp",
|
|
14
|
-
"version": "1.5.
|
|
14
|
+
"version": "1.5.3",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|
|
@@ -61,13 +61,13 @@ Precedence when multiple are set: `CANVAS_TOKEN` > username/password > OAuth > f
|
|
|
61
61
|
|
|
62
62
|
### Courses
|
|
63
63
|
- `canvas_list_courses` — your active courses with grades
|
|
64
|
-
- `canvas_get_course(courseId)` — course detail with syllabus + teachers
|
|
64
|
+
- `canvas_get_course(courseId, view?)` — course detail with syllabus + teachers
|
|
65
65
|
|
|
66
66
|
### Assignments & submissions
|
|
67
67
|
- `canvas_list_assignments(courseId)` — assignments in a course
|
|
68
68
|
- `canvas_list_missing_submissions` — past-due unsubmitted work
|
|
69
|
-
- `canvas_get_submission(courseId, assignmentId)` — your submission with comments + rubric
|
|
70
|
-
- `canvas_list_recent_submissions(courseId)` — recently graded submissions (default 14d)
|
|
69
|
+
- `canvas_get_submission(courseId, assignmentId, view?)` — your submission with comments + rubric
|
|
70
|
+
- `canvas_list_recent_submissions(courseId, view?)` — recently graded submissions (default 14d)
|
|
71
71
|
|
|
72
72
|
### Grades
|
|
73
73
|
- `canvas_list_enrollments` — per-course grades
|
|
@@ -78,15 +78,70 @@ Precedence when multiple are set: `CANVAS_TOKEN` > username/password > OAuth > f
|
|
|
78
78
|
- `canvas_list_planner_items` — unified to-do feed
|
|
79
79
|
|
|
80
80
|
### Communication
|
|
81
|
-
- `canvas_list_announcements(contextCodes)` — course announcements
|
|
81
|
+
- `canvas_list_announcements(contextCodes, view?)` — course announcements
|
|
82
82
|
- `canvas_list_conversations` — inbox
|
|
83
|
-
- `canvas_get_conversation(id)` — full conversation thread
|
|
84
|
-
- `canvas_list_discussion_topics(courseId)` — course discussion topics
|
|
83
|
+
- `canvas_get_conversation(id, view?)` — full conversation thread
|
|
84
|
+
- `canvas_list_discussion_topics(courseId, view?)` — course discussion topics
|
|
85
85
|
|
|
86
86
|
### Files
|
|
87
87
|
- `canvas_list_course_files(courseId)` — file metadata
|
|
88
88
|
- `canvas_download_file(url, destinationPath)` — download a file to disk
|
|
89
89
|
|
|
90
|
+
## Response shape (`view`)
|
|
91
|
+
|
|
92
|
+
Nine tools take `view: "compact" | "full"`, and **`compact` is the default** —
|
|
93
|
+
you get the slim shape without asking for it:
|
|
94
|
+
|
|
95
|
+
`canvas_get_profile`, `canvas_list_observees`, `canvas_get_course`,
|
|
96
|
+
`canvas_get_submission`, `canvas_list_recent_submissions`,
|
|
97
|
+
`canvas_list_announcements`, `canvas_list_conversations`,
|
|
98
|
+
`canvas_get_conversation`, `canvas_list_discussion_topics`.
|
|
99
|
+
|
|
100
|
+
**Compact here is media stripping, not a field projection — do not expect a
|
|
101
|
+
field list.** It removes the avatar URLs Canvas hangs on user objects
|
|
102
|
+
(`avatar_url`, `avatar_image_url`) and nothing else. This server hands back
|
|
103
|
+
Canvas's payload verbatim and holds no verified record of which of Canvas's
|
|
104
|
+
fields a caller needs, so it does not claim to keep some and drop others: a
|
|
105
|
+
record that came back with holes in it would read exactly like a verified
|
|
106
|
+
answer. Stripping is subtractive, so it cannot lose a field nobody knew about.
|
|
107
|
+
A conversation participant keeps their name and id on compact; they lose their
|
|
108
|
+
picture.
|
|
109
|
+
|
|
110
|
+
- **The link fields survive both rungs, named explicitly.** `url`, `html_url`
|
|
111
|
+
and `preview_url` are kept by name — `html_url` opens the item in Canvas,
|
|
112
|
+
`preview_url` renders a submission, and `url` is the download handle
|
|
113
|
+
`canvas_list_course_files` emits and `canvas_download_file` consumes. On an
|
|
114
|
+
`online_url` submission that `url` IS the student's submitted work. Without
|
|
115
|
+
the name, a student who submitted a link ending in `.png` would have had
|
|
116
|
+
their submission silently removed on the default rung.
|
|
117
|
+
- **Both avatar spellings really do appear.** One live
|
|
118
|
+
`canvas_list_conversations` response carried a default avatar
|
|
119
|
+
(`…/avatar-50.png`) on one participant and an uploaded, extension-less
|
|
120
|
+
thumbnail id on another. They are dropped by NAME, so both go — not one kept
|
|
121
|
+
and one lost depending on whether that person ever uploaded a photo.
|
|
122
|
+
|
|
123
|
+
Pass `view: "full"` when you want Canvas's payload untouched, avatars and all.
|
|
124
|
+
That is also why there is deliberately **no `raw` rung**: there is no
|
|
125
|
+
normalisation layer here for `full` to sit above, so `full` already IS the
|
|
126
|
+
untouched upstream payload and a third value would silently alias it.
|
|
127
|
+
|
|
128
|
+
The other ten tools take no `view`, for two different reasons:
|
|
129
|
+
|
|
130
|
+
- **Nothing to strip.** `canvas_list_courses`, `canvas_list_assignments`,
|
|
131
|
+
`canvas_list_missing_submissions`, `canvas_list_enrollments`,
|
|
132
|
+
`canvas_list_calendar_events`, `canvas_list_upcoming_events` and
|
|
133
|
+
`canvas_list_planner_items` embed no user object — a live
|
|
134
|
+
`canvas_list_courses` over twelve courses carried no media field of any kind
|
|
135
|
+
— and a knob that does not turn is worse than no knob. `canvas_healthcheck`
|
|
136
|
+
returns a verdict, not a record.
|
|
137
|
+
- **The URL is the product.** `canvas_list_course_files` and
|
|
138
|
+
`canvas_download_file` exist to hand you a file URL. Compact there would not
|
|
139
|
+
shrink the response, it would empty it.
|
|
140
|
+
|
|
141
|
+
Passing `view` to one of those ten is not an error and not a warning: MCP tool
|
|
142
|
+
schemas are non-strict, so the key is dropped and you get that tool's ordinary
|
|
143
|
+
output.
|
|
144
|
+
|
|
90
145
|
## Notes
|
|
91
146
|
|
|
92
147
|
- Set `CANVAS_NAME` if you want a friendly label other than the host portion of the base URL.
|