内容
# CanvasMCP-Py
Canvas 学习管理系统(LMS)的[模型上下文协议(MCP)](https://modelcontextprotocol.io/)服务器,使用 Python 编写。
该服务器允许 AI 代理与 Canvas 交互,以检索课程信息、作业、模块、文件等。
## 功能
- **课程**:列出和获取课程详情。
- **作业**:列出作业、测验,并获取验证详情。
- **内容**:访问模块、页面、文件夹和文件。
- **社交**:访问公告、讨论主题、待办事项和日历事件。
- **文件处理**:自动从 PDF 文件中提取文本。
- **身份验证**:安全的 Bearer Token 身份验证,用于服务器访问。
## 前置条件
- Python 3.11 或更高版本
- [uv](https://github.com/astral-sh/uv)(推荐用于依赖项管理)
- 有效的 Canvas API Token(在 Canvas 账户设置中生成)
## 配置
1. 克隆仓库。
2. 将 `.env.example` 复制到 `.env`:
```bash
cp .env.example .env
```
3. 编辑 `.env` 并配置您的凭证:
```ini
# 您的 Canvas 实例 URL(例如 https://canvas.instructure.com)
CANVAS_BASE_URL=https://canvas.your-institution.edu
# 您的 Canvas API Token
CANVAS_TOKEN=your_canvas_api_token
# 用于保护此服务器的 Token(客户端必须提供此 Token)
MCP_SERVER_TOKEN=your_secret_server_token
```
## 开发设置
我们建议使用 `uv` 进行快速依赖项管理。
1. **安装依赖项**:
```bash
uv sync
```
2. **运行服务器**:
```bash
uv run python -m src.server
```
服务器将在 `http://127.0.0.1:2222/mcp` 启动(使用 SSE 传输)。
3. **验证连接**:
您可以使用附带的测试客户端来验证连接和工具功能:
```bash
uv run python test_client.py
```
## 部署(Docker)
您可以使用 Docker Compose 轻松部署服务器。
1. **启动容器**:
```bash
docker compose up --build -d
```
这将启动端口为 `2222` 的服务器。
2. **查看日志**:
```bash
docker compose logs -f
```
## 身份验证
服务器受 Bearer Token 身份验证保护。任何连接到 SSE 端点的客户端都必须提供在 `MCP_SERVER_TOKEN` 中配置的 Token。
**头部**:
```
Authorization: Bearer <your_mcp_server_token>
```
**端点**:`http://localhost:2222/mcp`
## 故障排除
### `list_files` 返回 403 禁止
某些课程隐藏了“文件”选项卡,这会导致 `list_files` 工具返回 `403 Forbidden` 错误。
**解决方法**:使用 `list_modules` 工具,并包含 `include=['items']`。
- 这将列出所有模块项,包括文件。
- 服务器可以成功访问和下载在模块中找到的文件,即使一般文件列表受到限制。