返回市场
画布-mcp

画布-mcp

作者:mbcrosiersamuel5 星标更新:2025-09-05

项目介绍

Canvas 作业助手 MCP 服务器

概述

此模型上下文协议(MCP)服务器允许您在不离开您的大型语言模型(例如 Claude Desktop)的情况下与 Canvas/Instructure 课程和作业进行交互。

它允许您通过编程方式检索、搜索和总结课程及作业信息,例如检查即将到来的作业的截止日期:

截止日期

功能

工具

  1. 列出课程

    • 检索课程列表
    • 根据课程状态过滤(活动、已完成或全部)
  2. 搜索作业

    • 在课程中搜索作业
    • 过滤条件:
      • 搜索查询
      • 截止日期范围
      • 特定课程
      • 包括/排除已完成课程
  3. 获取作业详情

    • 获取特定作业的详细信息
    • 多种输出格式(完整HTML、纯文本、Markdown)

资源

  • 作业内容:使用标准化的URI格式检索完整的作业详情

预备知识

  • Node.js
  • Canvas LMS 账户
  • Canvas API Token
  • Canvas 域名

环境设置

设置以下环境变量:

  • CANVAS_API_TOKEN:您的 Canvas API 访问令牌(请参阅下面的说明)
  • CANVAS_DOMAIN:您的 Canvas 机构域名(例如,canvas.youruniversity.edu

如何获取您的 Canvas API Token

  1. 登录 Canvas
  2. 导航到账户 > 设置
  3. 滚动到“批准集成”部分
  4. 点击“新建访问令牌”
  5. 复制生成的令牌

更多详情,请参阅 Canvas 提供的这些说明

安全提示

请保密您的 CANVAS_API_TOKEN。不要将其提交到版本控制中。

安装

  1. 克隆仓库并安装依赖项

克隆仓库

git clone https://github.com/mbcrosier/canvas-mcp.git
cd canvas-mcp

安装依赖项。如果出现错误,请确保已安装 Node.js

npm install
  1. 连接到 MCP 服务器

    复制以下 JSON 并用适当的 {{PATH}} 值替换:

    {
      "mcpServers": {
        "canvas": {
          "command": "node", 
          "args": ["/绝对路径/to/canvas-mcp/src/index.ts"], // 进入 src 仓库,运行 `pwd` 并在此处输入输出
          "env": {
             "CANVAS_API_TOKEN": "在这里填写你的api_token",
             "CANVAS_DOMAIN": "myschool.instructure.com"
           }
        }
      }
    }
    

    对于 Claude,请将此文件保存为 claude_desktop_config.json 在您的 Claude Desktop 配置目录中:

    ~/Library/Application Support/Claude/claude_desktop_config.json
    

    对于 Cursor,请将此文件保存为 mcp.json 在您的 Cursor 配置目录中:

    ~/.cursor/mcp.json
    
  2. 重启 Claude Desktop / Cursor

    打开 Claude Desktop,现在您应该能看到 Canvas 作为一个可用的集成选项。

    或者重启 Cursor。

MCP 工具

  • list_courses:默认显示所有活动课程。使用标志显示已完成或全部课程
  • search_assignments:搜索作业标题和描述
  • get_assignment:检索完整的作业详情

故障排除

常见问题

  • 令牌无效

    • 重新生成您的 Canvas API 令牌
    • 确保令牌具有适当的权限
  • 域名错误

    • 再次检查您的 Canvas 机构域名
    • 确认没有拼写错误

免责声明

这是一个非官方的 Canvas MCP,与 Canvas 或 Instructure 无关。我也不是专业软件工程师,这个项目是使用 Claude 快速编写的,因此请自行承担风险使用它 :)

致谢!