使用说明
Moodle MCP服务器(多课程版)
增强 模型上下文协议(MCP) 该服务器使Claude等AI助手能够与Moodle LMS进行交互。 此叉子增加了多课程支持,允许您从单个MCP服务器管理多个课程。
🍴 这是一个增强的fork peancor/moodle mcp服务器 有了显著的改进。
✅ 使用Moodle 4.5进行测试 (建造日期:20241007)。Moodle 4.x中内置的“Moodle移动web服务”包括该服务器所需的所有API功能,不需要自定义服务。
📖 教师还是Moodle管理员? 你不需要这个页面上的任何东西。跟随 设置指南(EN/ES) 获取英语和西班牙语的简单分步说明。
✨ 这个叉子有什么新功能
| 特色 | 原创 | 这款叉子 |
|---|---|---|
| 多课程支持 | ❌ 仅限单门课程 | ✅ 动态的 courseId 参数 |
| 列出所有课程 | ❌ 不可用 | ✅ list_courses 工具 |
| 查看课程内容 | ❌ 不可用 | ✅ get_course_contents 工具 |
| 管理员/教师访问权限 | ❌ 仅基于注册 | ✅ 使用基于能力的访问 |
| 论坛互动 | ❌ 不可用 | ✅ 浏览、发布和回复论坛 |
🛠️ 可用工具
课程发现
| 工具 | 说明 |
|---|---|
list_courses |
列出您有权访问的所有课程,包括ID、名称和摘要 |
get_course_contents |
获取课程章节、模块和活动(课程结构) |
学生管理
| 工具 | 说明 |
|---|---|
get_students |
检索注册学生的ID、姓名、电子邮件和最后访问时间 |
分配管理
| 工具 | 说明 |
|---|---|
get_assignments |
列出所有作业,包括截止日期和最高成绩 |
get_submissions |
查看学生提交的作业 |
get_submission_content |
获取包括文件在内的详细提交内容 |
provide_feedback |
对作业进行评分并提供反馈 |
测验管理
| 工具 | 说明 |
|---|---|
get_quizzes |
列出课程中的所有测验 |
get_quiz_grade |
获取学生在特定测验中的成绩 |
论坛管理
| 工具 | 说明 |
|---|---|
get_forums |
列出课程中的所有论坛 |
get_forum_discussions |
列出与作者的讨论、回复次数和帖子ID |
create_forum_discussion |
在论坛中创建新的讨论线程(HTML格式) |
reply_to_forum_discussion |
对现有论坛帖子的回复(HTML格式) |
多课程支持
所有课程专用工具都接受可选 courseId 参数:
"List all my Moodle courses" → list_courses()
"List students in course 5" → get_students(courseId=5)
"Show assignments" → get_assignments() // uses default if configured
"Quizzes in course 10" → get_quizzes(courseId=10)
它是如何工作的:
- 如果您指定
courseId在请求中,使用了该课程 - 如果您没有指定
courseId,默认从MOODLE_COURSE_ID已使用(如果已配置) MOODLE_COURSE_ID是 可选的 --您可以完全省略它,并始终动态指定课程
📋 需求
- Node.js v18或更高版本
- Moodle API代币 具有适当的权限
- 魔灯 启用了web服务的实例
🚀 安装
无需安装——Claude Desktop和Claude Code通过npm直接运行服务器 npx.
适用于Claude Desktop(Windows/macOS)
编辑您的配置文件:
- 窗户:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"moodle": {
"command": "npx",
"args": ["-y", "@ernesto-butto/moodle-mcp-server"],
"env": {
"MOODLE_API_URL": "https://your-moodle.com/webservice/rest/server.php",
"MOODLE_API_TOKEN": "your_token_here",
"MOODLE_COURSE_ID": "4"
}
}
}
}
💡 提示: 你可以省略
MOODLE_COURSE_ID完全如果你喜欢总是使用动态指定课程list_courses第一。
适用于克劳德代码(Linux/WSL)
添加到您的项目 .mcp.json:
{
"mcpServers": {
"moodle": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@ernesto-butto/moodle-mcp-server"],
"env": {
"MOODLE_API_URL": "https://your-moodle.com/webservice/rest/server.php",
"MOODLE_API_TOKEN": "${MOODLE_API_TOKEN}",
"MOODLE_COURSE_ID": "4"
}
}
}
}
然后将令牌设置为环境变量:
echo 'export MOODLE_API_TOKEN="your_token_here"' >> ~/.bashrc
source ~/.bashrc
环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
MOODLE_API_URL |
✅ 是 | 您的Moodle web服务端点 |
MOODLE_API_TOKEN |
✅ 是 | 用于身份验证的API令牌 |
MOODLE_COURSE_ID |
❌ 否 | 默认课程ID(可选--使用 list_courses 动态发现课程) |
来源(用于开发)
git clone https://github.com/ernesto-butto/moodle-mcp-server.git
cd moodle-mcp-server
npm install
npm run build
🔑 获取Moodle API代币
- 以管理员身份登录Moodle
- 首选 站点管理→ 服务器→ Web服务→ 外部服务
- 确保 “Moodle移动网络服务” 已启用(包括所有必需的API函数)
- 首选 站点管理→ 服务器→ Web服务→ 管理代币
- 点击 创建令牌,选择教师的用户帐户和 “Moodle移动网络服务”
- 复制令牌
💡 就这样 在Moodle 4.x中,移动web服务已经涵盖了该服务器使用的所有功能。无需创建自定义服务或添加单个功能。
查找您的课程ID
只需问克劳德: “列出我的所有Moodle课程” --the list_courses 该工具将返回所有课程及其ID。
您还可以在访问课程时在URL中找到它: https://your-moodle.com/course/view.php?id=4 --ID是 4.
Advanced: Custom Service (for minimal permissions)
如果您的管理员更喜欢创建仅具有所需功能的自定义服务,而不是使用移动web服务,请添加以下功能:
core_course_get_coursescore_course_get_contentscore_enrol_get_enrolled_usersmod_assign_get_assignmentsmod_assign_get_submissionsmod_assign_get_gradesmod_assign_get_submission_statusmod_assign_save_grademod_quiz_get_quizzes_by_coursesmod_quiz_get_user_best_grademod_forum_get_forums_by_coursesmod_forum_get_forum_discussionsmod_forum_add_discussionmod_forum_add_discussion_post
💡 示例用法
配置后,您可以询问Claude:
- “列出我的所有Moodle课程”
- “给我看看第五课的学生”
- “Unidad 3有什么作业?”
- “获取课程10的课程内容”
- “在测验15中显示学生42的测验成绩”
- “列出课程5中的论坛”
- “在论坛3中显示讨论”
- “在论坛3中创建主题为“第5周反馈”的新讨论”
- “用我对学生作品的评论回复帖子10”
🧪 发展
监视模式(自动重建)
npm run watch
使用MCP检查器进行调试
npm run inspector
这将打开一个基于浏览器的调试界面。
测试
单元测试 -使用模拟Moodle API响应运行完整的Vitest套件(无需凭据):
npm test
MCP集成测试 -通过stdio上的MCP协议生成服务器(与Claude Desktop的路径相同),并验证工具注册、参数验证和可选的实时API调用:
# Schema + validation only (no credentials needed)
npm run build && node test-mcp.mjs
# Against a live Moodle instance
MOODLE_API_URL="https://your-moodle.com/webservice/rest/server.php" \
MOODLE_API_TOKEN="your-token" \
MOODLE_COURSE_ID="4" \
node test-mcp.mjs
集成测试检查:
- 所有工具都注册了正确的名称和所需的参数
- 参数验证会为缺失的字段抛出正确的错误
- (使用凭据)读取工具从实时Moodle实例返回数据
🤝 贡献
欢迎投稿!请随时提交拉取请求。
