canvas-lms-mcp 2.5.2 → 2.6.0

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.
Files changed (48) hide show
  1. package/README.md +13 -12
  2. package/dist/canvas/index.cjs +3 -3
  3. package/dist/canvas/index.js +2 -2
  4. package/dist/canvas/modules.d.ts +6 -0
  5. package/dist/canvas/modules.d.ts.map +1 -1
  6. package/dist/{chunk-2EY3U7IR.js → chunk-CWDI77RZ.js} +12 -2
  7. package/dist/chunk-CWDI77RZ.js.map +1 -0
  8. package/dist/{chunk-U2FEEK3Y.js → chunk-H2NQM7XY.js} +2 -2
  9. package/dist/{chunk-EA5YGN5Z.cjs → chunk-LD4CRT2H.cjs} +4 -1
  10. package/dist/chunk-LD4CRT2H.cjs.map +1 -0
  11. package/dist/{chunk-QBDIQW5O.js → chunk-P3O477YD.js} +23 -4
  12. package/dist/chunk-P3O477YD.js.map +1 -0
  13. package/dist/{chunk-ZWEZ6ROI.js → chunk-QXMRHMLK.js} +4 -1
  14. package/dist/{chunk-ZWEZ6ROI.js.map → chunk-QXMRHMLK.js.map} +1 -1
  15. package/dist/{chunk-ZOOMOVE5.cjs → chunk-TRXRI2WF.cjs} +2 -2
  16. package/dist/{chunk-ZOOMOVE5.cjs.map → chunk-TRXRI2WF.cjs.map} +1 -1
  17. package/dist/{chunk-DG22XTGE.cjs → chunk-UMOP4V2I.cjs} +3 -3
  18. package/dist/{chunk-DG22XTGE.cjs.map → chunk-UMOP4V2I.cjs.map} +1 -1
  19. package/dist/{chunk-IQU4YMPO.cjs → chunk-WQMVEVJZ.cjs} +358 -339
  20. package/dist/chunk-WQMVEVJZ.cjs.map +1 -0
  21. package/dist/{chunk-27FJDG3Y.cjs → chunk-Y2CZGOKT.cjs} +15 -5
  22. package/dist/chunk-Y2CZGOKT.cjs.map +1 -0
  23. package/dist/{chunk-66TL3XQU.js → chunk-YSE25XUL.js} +2 -2
  24. package/dist/{chunk-66TL3XQU.js.map → chunk-YSE25XUL.js.map} +1 -1
  25. package/dist/cli.cjs +3 -3
  26. package/dist/cli.js +2 -2
  27. package/dist/http.cjs +9 -9
  28. package/dist/http.js +5 -5
  29. package/dist/init.cjs +3 -3
  30. package/dist/init.js +1 -1
  31. package/dist/prompts/generate.d.ts +2 -2
  32. package/dist/server.cjs +5 -5
  33. package/dist/server.d.ts +1 -1
  34. package/dist/server.js +4 -4
  35. package/dist/stdio.cjs +7 -7
  36. package/dist/stdio.js +5 -5
  37. package/dist/tools/destructive-policy.d.ts +1 -1
  38. package/dist/tools/destructive-policy.d.ts.map +1 -1
  39. package/dist/tools/index.d.ts +1 -1
  40. package/dist/tools/modules.d.ts.map +1 -1
  41. package/dist/tools/types.d.ts +1 -1
  42. package/package.json +2 -2
  43. package/dist/chunk-27FJDG3Y.cjs.map +0 -1
  44. package/dist/chunk-2EY3U7IR.js.map +0 -1
  45. package/dist/chunk-EA5YGN5Z.cjs.map +0 -1
  46. package/dist/chunk-IQU4YMPO.cjs.map +0 -1
  47. package/dist/chunk-QBDIQW5O.js.map +0 -1
  48. /package/dist/{chunk-U2FEEK3Y.js.map → chunk-H2NQM7XY.js.map} +0 -0
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  MCP server for [Canvas LMS](https://www.instructure.com/canvas). Read courses, assignments, submissions, rubrics, quizzes; grade, comment, manage course content, and handle Canvas admin workflows from any AI agent.
13
13
 
14
- 176 tools across Canvas courses, assignments, submissions, gradebook history, rubrics, quizzes, New Quizzes (LTI), files, users, groups, enrollments, discussions, modules, pages, calendar, conversations, peer reviews, accounts, analytics, outcomes, grading standards, grade projection, link audit, accessibility audit, content exports, content migrations, quiz accommodations, appointment groups, student workflows, student search, dashboard, instructor attention workflows, and health checks. Three deployment modes: stdio, HTTP, and library import.
14
+ 177 tools across Canvas courses, assignments, submissions, gradebook history, rubrics, quizzes, New Quizzes (LTI), files, users, groups, enrollments, discussions, modules, pages, calendar, conversations, peer reviews, accounts, analytics, outcomes, grading standards, grade projection, link audit, accessibility audit, content exports, content migrations, quiz accommodations, appointment groups, student workflows, student search, dashboard, instructor attention workflows, and health checks. Three deployment modes: stdio, HTTP, and library import.
15
15
 
16
16
  ## One-click install (Claude Desktop)
17
17
 
@@ -45,7 +45,7 @@ Installs the MCP server (via `npx canvas-lms-mcp`) and all 16 [Agent Skills](#ag
45
45
  | | canvas-lms-mcp | [vishalsachdev/canvas-mcp](https://github.com/vishalsachdev/canvas-mcp) | [DMontgomery40/mcp-canvas-lms](https://github.com/DMontgomery40/mcp-canvas-lms) |
46
46
  |---|---|---|---|
47
47
  | Language | TypeScript | Python | TypeScript |
48
- | Tools | 176 | 80+ | 54 |
48
+ | Tools | 177 | 80+ | 54 |
49
49
  | License | [![License: MIT](https://img.shields.io/github/license/bruchris/canvas-lms-mcp)](https://github.com/bruchris/canvas-lms-mcp/blob/main/LICENSE) | [![License](https://img.shields.io/github/license/vishalsachdev/canvas-mcp)](https://github.com/vishalsachdev/canvas-mcp/blob/main/LICENSE) | [![License](https://img.shields.io/github/license/DMontgomery40/mcp-canvas-lms)](https://github.com/DMontgomery40/mcp-canvas-lms/blob/main/LICENSE) |
50
50
  | Last commit | [![Last commit](https://img.shields.io/github/last-commit/bruchris/canvas-lms-mcp)](https://github.com/bruchris/canvas-lms-mcp) | [![Last commit](https://img.shields.io/github/last-commit/vishalsachdev/canvas-mcp)](https://github.com/vishalsachdev/canvas-mcp) | [![Last commit](https://img.shields.io/github/last-commit/DMontgomery40/mcp-canvas-lms)](https://github.com/DMontgomery40/mcp-canvas-lms) |
51
51
 
@@ -106,7 +106,7 @@ Once configured, try these prompts with your AI client:
106
106
 
107
107
  ## Tool Inventory
108
108
 
109
- ### All Registered Tools (176)
109
+ ### All Registered Tools (177)
110
110
 
111
111
  | Category | Tools |
112
112
  |----------|-------|
@@ -133,7 +133,7 @@ Once configured, try these prompts with your AI client:
133
133
  | Groups | `list_groups`, `list_group_members` |
134
134
  | Enrollments | `list_enrollments`, `list_course_enrollments`, `enroll_user`, `remove_enrollment` |
135
135
  | Discussions | `list_discussions`, `get_discussion`, `list_announcements`, `post_discussion_entry`, `create_discussion`, `update_discussion`, `delete_discussion` |
136
- | Modules | `list_modules`, `get_module`, `list_module_items`, `get_course_structure`, `view_course_structure`, `create_module`, `update_module`, `create_module_item`, `update_module_item`, `delete_module_item` |
136
+ | Modules | `list_modules`, `get_module`, `list_module_items`, `get_course_structure`, `view_course_structure`, `create_module`, `update_module`, `delete_module`, `create_module_item`, `update_module_item`, `delete_module_item` |
137
137
  | Pages | `list_pages`, `get_page`, `create_page`, `update_page`, `delete_page` |
138
138
  | Calendar | `list_calendar_events`, `create_calendar_event`, `update_calendar_event` |
139
139
  | Conversations | `list_conversations`, `get_conversation`, `get_conversation_unread_count`, `send_conversation` |
@@ -152,7 +152,7 @@ Once configured, try these prompts with your AI client:
152
152
  | Attention | `list_submission_comments_needing_attention`, `list_students_needing_attention` |
153
153
  | FERPA (conditional) | `resolve_pseudonym` — stdio only, registered when `CANVAS_PSEUDONYMIZE_STUDENTS=true` and `CANVAS_PSEUDONYMIZE_REVERSE_LOOKUP=true` |
154
154
 
155
- 122 tools are read-only and 54 tools perform Canvas write operations. When FERPA mode is enabled **on the stdio transport**, `resolve_pseudonym` is registered as the 177th tool overall (123rd read tool). The HTTP transport never registers it — see [FERPA mode](#ferpa-mode-student-pseudonymization).
155
+ 122 tools are read-only and 55 tools perform Canvas write operations. When FERPA mode is enabled **on the stdio transport**, `resolve_pseudonym` is registered as the 178th tool overall (123rd read tool). The HTTP transport never registers it — see [FERPA mode](#ferpa-mode-student-pseudonymization).
156
156
 
157
157
  All write tools require appropriate Canvas permissions. Canvas enforces its own permission model -- the MCP server does not bypass it.
158
158
 
@@ -317,7 +317,7 @@ const courses = await canvas.courses.list()
317
317
  | `--issuer` | `CANVAS_MCP_ISSUER` | (required in `oauth_brokered`) | Public URL of this server; OAuth issuer and resource prefix |
318
318
  | `doctor` | -- | -- | Print an identity-safe setup report (also `auth status`); exit 1 when something is missing |
319
319
  | `--role` | `CANVAS_ROLE` | (all tools) | Filter tools by Canvas role: `student`, `teacher`, or `admin` (see [Role-based tool filtering](#role-based-tool-filtering)) |
320
- | `--destructive-tools=<mode>` | `CANVAS_DESTRUCTIVE_TOOLS` | `allow` | `allow` or `block`. `block` unregisters the ten irreversible delete tools (see [Destructive tool policy](#destructive-tool-policy)) |
320
+ | `--destructive-tools=<mode>` | `CANVAS_DESTRUCTIVE_TOOLS` | `allow` | `allow` or `block`. `block` unregisters the eleven irreversible delete tools (see [Destructive tool policy](#destructive-tool-policy)) |
321
321
 
322
322
  ## Environment Variables
323
323
 
@@ -344,7 +344,7 @@ const courses = await canvas.courses.list()
344
344
  | `CANVAS_PSEUDONYM_DIR` | No | Absolute path that overrides the default pseudonym map directory |
345
345
  | `CANVAS_PSEUDONYM_AUDIT_LOG` | No | Path to an append-only file that mirrors `resolve_pseudonym` audit lines (stderr is always written) |
346
346
  | `CANVAS_PROVENANCE_FENCING` | No | **On by default.** Set to exactly `false` to disable [provenance fencing](#provenance-fencing-untrusted-canvas-content) |
347
- | `CANVAS_DESTRUCTIVE_TOOLS` | No | `allow` (default) or `block`. Set to exactly `block` to unregister the ten irreversible delete tools (see [Destructive tool policy](#destructive-tool-policy)) |
347
+ | `CANVAS_DESTRUCTIVE_TOOLS` | No | `allow` (default) or `block`. Set to exactly `block` to unregister the eleven irreversible delete tools (see [Destructive tool policy](#destructive-tool-policy)) |
348
348
  | `CANVAS_STRING_IDS` | No | **Off by default.** Set to exactly `true` to request Canvas identifiers as JSON strings instead of numbers (see [64-bit Canvas identifiers](#64-bit-canvas-identifiers-opt-in-string-ids)) |
349
349
 
350
350
  ## 64-bit Canvas identifiers (opt-in string IDs)
@@ -371,7 +371,7 @@ With the flag on, this server asks Canvas to render every identifier as a JSON *
371
371
 
372
372
  Canvas has no undo. This server cannot restore anything it deletes -- every recovery
373
373
  story for a mistaken delete is something you do outside this tooling, in Canvas or
374
- with your institution's admin. `CANVAS_DESTRUCTIVE_TOOLS=block` removes the ten
374
+ with your institution's admin. `CANVAS_DESTRUCTIVE_TOOLS=block` removes the eleven
375
375
  irreversible delete tools from the server entirely, so no amount of model confusion
376
376
  or [prompt injection](#provenance-fencing-untrusted-canvas-content) can reach them.
377
377
 
@@ -384,7 +384,7 @@ canvas-lms-mcp --destructive-tools=block --base-url https://school.instructure.c
384
384
  | Mode | Behaviour |
385
385
  |------|-----------|
386
386
  | `allow` | **Default.** Every tool is registered -- unchanged from previous releases. |
387
- | `block` | The ten tools below are not registered at all. They are absent from `tools/list`, and a call naming one is refused by the MCP protocol layer before any Canvas request is made. |
387
+ | `block` | The eleven tools below are not registered at all. They are absent from `tools/list`, and a call naming one is refused by the MCP protocol layer before any Canvas request is made. |
388
388
 
389
389
  **Blocked by `block`:**
390
390
 
@@ -398,6 +398,7 @@ canvas-lms-mcp --destructive-tools=block --base-url https://school.instructure.c
398
398
  | `delete_discussion` | The whole reply thread, including student-authored posts |
399
399
  | `delete_page` | Page body and revision history (keyed by URL slug, not a numeric ID) |
400
400
  | `delete_rubric` | The rubric and **every assignment association on it** |
401
+ | `delete_module` | The module and its **whole ordered item list**; the linked assignments, pages, quizzes, files and discussions are not deleted, but the module itself has to be rebuilt item by item |
401
402
  | `delete_file` | A file, addressed by a **global** ID with no course scoping in the call |
402
403
  | `delete_appointment_group` | Every reservation -- and it **emails every signed-up student** |
403
404
 
@@ -567,10 +568,10 @@ Three roles, plus the default of "unset = every tool":
567
568
 
568
569
  | `CANVAS_ROLE` | Tools exposed | Typical use |
569
570
  |---------------|---------------|-------------|
570
- | _(unset)_ | all (~176) | default; backwards-compatible |
571
+ | _(unset)_ | all (~177) | default; backwards-compatible |
571
572
  | `student` | ~63 | a student's own courses, grades, submissions, and read-only course content |
572
- | `teacher` | ~153 | grading, roster, content authoring, analytics |
573
- | `admin` | ~165 | everything `teacher` sees plus account-level tools (`enroll_user`, `list_account_users`, …) |
573
+ | `teacher` | ~154 | grading, roster, content authoring, analytics |
574
+ | `admin` | ~166 | everything `teacher` sees plus account-level tools (`enroll_user`, `list_account_users`, …) |
574
575
 
575
576
  Notes:
576
577
 
@@ -6,13 +6,13 @@
6
6
 
7
7
 
8
8
 
9
- var _chunk27FJDG3Ycjs = require('../chunk-27FJDG3Y.cjs');
9
+ var _chunkY2CZGOKTcjs = require('../chunk-Y2CZGOKT.cjs');
10
10
 
11
11
 
12
12
 
13
13
 
14
14
 
15
- var _chunkZOOMOVE5cjs = require('../chunk-ZOOMOVE5.cjs');
15
+ var _chunkTRXRI2WFcjs = require('../chunk-TRXRI2WF.cjs');
16
16
 
17
17
 
18
18
 
@@ -25,5 +25,5 @@ var _chunkZOOMOVE5cjs = require('../chunk-ZOOMOVE5.cjs');
25
25
 
26
26
 
27
27
 
28
- exports.CANVAS_MAX_ID = _chunk27FJDG3Ycjs.CANVAS_MAX_ID; exports.CanvasApiError = _chunkZOOMOVE5cjs.CanvasApiError; exports.CanvasClient = _chunk27FJDG3Ycjs.CanvasClient; exports.CanvasHttpClient = _chunkZOOMOVE5cjs.CanvasHttpClient; exports.MAX_SAFE_CANVAS_NUMBER_ID = _chunk27FJDG3Ycjs.MAX_SAFE_CANVAS_NUMBER_ID; exports.appendCanvasQuery = _chunkZOOMOVE5cjs.appendCanvasQuery; exports.canvasIdInput = _chunk27FJDG3Ycjs.canvasIdInput; exports.canvasIdList = _chunk27FJDG3Ycjs.canvasIdList; exports.compareCanvasIds = _chunk27FJDG3Ycjs.compareCanvasIds; exports.normalizeCanvasIdInput = _chunk27FJDG3Ycjs.normalizeCanvasIdInput; exports.toCanvasQuery = _chunkZOOMOVE5cjs.toCanvasQuery;
28
+ exports.CANVAS_MAX_ID = _chunkY2CZGOKTcjs.CANVAS_MAX_ID; exports.CanvasApiError = _chunkTRXRI2WFcjs.CanvasApiError; exports.CanvasClient = _chunkY2CZGOKTcjs.CanvasClient; exports.CanvasHttpClient = _chunkTRXRI2WFcjs.CanvasHttpClient; exports.MAX_SAFE_CANVAS_NUMBER_ID = _chunkY2CZGOKTcjs.MAX_SAFE_CANVAS_NUMBER_ID; exports.appendCanvasQuery = _chunkTRXRI2WFcjs.appendCanvasQuery; exports.canvasIdInput = _chunkY2CZGOKTcjs.canvasIdInput; exports.canvasIdList = _chunkY2CZGOKTcjs.canvasIdList; exports.compareCanvasIds = _chunkY2CZGOKTcjs.compareCanvasIds; exports.normalizeCanvasIdInput = _chunkY2CZGOKTcjs.normalizeCanvasIdInput; exports.toCanvasQuery = _chunkTRXRI2WFcjs.toCanvasQuery;
29
29
  //# sourceMappingURL=index.cjs.map
@@ -6,13 +6,13 @@ import {
6
6
  canvasIdList,
7
7
  compareCanvasIds,
8
8
  normalizeCanvasIdInput
9
- } from "../chunk-2EY3U7IR.js";
9
+ } from "../chunk-CWDI77RZ.js";
10
10
  import {
11
11
  CanvasApiError,
12
12
  CanvasHttpClient,
13
13
  appendCanvasQuery,
14
14
  toCanvasQuery
15
- } from "../chunk-66TL3XQU.js";
15
+ } from "../chunk-YSE25XUL.js";
16
16
  export {
17
17
  CANVAS_MAX_ID,
18
18
  CanvasApiError,
@@ -48,6 +48,12 @@ export declare class ModulesModule {
48
48
  position?: number;
49
49
  published?: boolean;
50
50
  }): Promise<CanvasModule>;
51
+ /**
52
+ * Canvas answers a module DELETE with the deleted module's body (the
53
+ * controller renders `module_json` with no root key). The module's items go
54
+ * with it; the content they link to is stored separately in the course.
55
+ */
56
+ delete(courseId: CanvasId, moduleId: CanvasId): Promise<CanvasModule>;
51
57
  createItem(courseId: CanvasId, moduleId: CanvasId, params: CreateModuleItemParams): Promise<CanvasModuleItem>;
52
58
  updateItem(courseId: CanvasId, moduleId: CanvasId, itemId: CanvasId, params: UpdateModuleItemParams): Promise<CanvasModuleItem>;
53
59
  /** Canvas answers a module-item DELETE with the deleted item's body. */
@@ -1 +1 @@
1
- {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/canvas/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAEpC,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,QAAQ,CAAA;CACrB;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIvD;;;;;OAKG;IACG,aAAa,CACjB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,CAAC,YAAY,GAAG;QAAE,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAA;KAAE,CAAC,EAAE,CAAC;IAOvD,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAIlE,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAM9E,MAAM,CACV,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,CAAA;KACrC,GACA,OAAO,CAAC,YAAY,CAAC;IAOlB,MAAM,CACV,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAChE,OAAO,CAAC,YAAY,CAAC;IAOlB,UAAU,CACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,gBAAgB,CAAC;IAUtB,UAAU,CACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,gBAAgB,CAAC;IAU5B,wEAAwE;IAClE,UAAU,CACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,gBAAgB,CAAC;IAOtB,kBAAkB,CACtB,QAAQ,EAAE,QAAQ,EAClB,IAAI,GAAE;QAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAAC,qBAAqB,CAAC,EAAE,OAAO,CAAA;KAAO,GAC7E,OAAO,CAAC,qBAAqB,CAAC;CAkDlC"}
1
+ {"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../src/canvas/modules.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CanvasApiError,
3
3
  CanvasHttpClient
4
- } from "./chunk-66TL3XQU.js";
4
+ } from "./chunk-YSE25XUL.js";
5
5
 
6
6
  // src/canvas/courses.ts
7
7
  var DEFAULT_LIST_INCLUDE = ["term"];
@@ -851,6 +851,16 @@ var ModulesModule = class {
851
851
  body: JSON.stringify({ module: params })
852
852
  });
853
853
  }
854
+ /**
855
+ * Canvas answers a module DELETE with the deleted module's body (the
856
+ * controller renders `module_json` with no root key). The module's items go
857
+ * with it; the content they link to is stored separately in the course.
858
+ */
859
+ async delete(courseId, moduleId) {
860
+ return this.client.request(`/api/v1/courses/${courseId}/modules/${moduleId}`, {
861
+ method: "DELETE"
862
+ });
863
+ }
854
864
  async createItem(courseId, moduleId, params) {
855
865
  return this.client.request(
856
866
  `/api/v1/courses/${courseId}/modules/${moduleId}/items`,
@@ -2060,4 +2070,4 @@ export {
2060
2070
  normalizeCanvasIdInput,
2061
2071
  CanvasClient
2062
2072
  };
2063
- //# sourceMappingURL=chunk-2EY3U7IR.js.map
2073
+ //# sourceMappingURL=chunk-CWDI77RZ.js.map