moodle-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MOODLE_URL | No | Your school's Moodle base URL (e.g. https://moodle.yourschool.edu). Defaults to moodle.trincoll.edu. Can be used in place of `moodle auth --url`. | https://moodle.trincoll.edu |
| MOODLE_TOKEN | No | Your Moodle personal token from the Moodle mobile web service. Can be used in place of running `moodle auth`, which otherwise saves the token to ~/.config/moodle-mcp/config.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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| moodle_whoamiA | Check the connection: site name, Moodle version, and the logged-in user. |
| moodle_coursesA | List enrolled courses with their ids. which: inprogress (default) | future | past | all. |
| moodle_course_contentsB | Every section of a course with its activities/resources (cmid, type, name, dates, files, links) and the section text (where teachers often put weekly readings and 'for next class' notes). |
| moodle_searchB | Find activities, files and section text mentioning |
| moodle_deadlinesA | Unfinished assignment/quiz deadlines from the Moodle timeline. days_back > 0 also returns overdue items. Dates here can lag edits teachers make; confirm critical ones with moodle_assignment. |
| moodle_assignmentsB | All assignments in current courses (or the given ones), sorted by due date, with submission status (new/draft/submitted/nosubmission) and grade when include_status is true. |
| moodle_assignmentA | One assignment in full: instructions, attachment files, dates, time remaining, accepted submission types, what's already submitted, grade and feedback. Pass assign_id or cmid. |
| moodle_gradesA | Grade items for one course (grade, max, %, weight, feedback). Without course_id: course totals for all courses. |
| moodle_readA | Open any activity/resource by cmid and return its readable content: page text, file list for resources/folders, link target for URLs, assignment detail, forum discussions, quiz dates/attempts. |
| moodle_file_textA | Text of a Moodle file (PDF, DOCX, PPTX, XLSX strings, HTML, plain text) from a |
| moodle_downloadB | Save a Moodle file to disk (default ~/Downloads/Moodle) and return the local path. |
| moodle_announcementsB | Latest posts in each course's Announcements forum, newest first. |
| moodle_discussionA | All posts in one forum discussion (ids come from moodle_announcements / moodle_read on a forum). |
| moodle_notificationsC | The bell-icon notifications: new grades, feedback, forum posts, due-date reminders. |
| moodle_submit_assignmentA | Save the user's submission for an assignment: online text (HTML) and/or local files. This REPLACES the current submission's text/files. Leaves it as a draft unless submit_for_grading=true, which finalises it (and accepts the submission statement). Only call after the user has approved the exact content. |
| moodle_functionsA | Names of the Moodle web-service functions this token can call (filter with |
| moodle_callA | Escape hatch: call any Moodle web-service function the token allows, e.g. wsfunction='mod_quiz_get_quizzes_by_courses', params={'courseids': [123]}. Nested params are fine. Treat any function that writes (save/submit/update/delete/send) like a submission: confirm first. |
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 17 tools
Most tools target distinct resources, but moodle_read is a broad catch-all that overlaps with moodle_assignment, moodle_course_contents, moodle_discussion, and moodle_file_text. The three deadline/assignment tools (moodle_assignment, moodle_assignments, moodle_deadlines) also share territory, though descriptions mostly disambiguate them.
All tools share a clean moodle_ prefix and snake_case, which makes them easy to scan. There is a minor mix of noun phrases (moodle_courses, moodle_grades) and verbs (moodle_read, moodle_search, moodle_submit_assignment), but the pattern stays predictable.
17 tools is slightly heavy but justified for an LMS surface spanning courses, assignments, grades, files, forums, and notifications. Each tool covers a meaningful slice of the domain rather than redundant trivia.
Read/lifecycle coverage is strong (courses, contents, assignments, grades, files, forums, announcements, notifications) plus submission. Write operations beyond submit are thin, but moodle_functions and moodle_call provide an escape hatch for any missing web-service function.