Moodle课程管理服务器

一个MCP(模型上下文协议)服务器,使LLM能够与Moodle平台交互以管理课程、学生、作业和测验。

  • by maldalur
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 maldalur/moodle-mcp-server

使用说明

Moodle MCP服务器

MCP(模型上下文协议)服务器,使LLM能够与Moodle平台交互,以管理课程、学生、作业和测验。

特性

课程管理

  • search_courses -按名称搜索课程
    • 参数:
      • courseName (必填):要搜索的课程名称或部分名称
    • 返回:具有ID、全名、简称、类别ID、可见性状态和开始/结束日期的匹配课程列表
    • 对全名和短名称执行不区分大小写的搜索
    • 可用于查找其他操作所需的课程ID

学生管理

  • get_students -检索已注册课程的学生列表
    • 返回:学生ID、全名、电子邮件和上次访问时间戳
    • 无需参数(使用配置的MOODLE_CURSE_ID)

分配管理

  • get_assignments -检索课程中所有可用的作业

    • 返回:作业ID、名称、描述、截止日期、截止日期和最高成绩
    • 无需参数(使用配置的MOODLE_CURSE_ID)
  • get_submissions -检索作业提交

    • 参数:
      • assignmentId (可选):要筛选的特定分配ID
      • studentId (可选):要筛选的特定学生ID
    • 返回:提交状态、提交时间和评分信息
    • 如果没有提供参数,则返回课程的所有提交内容
  • get_submission_content -检索特定提交的详细内容

    • 参数:
      • studentId (必填):学生证
      • assignmentId (必填):任务ID
    • 返回:提交文本、文件附件和元数据
  • provide_feedback -为提交内容提供评分和反馈

    • 参数:
      • studentId (必填):学生证
      • assignmentId (必填):任务ID
      • feedback (必填):反馈文本
      • grade (可选):要分配的数字等级
    • 将反馈和评分存储在Moodle中

VPL(虚拟编程实验室)支持

  • get_vpl_assignments -检索课程中的所有VPL作业

    • 返回:VPL ID、名称、描述、到期日期和配置
    • 专门针对VPL活动(模块名称:“VPL”)
  • get_vpl_submission -使用代码文件检索学生的VPL提交

    • 参数:
      • studentId (必填):学生证
      • vplId (必填):VPL分配ID
    • 返回:提交详细信息、提交的包含内容的文件和评分信息
    • 可用于代码审查和自动分析

测验管理

  • get_quizzes -检索课程中所有可用的测验

    • 返回:测验ID、名称、描述、打开/关闭时间、时限和最高成绩
    • 无需参数(使用配置的MOODLE_CURSE_ID)
  • get_quiz_grade -检索特定测验的学生成绩

    • 参数:
      • studentId (必填):学生证
      • quizId (必填):测验ID
    • 返回:数字成绩、最高成绩、百分比和评分状态

需求

  • Node.js(v14或更高版本)
  • 具有适当权限的Moodle API令牌
  • Moodle课程ID

安装

  1. 克隆此存储库:
git clone https://github.com/your-username/moodle-mcp-server.git
cd moodle-mcp-server
  1. 安装依赖项:
npm install
  1. 创建一个 .env 具有以下配置的文件:
MOODLE_API_URL=https://your-moodle.com/webservice/rest/server.php
MOODLE_API_TOKEN=your_api_token
MOODLE_COURSE_ID=1  # Replace with your course ID
  1. 构建服务器:
npm run build

用法示例

搜索课程

// Search for courses by name
const courses = await search_courses({ courseName: "Programming" });
// Returns all courses that contain "Programming" in their full name or short name

// Example response:
{
  "searchTerm": "Programming",
  "totalFound": 2,
  "courses": [
    {
      "id": 130,
      "fullname": "Programming 1 - Java",
      "shortname": "PROG1",
      "categoryid": 5,
      "visible": 1,
      "startdate": 1693526400,
      "enddate": 1704067200
    }
  ]
}

获取学生信息

// Get all students in the course
const students = await get_students();

处理作业

// Get all assignments
const assignments = await get_assignments();

// Get all submissions for a specific assignment
const submissions = await get_submissions({ assignmentId: 123 });

// Get detailed content of a specific submission
const content = await get_submission_content({ 
  studentId: 456, 
  assignmentId: 123 
});

// Provide feedback and grade
await provide_feedback({
  studentId: 456,
  assignmentId: 123,
  feedback: "Great work! Well structured code.",
  grade: 8.5
});

处理VPL任务

// Get all VPL assignments
const vplAssignments = await get_vpl_assignments();

// Get a student's VPL submission with code files
const vplSubmission = await get_vpl_submission({
  studentId: 456,
  vplId: 789
});
// Returns: submission details, array of files with names and content

使用Quizzes

// Get all quizzes
const quizzes = await get_quizzes();

// Get a student's grade for a specific quiz
const grade = await get_quiz_grade({
  studentId: 456,
  quizId: 321
});

与Claude一起使用

要与Claude Desktop一起使用,请添加服务器配置:

在MacOS上: ~/Library/Application Support/Claude/claude_desktop_config.json
在Windows上: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "moodle-mcp-server": {
      "command": "/path/to/node",
      "args": [
        "/path/to/moodle-mcp-server/build/index.js"
      ],
      "env": {
        "MOODLE_API_URL": "https://your-moodle.com/webservice/rest/server.php",
        "MOODLE_API_TOKEN": "your_moodle_api_token",
        "MOODLE_COURSE_ID": "your_course_id"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

对于Windows用户,路径将使用反斜杠:

{
  "mcpServers": {
    "moodle-mcp-server": {
      "command": "C:\\path\\to\\node.exe",
      "args": [
        "C:\\path\\to\\moodle-mcp-server\\build\\index.js"
      ],
      "env": {
        "MOODLE_API_URL": "https://your-moodle.com/webservice/rest/server.php",
        "MOODLE_API_TOKEN": "your_moodle_api_token",
        "MOODLE_COURSE_ID": "your_course_id"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

配置后,Claude将能够与您的Moodle课程进行交互,以:

  • 查看注册学生及其信息
  • 管理作业并检索提交内容
  • 访问VPL(虚拟编程实验室)作业和提交的代码
  • 为学生作业提供成绩和反馈
  • 检索测验信息和学生成绩
  • 下载并分析提交内容,包括文件

与AI分析系统集成

此MCP服务器旨在与位于父目录中的基于Python的AI分析系统协同工作。Python系统提供:

  • 基于AI的提交分析 使用Ollama/LLM
  • 自动生成反馈 基于提交内容
  • 风险评估 学生(高/中/低风险水平)
  • URL提取和验证 从提交
  • 进度跟踪 趋势分析
  • Markdown报告生成 学生和课程

工作流程

  1. MCP服务器:提供API对Moodle数据(学生、作业、VPL、测验)的访问
  2. Python系统 (src/main.py):
    • 直接使用Moodle Web Services检索数据
    • 下载提交文件
    • 使用Olama执行AI分析
    • 生成全面的报告
  3. 整合:两个系统都可以独立或协同工作,以实现完整的课程管理

有关AI分析功能,请参阅 AI_ANALYSIS_README.md 在父目录中。

发展

对于自动重建的开发:

npm run watch

调试

MCP服务器通过stdio进行通信,这可能会使调试变得具有挑战性。我们建议使用 MCP检查员:

npm run inspector

检查器将提供一个URL,用于访问浏览器中的调试工具。

获取Moodle API代币

  1. 以管理员身份登录您的Moodle网站
  2. 转到“网站管理”>“插件”>“Web服务”>“管理令牌”
  3. 创建具有管理课程所需权限的新令牌
  4. 复制生成的令牌并将其添加到您的 .env 文件

安全

  • 永远不要分享你的 .env 文件或Moodle API令牌
  • 确保MCP服务器只能访问它需要管理的课程
  • 使用具有最低必要权限的令牌

许可证

麻省理工学院