Skip to content

Releases: falkenslab/moodle-mcp

v0.5.0

Choose a tag to compare

@fvarrui fvarrui released this 21 Oct 21:47

New

  • Classrooms (ADR-025, #51). MOODLE_MCP_COURSES (--courses) lists course URLs, on one site or several; their sites are added. The agent works only there: a courseId must be a classroom, and any other id one the server has seen, by kind, in a classroom's output this session, so an invented or remembered id can't reach another course. Lists across courses keep only the classrooms; the browser tools, messages, notifications and add_site are off. configure takes courses (narrow only) and server_info gives classrooms.
  • What can't be undone asks the person (ADR-023, #50). About 30 tools (deleting, unenrolling, resetting a course, restoring over one…) ask through MCP elicitation before they run, with ten minutes to answer; declined, nothing happens. Works in Claude Code and Codex.
  • list_question_types (#49): the question types the site has enabled, as the bank's chooser shows them, plugins marked (moodle-driver 0.12).
  • Firefox: MOODLE_MCP_CHANNEL=firefox, Playwright's own (moodle-driver 0.11).
  • scripts/tool-tokens.mjs: the tools of each row of the limits page and, with an API key, their tokens.

Changed — what a client may notice

  • In an app without MCP elicitation, the irreversible tools are refused, with how to allow them: if the app already asks the person before every tool, start the server with MOODLE_MCP_CONFIRM=client.

Documentation

  • The site in Falken's Lab's look; setup for agents built on agent-kit; every setting in short, each value explained; only the latest release and Next kept (ADR-024).
  • Four new use cases with real sessions: a lesson from your notes, the class glossary, an end-of-unit survey, which quiz questions to fix by their statistics (#46).

With moodle-driver 0.12.0.

v0.4.1

Choose a tag to compare

@fvarrui fvarrui released this 19 Oct 18:02

Fixed

  • Installing through agent-kit works again (#48). 0.4.0 listed gift-pegjs and parse5 in dependencies, although esbuild already bundles them. agent-kit refused the package, and npx downloaded both for nothing. They are now devDependencies, like the rest of the bundled code. dependencies keeps only playwright-core, which is external and listed in bundleDependencies. A test now fails when a dependency is neither external nor shipped.

New tools

  • read_backup reads a Moodle backup file (.mbz) on this computer, without Moodle and without restoring it. It reports:
    • its sections, activities and plugins;
    • whether it holds people's data;
    • what each activity refers to that the backup doesn't hold;
    • what still names a person, the site or the course.
  • anonymize_backup writes a copy of a backup that names no one and no site. Both tools are for teachers, and both stay available under read-only access.

v0.4.0

Choose a tag to compare

@fvarrui fvarrui released this 18 Oct 18:20

New tools

About 120 more tools, from moodle-driver 0.10: 233 by default, 263 with the advanced ones.

  • Building courses: book chapters, lesson pages and their jumps, wikis, glossaries, database activities (fields, templates, presets and entries), feedback questions and templates, rubrics and marking guides (set_rubric), and badges.
  • Question banks: create_question and update_question take every question type, and banks gain categories and export.
  • Running courses:
    • workshops from submission to grades, including allocation, examples, calculation and overrides;
    • choice and survey results, and quiz statistics;
    • course completion criteria and status;
    • grades imported from CSV, scales and grade letters;
    • groups created automatically or from CSV.
  • Checks before sending content to Moodle: validate_gift and validate_html.
  • Advanced tools (ADR-022): course blocks, the content bank, BigBlueButton, notes about participants, competencies and external tools (LTI). These 30 tools exist only with MOODLE_MCP_ADVANCED=true (--advanced).

Changed

  • Moodle 4.5 is supported alongside 5.x, with the Boost and Classic themes. A function a site's Moodle lacks is refused with a clear message: the activities overview, for example, needs 5.0. On Moodle 4.x a course's question bank id is the course id.
  • update_activity replaces a SCORM's package (package).
  • create_activity takes toolId for LTI activities.
  • A setting whose whole value is an unexpanded ${…} placeholder now counts as not set: Codex runs plugins without their settings and passes these as they are. server_info lists those settings under unexpanded.
  • The error for a missing site, and the server's instructions, now point to add_site.
  • Exports of what participants wrote (glossaries, database entries) and grade imports need student data in clear, as export_grades does.

Internal

  • moodle-driver 0.10.0, zod 4.6.7, eslint 10.13 and typescript-eslint 8.71.2.
  • Every new area was checked against the sandbox, and Moodle 4.5 against its 4.5 site.
  • The documentation adds the new tools to the tools reference in English and Spanish, and the 0.4.0 docs are kept as a version.

v0.3.0

Choose a tag to compare

@fvarrui fvarrui released this 14 Oct 16:51

New tools

  • Several Moodle sites in one server (ADR-021). MOODLE_MCP_SITES (or --sites) takes the sites as JSON or as a list of URLs and name=url pairs. The agent works on one site at a time:
    • list_sites, use_site and remove_site;
    • add_site, which asks the person for the site through MCP elicitation when the app supports it.
  • Each site keeps its own browser profile and login, in CLAUDE_PLUGIN_DATA or ~/.moodle-mcp. MOODLE_URL still works, as the first site, so 0.2.0 setups need no change.
  • copy_between_sites copies activities, sections or a whole course from one site to another.
    • It uses Moodle's own backup (anonymous, without people's data) and restore, so the content never passes through the model.
    • It reports the sections and activities it created and Moodle's warnings, deletes the backup file, and switches back to the site that was active.

Changed tools

  • backup_course takes sections, activities and anonymous. A partial backup is made without people's data.
  • restore_course takes sectionId or afterSectionId to place what it restores. Its output adds sectionIds, activityIds and warnings.
  • Eight more tools take limit and offset and return more: list_conversations, get_conversation, list_discussions, get_discussion, get_submissions, list_participants, get_quiz_results and list_questions. A client that read whole lists must now ask for further pages.
  • Read-only access (MOODLE_MCP_ACCESS=read) now keeps download_file and export_grades.

Fixes

  • MOODLE_URL can be any page of a site, such as a course's address. Before, only the site's base address worked.
  • Quizzes with a time limit can be started (moodle-driver#56).

Internal

  • moodle-driver 0.8.0.
  • The screenshot scripts are in the repository (scripts/screenshots/).
  • The documentation adds a several-sites page and a copy-between-sites use case, and keeps the 0.3.0 docs as a version.

v0.2.0

Choose a tag to compare

@fvarrui fvarrui released this 12 Oct 22:03

Long lists a page at a time, and reading submissions without a trace, with moodle-driver 0.7.

Changed tools (what a client must change)

  • list_notifications gives a page at a time: limit (30 by default, up to 100) and offset, unread ones included with unreadOnly, and more says whether there are others. It used to return every notification. (#12, #13)
  • get_course_logs gives a page at a time too: limit is 50 by default (it was 100) and at most 500, with offset and more. Each entry's description (Moodle's sentence about it) now comes only with includeDescriptions: true. (#12)

Fixes

  • get_submissions no longer creates empty submissions just by reading (moodle-driver#54): two reads in a row leave every status as it was. Moodle still logs it as the teacher viewing the grading pages, as with its own grader. Its description now names every status, new and reopened included. (#9, #10)
  • list_courses and get_course_structure say that progress and completion come only for students, in courses and activities that track them, and point teachers to get_completion_report. (#14)

Internal

v0.1.0

Choose a tag to compare

@fvarrui fvarrui released this 12 Oct 19:12

The first release of moodle-mcp: an MCP server that lets an AI agent work in Moodle as you, through your own browser session.

claude mcp add moodle -e MOODLE_URL=https://campus.example.org -- npx -y @falkenslab/moodle-mcp

What's in it

  • 137 tools over Moodle, from moodle-driver 0.6: courses and content, the course life cycle (copy, back up, restore, import, reset), assignments and grading (rubrics, marking workflow, extensions), quizzes and question banks, the gradebook, participants, groups and enrolments, reports and logs, forums, workshops, messages, the calendar, and activities as a student (quizzes, assignments, surveys, choices, lessons, H5P, SCORM).
  • You log in yourself, in a browser window it opens; it never sees your password.
  • Students reach the AI as aliases by default (MOODLE_MCP_STUDENT_DATA=pseudonymize), with a net that pseudonymizes every tool's output and errors; block keeps students' data away altogether, clear shows names for a model on your machine.
  • Limits only you can loosen: a role (MOODLE_MCP_ROLE=teacher|student), read-only access (MOODLE_MCP_ACCESS=read) and scopes. A student's tools take about 12,500 tokens instead of 34,500.
  • Browser fallback tools for what no tool covers (a plugin, a SCORM package's content), kept off pages about people under pseudonymize.

Tested against Moodle 5.x. See the README for setup with Claude Code and Claude Desktop.