项目简介
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上运行。
- 克隆仓库:
git clone https://github.com/a-ariff/canvas-student-mcp-server.git cd canvas-student-mcp-server - 安装依赖:
npm install - 配置环境变量:
您需要为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'。
- 部署到Cloudflare Workers:
部署成功后,您的MCP服务器将在Cloudflare Workers提供的URL上运行。npx wrangler deploy
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')
信息
分类
开发者工具