项目简介

Canvas学生MCP服务器是一个基于Model Context Protocol (MCP) 构建的后端服务,旨在将Canvas学习管理系统的数据和功能以标准化的方式提供给大型语言模型(LLM)客户端。它允许LLM通过调用预定义的工具来获取学生的课程信息、作业详情、 upcoming 事件、成绩、公告、模块、待办事项、日历事件、讨论和测验数据,以及个人资料和提交状态。该服务器支持OAuth 2.1认证,并优化在Cloudflare Workers上部署,以实现高性能和可扩展性。

主要功能点

  • Canvas数据访问:通过集成的工具,LLM可以获取Canvas LMS中的各种学生相关数据,包括:
    • 列出所有活跃课程。
    • 获取指定课程的所有作业。
    • 获取即将到来的作业和事件。
    • 查询指定课程的成绩。
    • 获取指定课程的公告。
    • 列出指定课程的所有模块。
    • 获取用户的待办事项列表。
    • 获取指定日期范围内的日历事件。
    • 查看指定课程的讨论话题。
    • 列出指定课程的所有测验。
    • 获取当前认证用户的个人资料。
    • 查询指定作业的提交状态。
  • OAuth 2.1认证:支持PKCE(Proof Key for Code Exchange)扩展的OAuth 2.1授权码流,确保客户端与MCP服务器之间的安全认证。
  • API Key认证:除了OAuth,还支持API Key方式进行客户端认证。
  • Cloudflare Workers部署:设计为在Cloudflare Workers无服务器平台运行,利用边缘计算提供低延迟和高可用性。
  • MCP兼容性:完全兼容Model Context Protocol,对外提供标准化的JSON-RPC接口,方便与任何MCP客户端集成。
  • 自服务配置发现:提供'.well-known/mcp-config'端点,允许MCP客户端自动发现服务器配置。

安装步骤

该项目主要设计为在Cloudflare Workers上运行。

  1. 克隆仓库
    git clone https://github.com/a-ariff/canvas-student-mcp-server.git
    cd canvas-student-mcp-server
  2. 安装依赖
    npm install
  3. 配置环境变量: 您需要为Cloudflare Worker设置以下环境变量(通过'wrangler.toml'文件或Cloudflare Workers控制台):
    • 'OAUTH_KV': 一个Cloudflare KV命名空间绑定,用于存储OAuth授权码和令牌。
    • 'API_KEYS_KV': 另一个Cloudflare KV命名空间绑定,用于存储API Keys(如果使用API Key认证方式)。
    • 'OAUTH_CLIENT_ID': OAuth客户端ID,例如 'canvas-mcp-client'。
    • 'OAUTH_CLIENT_SECRET': OAuth客户端密钥(此仓库的默认客户端是非机密的,可以留空)。
    • 'OAUTH_ISSUER': OAuth发行者URL,例如 'https://your-worker-domain.com'。
    • 'MCP_OBJECT': Durable Object命名空间绑定,用于持久化MCP Agent实例(如果使用Durable Objects)。
    • 'CANVAS_API_KEY': 您的Canvas API访问令牌。可以从Canvas的"账户" -> "设置" -> "批准的集成"中获取。
    • 'CANVAS_BASE_URL': 您的Canvas实例URL,例如 'https://canvas.instructure.com'。
  4. 部署到Cloudflare Workers
    npx wrangler deploy
    部署成功后,您的MCP服务器将在Cloudflare Workers提供的URL上运行。

MCP客户端配置

MCP客户端(如Smithery)连接此服务器时,需要以下配置信息。请将 'your-worker-domain.com' 替换为您的Cloudflare Worker实际部署的域名。

{
  "name": "Canvas Student MCP Server",
  "command": "MCP_SERVER_HTTP_URL",
  "args": {
    "url": "https://your-worker-domain.com/public",
    "params": {
      "canvasApiKey": "<YOUR_CANVAS_API_TOKEN>",
      "canvasBaseUrl": "https://canvas.instructure.com"
    }
  },
  "description": "连接到您的Canvas学生MCP服务器,获取课程、作业、成绩等信息。",
  "server_name": "canvas-student",
  "server_type": "http"
}

参数注释:

  • 'name': 显示在客户端的用户界面中的服务器名称。
  • 'command': 指示MCP客户端通过HTTP URL连接到服务器。对于部署在Cloudflare Workers上的MCP服务器,这是推荐的连接方式。
  • 'args.url': 您的Cloudflare Worker的公共MCP端点URL。这里使用的是'/public'端点,它通过URL查询参数传递Canvas API凭据。
  • 'args.params.canvasApiKey': 必填。您的Canvas API访问令牌。请替换为实际的令牌。
  • 'args.params.canvasBaseUrl': 您的Canvas实例的基准URL。如果不是'https://canvas.instructure.com',请进行修改。
  • 'description': 服务器的简要说明。
  • 'server_name': 服务器的唯一标识符。
  • 'server_type': 服务器的连接类型,这里是'http'。

您也可以使用OAuth认证的端点('/mcp'),但通常需要客户端SDK或UI层进行OAuth流程管理。对于最简单的集成,推荐使用'/public'端点并通过参数传递API Key。

基本使用方法

一旦MCP服务器部署并配置好MCP客户端,您可以通过LLM客户端(如Smithery)与服务器交互。您可以使用自然语言向LLM提问,LLM将自动调用Canvas学生MCP服务器提供的工具来获取信息。

示例查询:

  • "列出我所有的Canvas课程。" (LLM将调用 'list_courses' 工具)
  • "我的ID为12345的课程有什么作业?" (LLM将调用 'get_assignments' 工具,并传入 'course_id: 12345')
  • "我最近有什么待办事项?" (LLM将调用 'get_todo_items' 工具)
  • "我的Canvas个人资料信息是什么?" (LLM将调用 'get_user_profile' 工具)
  • "查询ID为98765的课程的成绩。" (LLM将调用 'get_grades' 工具,并传入 'course_id: 98765')

信息

分类

开发者工具