关于 canvas-course-builder
canvas-course-builder 是通过自然语言、JSON 模板或现有课程结构,在 Canvas 中构建课程模块与内容的技能,适用于课程设计人员。它会先生成预览并等待确认,再创建并组织项目。
主要功能
- 01按描述构建课程结构
- 02从 JSON 模板生成结构
- 03复制现有课程结构
- 04确认预览后创建内容
- 05将结构保存为模板
适用场景
- 01为新学期搭建每周模块
- 02用模板创建课程框架
- 03将一门课程的结构复制到另一门
- 04保存常用课程结构供复用
MCP 相关
需要连接 Canvas MCP 服务,并调用其课程查询、结构读取、模块和内容创建等工具。复制课程时仅复制结构,不复制内容。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vishalsachdev/ canvas-mcp --skill canvas-course-builder安装后在 Claude Code 中输入/canvas-course-builder确认已加载。
详细介绍
Canvas 课程构建器
根据自然语言描述、JSON 模板,或通过克隆现有课程,构建完整的 Canvas 课程结构。在一个工作流中创建包含页面、作业、讨论的模块,并做好组织安排。
前提条件
- Canvas MCP 服务必须正在运行并已连接。
- 已通过身份验证的用户必须在目标课程中拥有教师或设计师角色。
- 目标课程必须已存在于 Canvas 中(此技能用于填充课程,不会创建课程本身)。
模式
此技能有三种模式:
模式 1:根据规范构建(默认)
用户用自然语言描述课程结构,或提供结构化规范。
模式 2:根据模板构建
加载保存的 JSON 模板来搭建课程框架。
模式 3:从现有课程克隆
读取课程 A 的结构,并将其复制到课程 B。
步骤
1. 确定模式并收集输入
询问用户希望如何构建课程:
您希望如何构建课程结构?
- 描述结构 —— 告诉我课程结构(例如:“15 周,每周包含概览页面、作业和讨论”)
- 使用模板 —— 加载已保存的模板文件
- 克隆其他课程 —— 从现有课程复制结构
**模式 1(规范):**询问以下信息:
- 目标课程(课程代码或 ID)
- 模块/周/单元的数量
- 模块命名模式(例如:“第 N 周:[主题]”)
- 每个模块的标准内容(概览页面、作业、讨论等)
- 模块的任何特定变化(期中考试周、期末项目等)
**模式 2(模板):**询问模板文件路径。解析 JSON 模板。
**模式 3(克隆):**询问以下信息:
- 源课程(课程代码或 ID)
- 目标课程(课程代码或 ID)
- 调用
get_course_structure(source_course)读取完整结构
2. 生成结构预览
构建将要创建的内容预览,并展示给用户:
## Course Build Plan: [Course Name]
### Structure: 15 modules x 4 items each = 60 items total
| Module | Page | Assignment | Discussion | SubHeader |
|--------|------|------------|------------|-----------|
| Week 1: Introduction | Overview | HW 1 (10 pts) | Week 1 Forum | Materials |
| Week 2: Fundamentals | Overview | HW 2 (10 pts) | Week 2 Forum | Materials |
| ... | ... | ... | ... | ... |
| Week 14: Review | Overview | -- | Review Forum | Materials |
| Week 15: Final | Overview | Final Project (100 pts) | -- | Materials |
### Items to create:
- 15 modules
- 15 overview pages
- 14 assignments
- 14 discussion topics
- 15 subheaders
- Total: 73 Canvas objects
Shall I proceed?
3. 由用户批准或修改
等待用户明确批准。用户可以:
- 按原样批准
- 请求修改(添加/删除内容、更改命名、调整分值)
- 取消
未经批准不得继续。
4. 执行创建
按依赖顺序创建内容:
- 先创建模块: 对每个模块调用
create_module,并设置published=false(模块默认已发布) - 页面: 对每个概览页面调用
create_page,并设置published=false(页面默认已发布) - 作业: 对每项作业调用
create_assignment(未发布) - 讨论: 对每个论坛调用
create_discussion_topic - 模块内容项: 调用
add_module_item,将创建的每个内容项关联到对应模块
跟踪进度并及时汇报:
Creating modules... 15/15 done
Creating pages... 15/15 done
Creating assignments... 14/14 done
Creating discussions... 14/14 done
Linking items to modules... 58/58 done
如果创建任何内容失败,记录错误并继续创建其余内容。
5. 汇报结果
## Build Complete: [Course Name]
### Created:
- 15 modules
- 15 overview pages
- 14 assignments
- 14 discussion topics
- 58 module items linked
### Failed (0):
None
### Next Steps:
- All items created **unpublished** -- publish when ready
- Add content to overview pages
- Set due dates on assignments
- Run `/canvas-course-qc` to verify structure
6. 保存为模板(可选)
构建完成后,提供将结构保存为可重复使用模板的选项:
您想将此结构保存为模板,以便用于后续课程吗?
如果用户同意,调用 get_course_structure(target_course) 并将输出保存为 JSON 文件。
使用的 MCP 工具
| 工具 | 用途 |
|---|---|
list_courses | 查找可用课程 |
get_course_structure | 读取用于克隆的源课程;构建后进行验证 |
create_module | 创建每个模块 |
create_page | 创建概览/内容页面 |
create_assignment | 创建作业 |
create_discussion_topic | 创建讨论论坛 |
add_module_item | 将内容项关联到模块 |
update_module | 在适当时发布模块 |
模板格式
模板是采用以下结构的 JSON 文件:
{
"template_name": "Standard 15-Week Semester",
"modules": [
{
"name_pattern": "Week {n}: {topic}",
"items": [
{"type": "SubHeader", "title_pattern": "Week {n} Materials"},
{"type": "Page", "title_pattern": "Week {n} Overview"},
{"type": "Assignment", "title_pattern": "HW {n}", "points": 10},
{"type": "Discussion", "title_pattern": "Week {n} Discussion"}
]
}
],
"special_modules": [
{"position": 8, "name": "Midterm Review", "items": [{"type": "Page", "title": "Midterm Study Guide"}]},
{"position": 15, "name": "Final Project", "items": [{"type": "Assignment", "title": "Final Project", "points": 100}]}
]
}
示例
用户:“为 BADM 350 构建一个 15 周的课程结构,每周包含概览页面、作业和讨论”
**Agent:**生成预览、征求批准,并创建 60 多项内容。
用户:“将 CS 101 的结构克隆到 CS 102”
**Agent:**读取 CS 101 的结构,为 CS 102 生成预览并征求批准,然后创建匹配的结构。
备注
- 只有传入
published=false时,模块和页面才会设为未发布(两者默认均为已发布)。create_assignment默认设为未发布。create_discussion_topic创建时始终会发布;如果暂时不希望学生看到讨论,请使用delayed_post_at安排发布时间,而不要现在创建。 - 克隆时不会复制内容,只复制结构(模块名称、项目类型和组织方式)。
- 若要在课程间复制内容(而不仅是结构),请使用
create_content_migration(预览 + 确认令牌),并轮询get_content_migration_status;少量页面可通过get_page_content+create_page逐页复制。 - 构建完成后运行
canvas-course-qc,以验证结构是否完整且一致。