Moodle MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MOODLE_URL | Yes | Moodle site address (wwwroot), e.g. https://moodle.example.org | |
| MOODLE_DEBUG | No | 1/true/yes/on enables debug output to stderr and debug level in the host log channel | false |
| MOODLE_TOKEN | No | Web service token override (CI / smoke tests) | |
| MOODLE_CHROME | No | Chrome/Chromium binary for moodle-mcp-login (looked up in PATH by default) | |
| MOODLE_TIMEOUT | No | Timeout of a single API request (ms) | 30000 |
| MOODLE_TOKEN_FILE | No | Where moodle-mcp-login saves the token (path is resolved via homedir()) | ~/.config/mcp-moodle/token.json |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| moodle_site_infoA | Who I am on the Moodle site and what the site is: user name and id, site name and Moodle version, version of this MCP server. missingFunctions lists API functions the token does not grant (tools that need them will fail). Start here if it is unclear whether the connection works. |
| moodle_list_coursesA | My courses on the Moodle site (where I am enrolled, including as a teacher): id, short and full name, dates, visibility. The course id is needed for moodle_list_assignments. |
| moodle_list_assignmentsA | Assignments of a course (Assignment activity, mod_assign): assignment id (needed by the other tools), cmid (the number from the mod/assign/view.php?id=… URL), name, allow submissions from / due / cut-off dates, grading (points with maximum or scale, grade to pass), submission types and assignment description. |
| moodle_list_submissionsA | Assignment participants and their submission state: status (new: not submitted, draft: draft, submitted: submitted, reopened: new attempt opened), submission time, whether it needs grading, current grade. The status filter narrows the list; counts summarizes all participants. moodle_get_submission returns one participant's full submission. |
| moodle_get_submissionA | Full submission of one participant: status and attempt number, time, online text (as plain text), attached files (name, size, url for moodle_download_file), current grade and teacher feedback. |
| moodle_download_fileA | Downloads a submission file (or an assignment attachment) to the local disk and returns its path. fileUrl is the url field from moodle_get_submission or moodle_list_assignments. An existing file is not overwritten: " (1)" is appended to the name. |
| moodle_save_gradeA | Saves a participant's grade for an assignment and writes feedback comments. THE STUDENT WILL SEE the grade and feedback (immediately, or after release if marking workflow is enabled) and may receive a notification. Call only after the teacher has explicitly confirmed the grade and the text. The grade is checked against the assignment maximum. If feedback is omitted, the existing feedback is kept unchanged. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
Each tool has a distinct purpose: site info, listing courses/assignments/submissions, retrieving one submission, downloading files, and saving grades. moodle_list_submissions vs moodle_get_submission is clearly separated as summary list vs full single participant. No overlapping or ambiguous tool roles.
All tools share the moodle_ prefix and snake_case, but moodle_site_info breaks the verb_noun pattern by using a noun phrase rather than an action. The rest follow list_/get_/download_/save_ consistently. Minor deviation only.
Seven tools is well within the ideal range and matches the focused scope of an assignment-grading MCP server. Each tool covers a necessary step and no tool feels redundant.
The surface covers the main teacher workflow: identify site/user, list courses, list assignments, inspect submissions, download files, and save grades/feedback. Minor gaps exist around broader Moodle operations (e.g., course content beyond assignments, bulk grade operations), but the core lifecycle is complete.