内容
# Moodle 学习 MCP
一个 [MCP](https://modelcontextprotocol.io) 服务器,允许 Claude 读取您的 ETH Moodle 课程,以便它可以规划您的考试准备。您可以向 Claude 提问:
> "对于控制系统 II,12 天后考试 — 我有多少讲座、问题集、测验和练习考试,我应该做些什么?"
服务器获取、统计和分类您的课程内容。Claude 进行推理。适用于任何 Moodle 网站(默认为 ETH;请为其他网站设置 `MOODLE_URL`)。
## Claude 获取的信息
| 工具 | 功能 |
|------|--------------|
| `list_courses` | 您已注册的课程 |
| `get_course_overview` | 检测到的计数(讲座 / 问题集 / 练习考试 / 测验)+ 原始项目列表 |
| `sync_course` | 下载并提取所有材料到本地缓存 |
| `list_quizzes` | 每个测验 + 您已尝试的次数 |
| `search_materials` | 跨所有同步材料的全文搜索 |
| `get_material` | 一个文件的提取文本,供 Claude 读取 |
## 设置(ETH 学生)
需要 Python 3.10+。
```bash
git clone <此仓库> && cd Moodle-MCP
pip install -e .
```
### 1. 获取您的令牌(一次性)
ETH 使用 SSO,因此您需要一个 Moodle **网络服务令牌**(一个 32 个字符的十六进制字符串)。该令牌存储在您的 OS 密钥环中(从不存储在文件中,从不存储在 git 中),并且长期有效。
```bash
python -m moodle_mcp auth
```
这会打开一个浏览器;使用 SSO 登录。最后,Moodle 尝试通过 `moodlemobile://token=...` 重定向返回令牌。由于没有为 `moodlemobile://` 方案注册应用程序,因此您的浏览器会显示一个错误 — **"地址无效"**(或 *"Safari 无法打开页面,因为地址无效"*)。这是**预期行为**。您只需要从该失败的重定向中提取 `token=...` 值,然后在提示符中粘贴它。
大多数浏览器(包括 Safari 和 Chrome)**隐藏**失败的 URL,因此请从 DevTools 中获取:
- **Safari** — 启用 **设置 → 高级 → "为网页开发者显示功能"**,然后 **开发者 → 显示网页检查器** (`⌥⌘I`) → **网络** 标签。运行登录,点击 **`launch.php`** 条目 → **响应**,并搜索 `moodlemobile://token=`。复制整个值。
- **Chrome / Edge** — `Ctrl/⌘+Shift+I` → **网络** 标签 → 运行登录 → 打开 **`launch.php`** 响应并找到 `token=`。
在提示符中粘贴该值(该工具为您解码)。
> **非 ETH Moodle 网站:** 许多网站直接在其个人资料 → **首选项 → 安全密钥** (`<您的-moodle>/user/managetoken.php`) 下公开令牌,列为 **"Moodle 移动网络服务"**。如果它存在,请跳过浏览器操作:`python -m moodle_mcp auth --token <令牌>`。注意:该页面上的 **RSS** 令牌*不是*正确的令牌,ETH 不在那里列出移动令牌。
验证:
```bash
python -m moodle_mcp doctor
```
### 2. 使用 Claude Code 注册
```bash
claude mcp add moodle -- python -m moodle_mcp serve
```
然后在 Claude 中: *"列出我的 Moodle 课程"*,或 *"给我一个流体动力学的学习概述。*
## 其他大学
```bash
export MOODLE_URL="https://moodle.your-uni.example"
python -m moodle_mcp auth
```
分类器关键词 (`taxonomy.yaml`) 已针对德语 + 英语 ETH 命名进行调整。如果您的课程名称不同,请在其中添加您自己的模式。
## 隐私和安全
- 您的令牌是您的 Moodle 帐户密码。它仅存在于您的 OS 密钥环中。`.gitignore` 排除缓存和任何令牌文件。
- 本地缓存 (`~/.moodle-mcp/`) 保留受版权保护的课程材料 — 它保留在您的机器上。
- 仅使用 Moodle 批准的移动网络服务 API。无爬虫。
## 开发
```bash
pip install -e ".[dev]"
pytest
```