Skip to main content
Glama
README.md
# Moodle MCP Server

An MCP (Model Context Protocol) server that enables LLMs to interact with the Moodle platform to manage courses, students, assignments, and quizzes.

## Features

### Course Management Tools
- `get_courses` - Retrieves information about courses in Moodle
  - Supports pagination (`page`, `limit`) to safely fetch all available courses.
  - Optionally allows fetching a specific course by providing a `courseId`.

### Student Management Tools
- `list_students` - Retrieves the list of students enrolled in the course
  - Displays ID, name, email, and last access time for each student

### Assignment Management Tools
- `get_assignments` - Retrieves all available assignments in the course
  - Includes information such as ID, name, description, due date, and maximum grade
- `get_student_submissions` - Examines a student's submissions for a specific assignment
  - Requires the assignment ID and optionally the student ID
- `provide_assignment_feedback` - Provides grades and comments for a student's submission
  - Requires student ID, assignment ID, grade, and feedback comment

### Quiz Management Tools
- `get_quizzes` - Retrieves all available quizzes in the course
  - Includes information such as ID, name, description, opening/closing dates, and maximum grade
- `get_quiz_attempts` - Examines a student's attempts on a specific quiz
  - Requires the quiz ID and optionally the student ID
- `provide_quiz_feedback` - Provides comments for a quiz attempt
  - Requires the attempt ID and feedback comment

## Requirements

- Node.js (v14 or higher)
- Moodle API token with appropriate permissions
- Moodle course ID

## Installation

1. Clone this repository:
```bash
git clone https://github.com/your-username/moodle-mcp-server.git
cd moodle-mcp-server
```

2. Install dependencies:
```bash
npm install
```

3. Create a `.env` file with the following configuration:
```
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
```

4. Build the server:
```bash
npm run build
```

## Usage with Claude

To use with Claude Desktop, add the server configuration:

On MacOS: `~/Library/Application Support/Claude/claude_desktop_config.json`  
On Windows: `%APPDATA%/Claude/claude_desktop_config.json`

```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": []
    }
  }
}
```

For Windows users, the paths would use backslashes:

```json
{
  "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": []
    }
  }
}
```

Once configured, Claude will be able to interact with your Moodle course to:
- View the list of students and their submissions
- Provide comments and grades for assignments
- Examine quiz attempts and offer feedback

## Development

For development with auto-rebuild:
```bash
npm run watch
```

### Debugging

MCP servers communicate through stdio, which can make debugging challenging. We recommend using the [MCP Inspector](https://github.com/modelcontextprotocol/inspector):

```bash
npm run inspector
```

The Inspector will provide a URL to access debugging tools in your browser.

## Obtaining a Moodle API Token

1. Log in to your Moodle site as an administrator
2. Go to Site Administration > Plugins > Web Services > Manage tokens
3. Create a new token with the necessary permissions to manage courses
4. Copy the generated token and add it to your `.env` file

## Security

- Never share your `.env` file or Moodle API token
- Ensure the MCP server only has access to the courses it needs to manage
- Use a token with the minimum necessary permissions

## License

[MIT](LICENSE)

TDQS

B3.3/5.0

Scored across 7 tools

Disambiguation4/5

The tools are mostly distinct with clear purposes: get_assignments, get_quizzes, get_students, get_submissions, and get_submission_content target different resources, while get_quiz_grade and provide_feedback focus on specific actions. However, get_submissions and get_submission_content could be slightly confusing as they both relate to submissions, though their descriptions clarify the difference between listing submissions and getting detailed content.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, starting with 'get_' for retrieval operations and 'provide_' for the feedback action. This uniformity makes the tool set predictable and easy to understand, with no deviations in naming conventions.

Tool Count4/5

With 7 tools, the count is reasonable for a Moodle server focused on course management. It covers key areas like assignments, quizzes, students, and submissions, though it might be slightly thin for broader educational workflows, such as missing tools for creating or updating resources.

Completeness3/5

The tool set provides good read-only coverage for retrieving course data (assignments, quizzes, students, submissions) and includes a feedback action. However, there are notable gaps in CRUD operations: no tools for creating, updating, or deleting resources (e.g., assignments or quizzes), which limits agent functionality for full lifecycle management in the Moodle domain.

Maintenance

ActivityInactive
ResponsivenessNo issues