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.
@@ -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.2"
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.2",
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.2",
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.2",
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.2",
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.2', // x-release-please-version
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.2",
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.2",
9
+ "version": "1.5.3",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "canvas-parent-mcp",
14
- "version": "1.5.2",
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.