Moodle多课程管理服务器

一个增强的Moodle MCP服务器,支持多课程管理,使AI助手能够与Moodle LMS交互。

  • by ernesto-butto
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 ernesto-butto/moodle-mcp-server

使用说明

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代币

  1. 以管理员身份登录Moodle
  2. 首选 站点管理→ 服务器→ Web服务→ 外部服务
  3. 确保 “Moodle移动网络服务” 已启用(包括所有必需的API函数)
  4. 首选 站点管理→ 服务器→ Web服务→ 管理代币
  5. 点击 创建令牌,选择教师的用户帐户和 “Moodle移动网络服务”
  6. 复制令牌

💡 就这样 在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_courses
  • core_course_get_contents
  • core_enrol_get_enrolled_users
  • mod_assign_get_assignments
  • mod_assign_get_submissions
  • mod_assign_get_grades
  • mod_assign_get_submission_status
  • mod_assign_save_grade
  • mod_quiz_get_quizzes_by_courses
  • mod_quiz_get_user_best_grade
  • mod_forum_get_forums_by_courses
  • mod_forum_get_forum_discussions
  • mod_forum_add_discussion
  • mod_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

集成测试检查:

  1. 所有工具都注册了正确的名称和所需的参数
  2. 参数验证会为缺失的字段抛出正确的错误
  3. (使用凭据)读取工具从实时Moodle实例返回数据

🤝 贡献

欢迎投稿!请随时提交拉取请求。

📄 许可证

麻省理工学院 -基于工作 peancor

🙏 致谢