New Your team’s decisions, in one playbook every coding agent works from. Never answer your agent twice

Moodle

233 tools. 151 can modify or destroy data without limits.

24 destructive tools with no built-in limits. Policy required.

Last updated:

151 can modify or destroy data
82 read-only
233 tools total

Community server · catalogue entry checked 18/10/2026 · full schemas captured for 229 of 233 tools

How to control Moodle ↓

What Moodle exposes to your agents

Read (82) Write / Execute (127) Destructive / Financial (24)

What Moodle costs in tokens

56,457 tokens of tool definitions, loaded on every request
28% of a 200k context window
1,676 heaviest tool: create_question
Critical Risk

The most dangerous Moodle tools

151 of Moodle's 233 tools can modify, destroy, or commit something on every call — and an agent calls them with no built-in limits.

How to control Moodle

PolicyLayer is an MCP gateway — it sits between your AI agents and Moodle, and nothing reaches the server without passing your rules. These are the rules we recommend:

Deny destructive operations
{
  "delete_activity": {
    "deny_if": [
      {
        "conditions": [],
        "on_deny": "Blocked by default. Requires approval."
      }
    ]
  }
}

Destructive tools should never be available to autonomous agents without human approval.

Rate limit write operations
{
  "add_book_chapter": {
    "limits": [
      {
        "counter": "add_book_chapter_per_hour",
        "window": "hour",
        "max": 30,
        "scope": "grant"
      }
    ]
  }
}

Prevents bulk unintended modifications from agents caught in loops.

Cap read operations
{
  "answer_lesson_page": {
    "limits": [
      {
        "counter": "answer_lesson_page_per_minute",
        "window": "minute",
        "max": 60,
        "scope": "grant"
      }
    ]
  }
}

Controls API costs and prevents retry loops from exhausting upstream rate limits.

  1. Create a free account and register Moodle — nothing to install.
  2. Add these rules — paste them, or build them visually. Tune the limits to your setup.
  3. Point your MCP client (Claude, Cursor, anything) at your gateway URL.
ENFORCE POLICY ON MOODLE →

Instant setup, no code required.

All 233 Moodle tools

DESTRUCTIVE 24 tools
Destructive delete_activity Delete an activity from a course, with its participants' data (submissions, attempts, posts, grades). Destruct Destructive delete_book_chapter Delete a chapter with its files; deleting a chapter (not a subchapter) deletes its subchapters too. Returns th Destructive delete_database_entry Delete a database entry with its values and files. A student deletes their own while Moodle lets them change i Destructive delete_database_field Delete a database field: what every entry has in it goes too, and its tags leave the templates. Returns the fi Destructive delete_event Delete a calendar event the person can manage (a course event, or their own), by its id from list_events or cr Destructive delete_feedback_item Delete a feedback item; the answers people gave to it go with it. Returns the items left. Can't be undone: con Destructive delete_feedback_template Delete a feedback template (a public one takes a manager's rights). Can't be undone: confirm with the person f Destructive delete_glossary_entry Delete a glossary entry with its files. A student deletes their own while the site's editing time lasts; a tea Destructive delete_grade_category Delete a grade category: Moodle moves what it held into its parent and deletes its total's grades; the course' Destructive delete_grade_item Delete a manual grade item and every grade in it. An activity's item goes with its activity, so it's refused. Destructive delete_group Delete a group; its members stay in the course. Activities set to work by groups lose it. Can't be undone: con Destructive delete_grouping Delete a grouping; its groups stay. Can't be undone: confirm with the person first. Destructive delete_lesson_page Delete a lesson's page. Answers of other pages that jumped to it are left as Moodle leaves them: check them wi Destructive delete_post Delete a forum post and its replies through Moodle's own confirmation; a discussion's first post takes the who Destructive delete_question_category Delete a question bank's category: its subcategories move up to its parent; one with questions needs moveTo, t Destructive delete_questions Delete questions from a bank, every version of each, as the bank's delete action does. Moodle doesn't delete a Destructive delete_section Delete a section and every activity in it, with their participants' data. Destructive: confirm with the person Destructive delete_workshop_example Delete an example submission with its assessments (the reference one and participants' practice ones). Can't b Destructive override_workshop_grade Override a grade Moodle calculated in a workshop: a submission's grade, or an assessment's grade for assessing Destructive remove_quiz_slot Remove a slot from a quiz, as the edit page's delete icon does; the question stays in its bank. A quiz with at Destructive remove_site Forget a site added at run time, by name, and delete its browser profile with its session. Not the active site Destructive remove_workshop_reviewer Remove a reviewer's allocation to a submission: Moodle deletes their assessment of it. An assessment already g Destructive reset_course Reset a course as Moodle's reset form does: delete only what's named in delete (submissions, attempts, posts, Destructive unenrol_user Unenrol someone from a course: removes every enrolment of theirs the person may remove, with their roles and g
WRITE 121 tools
Write add_book_chapter Add a chapter to a book through Moodle's chapter form: its title and content (HTML, with local images embedded Write add_database_entry Add an entry to a database activity as the person, through its "Add entry" form: a value per field, by id or n Write add_database_field Add a field to a database activity through Moodle's form for its type: text, textarea, number, date, menu, rad Write add_feedback_item Add an item to a feedback activity, after item after (0: first; last without it): a question of any type with Write add_glossary_category Add a category to a glossary; with autoLink, Moodle links its name wherever it appears in the course. Returns Write add_glossary_entry Add an entry to a glossary as the person: its concept, definition (HTML, with local images embedded), aliases, Write add_grade_category Add a grade category to a course's gradebook, at the top level or inside another, with its aggregation. Return Write add_grade_item Add a grade item graded in the gradebook (not by an activity): out of maxGrade (Moodle's default 100) or on a Write add_lesson_page Add a page to a lesson through Moodle's lesson editor: a content page with its buttons, a question page (multi Write add_question_category Add a category to a question bank, at the top level or inside parentId, with an optional description (HTML). R Write add_questions_to_quiz Add questions to a quiz: bank questions by id (from list_questions) and/or random questions from a bank catego Write add_quiz_section Add a section heading to a quiz, starting at a slot (the first of its page: see set_quiz_pages), optionally sh Write add_scale Add a scale to a course: its name and values from the lowest to the highest (no commas in them), and a descrip Write add_section Add a section to a course, at the end or after a given section, optionally named and described. Returns its id Write add_site Add a Moodle site to this server, kept for later sessions: its URL (any page of it works) and, optionally, a s Write add_workshop_example Add an example submission to a workshop, for participants to practise assessing: title, text (HTML, with local Write allocate_marker Allocate a marker (someone who can grade; several where the assignment uses several per submission) to partici Write allocate_workshop_randomly Allocate submissions to reviewers at random, as the workshop's random allocation does: perSubmission reviews f Write allocate_workshop_reviewer Allocate a reviewer to a submission, as the manual allocation page's "Add reviewer" does, in any phase. The su Write answer_choice Answer a choice activity as the person, with one option (several where the choice allows them) by id from get_ Write answer_quiz_questions Save answers in an attempt in progress, as the attempt's pages do; it doesn't finish the attempt. Each answer Write apply_database_preset Give a database activity a preset, as Moodle's "Use this preset" does: its fields are added, a field with the Write assess_workshop_example Assess an example submission through the workshop's assessment form, as assess_workshop_submission does a subm Write auto_create_groups Split a course's participants into groups at once, as Moodle's "Auto-create groups" does: count groups, or gro Write award_badge Award a badge by hand to a participant (an alias when the server pseudonymizes), as one of the roles its manua Write backup_course Back a course up to a .mbz file in a local folder, through Moodle's backup wizard: its content, and with withU Write browser_click Click an element of the browser tools' tab by its snapshot ref (a link, button, checkbox, tab…), and wait for Write browser_select Choose options in a select of the browser tools' tab by its snapshot ref, by their values or visible labels (s Write browser_type Fill a text field of the browser tools' tab by its snapshot ref, replacing what it holds; optionally press Ent Write browser_upload Set local files on a file input of the browser tools' tab by its snapshot ref (in Moodle's file picker, the "U Write calculate_workshop_grades Calculate a workshop's grades in the evaluation phase, as "Re-calculate grades" does: each submission's grade Write configure Set this server's configuration for this session: the Moodle site (url; a new one is added to the server's sit Write copy_between_sites Copy a course's content from one of this server's sites to another (list_sites): some activities (activityIds) Write copy_course Copy a course into a new one, as Moodle's "Copy course" does: its content (and, with withUsers, its people's e Write create_activity Create an activity or resource of any type (page, label, url, resource, folder, assign, quiz, forum…) at the e Write create_badge Create a course badge, disabled and without criteria, through Moodle's new badge form: its name, description ( Write create_discussion Start a discussion in a Moodle forum, with optional attachments and embedded images (local files); a teacher c Write create_event Create an event in a course's calendar, which its participants see: a name, a start (ISO 8601 with its time zo Write create_group Create a group in a course with Moodle's group form. Add its members with set_group_members. Returns its id. C Write create_grouping Create a grouping in a course with Moodle's form; give it its groups with set_grouping_groups. Returns its id. Write create_question Create one question in a question bank through its type's form, of any type: multichoice, truefalse, shortansw Write create_wiki_page Create a page in a wiki's subwiki as the person, with its content (HTML in an HTML wiki, Moodle's default, or Write duplicate_activity Duplicate an activity right after itself, with its settings and content (not participants' data). Returns the Write edit_activity Move an activity to another section (at its end) or before another activity, to reorder a course; rename it; o Write edit_book_chapter Change a chapter's title, content (HTML, with local images embedded) or whether it is a subchapter, through it Write edit_database_entry Change a database entry through its edit form: the fields given (files too), the rest as they are; removeFiles Write edit_database_field Change a database field's name, description, whether it's required, or its type's settings (one by one): what Write edit_feedback_item Change a feedback item with what is given: question, label, required, a choice's options (given, they replace Write edit_glossary_entry Change a glossary entry: only what is given (attachments replaces its files, [] removes them). A student chang Write edit_lesson_page Change a lesson's page through its form in the lesson editor: title, contents, buttons or answers (given, they Write edit_post Change a forum post through Moodle's own form, as its author (within the site's editing time) or a moderator: Write edit_question_category Change a question bank's category: its name, description (HTML) or parent (moving it with its subcategories an Write edit_quiz_slot Change one slot of a quiz: its maximum mark, and where it is (after another slot, 0 for first, and on a page), Write edit_scale Change a course's scale: its name, values or description. A scale something grades with keeps its values. Retu Write edit_section Change a section: rename it, describe it, show or hide it (with its activities), restrict access to it, or mov Write edit_wiki_page Change a wiki page's content, the whole page or one section (a heading, as get_wiki_page's sections lists them Write edit_workshop_example Change an example submission: only what is given (attachments replace those there). Changes the course: confir Write export_database_entries Save a database activity's entries to a local CSV file, as its "Export entries" does: a column per field (imag Write export_glossary Save a glossary's approved entries into a local folder as Moodle's XML (with aliases, categories and files), a Write export_grades Save a course's grades into a local folder as Moodle exports them for a teacher: a spreadsheet (xlsx, ods), CS Write export_questions Save a bank's questions, or a category's with its subcategories, to a local GIFT or Moodle XML file: each ques Write grade_quiz_question Grade one question of a finished attempt by hand, with a comment, as the review's "Make comment or override ma Write grade_submission Grade a participant in an assignment, as Moodle's grader does: a grade (simple grading), a rubric's levels or Write grant_extension Grant participants an extension of an assignment's due date until a date, as the assignment's extension form d Write import_activities Import activities from another course into a course, as Moodle's "Import" does: all of them, or only activityI Write import_database_entries Add entries to a database activity from a local CSV file, as its "Import entries" does: a header row with the Write import_glossary Import the entries of a glossary's XML file (as export_glossary saves it) into this glossary, as the person's Write import_grades Import grades into a course's gradebook from a local CSV file, as Moodle's CSV import does: mapFrom is the col Write import_groups Create groups from a local CSV file, as Moodle's "Import groups" does: a groupname column, and optionally desc Write import_questions Import questions into a question bank from GIFT or Moodle XML, given as text or as a local file, through the b Write login Make sure there is a Moodle session. If there is one, returns the logged-in user at once. Otherwise opens a br Write logout End the person's Moodle session in the server's browser, so someone else can log in (another account: login op Write mark_course_complete Mark a participant's course completion by hand (an alias when the server pseudonymizes), as the course complet Write mark_notifications_read Mark all the person's notifications read, as the notifications popover's "Mark all as read" does. Doing it twi Write message_participants Send one private message to several participants of a course, as the participants page's "Send a message" does Write move_book_chapter Move a chapter one place up or down, as the table of contents' arrows do: a chapter moves with its subchapters Write move_feedback_item Move a feedback item to a position (from 1). Returns the items in order. Changes the course: confirm with the Write move_lesson_page Move a lesson's page after another (0: first), as the lesson editor's move link does. Jumps by page id still l Write move_questions Move questions of a bank into one of its categories, several at once; each keeps its id and versions. Changes Write open_scorm Open a SCORM activity in Moodle's player, as the person, in the browser tools' tab: the last attempt continues Write override_completion Set a participant's completion of an activity as a teacher does from the progress report (an override, shown a Write reply_to_post Reply to a post in a Moodle forum discussion, with optional attachments (local files). The subject defaults to Write restore_course Restore a .mbz backup through Moodle's restore wizard: into a new course in a category (no intoCourseId), or i Write save_feedback_template Save a feedback activity's items as a new template: the course's own, or public (every course's, a manager's) Write save_submission Save the logged-in student's submission to an assignment: its online text (HTML, replacing what was there) and Write save_workshop_submission Add the person's submission to a workshop, or change the one they have, through its submission form: title, te Write schedule_workshop_allocation Turn the workshop's scheduled allocation on or off: when on, Moodle allocates at random by itself at the end o Write send_message Send a private message to someone, as the messaging drawer does: to user (an alias) when the server pseudonymi Write set_badge_criteria Set a badge's criteria: completing activities (with completion tracking; all of them or any one), completing t Write set_badge_enabled Make a badge available to users or not. Enabling it awards it at once to everyone who already meets its criter Write set_book_chapter_visibility Show a chapter to students or hide it from them, as the table of contents' eye does: a chapter's subchapters g Write set_completion Mark the person's own completion of an activity with manual completion, done or not done, as its "Mark as done Write set_course_completion_criteria Set a course's completion criteria: a criterion given replaces that kind's settings, one in remove goes, one n Write set_database_entry_approved Approve a database entry waiting for approval, or take its approval back: one waiting shows only to its author Write set_database_template Save one of a database's templates as given, without Moodle's HTML editor in between: list (repeated per entry Write set_discussion_state Pin or unpin, lock or unlock a forum discussion, as the discussion list's menu does; what's already so is left Write set_discussion_subscription Subscribe the person to a forum discussion, or unsubscribe them, as the discussion list's toggle does: Moodle Write set_enrolment_method Change an enrolment method with its form, by its id or the course's first of a type (methodType "self": added Write set_glossary_entry_approved Approve an entry waiting for approval (list_glossary_entries with pending lists them), or take an approval bac Write set_grade Set a participant's grade in a grade item, as the gradebook's single view does: a manual item takes it; an act Write set_grade_letters Set a course's own grade letters, each from its minGrade percent, overriding the site's; useDefaults goes back Write set_group_members Add and remove members of a group, as its members page does: only the course's participants can be added. Take Write set_grouping_groups Make a grouping's groups exactly groupIds, adding and removing as its page does; groups of other courses are l Write set_question_status Set a bank question ready (quizzes can use it) or draft, as the bank's status menu does. Write set_quiz_override Give a participant their own quiz settings, as the quiz's user overrides do: open and close dates, time limit Write set_quiz_pages Set how a quiz's questions are split into pages: perPage questions a page (0 for all on one), as "Repaginate" Write set_rubric Define how an assignment is graded with a rubric (criteria, each with two levels or more: a definition and its Write set_user_roles Set a participant's roles in a course, as the participants page's roles column does: gives the roles in roleId Write set_workflow_state Set the marking workflow state of participants' submissions, as the grading table's bulk action does: "release Write set_workshop_phase Switch a workshop to a phase (setup, submission, assessment, evaluation, closed), forwards or back, as its pag Write submit_assignment Submit the saved submission for grading: it can't be changed afterwards unless the teacher reopens it. When th Write submit_survey Answer a survey and submit it, page by page as its form goes: responses maps field names (from get_survey) to Write update_activity Change an existing activity through Moodle's own form: name, description, a page's or label's content, a URL's Write update_course Change a course's full name, short name, summary (HTML) or any other setting by its field name in Moodle's cou Write update_event Change a calendar event through the calendar's own form: only what's given changes; a new start keeps its leng Write update_grade_category Change a grade category from get_gradebook_setup: its name, aggregation, weight in its parent (percent, overri Write update_grade_item Change a grade item from get_gradebook_setup: move it into a category, set its weight (percent, overriding the Write update_group Change a group's name, description, ID number or enrolment key; what isn't given stays. Confirm with the perso Write update_question Change a question of a bank through its type's form, with create_question's inputs: only what's given changes Write use_feedback_template Add a template's items to a feedback activity, after the items it has, or in their place with replace (their a Write use_site Make another known site the active one, by name (list_sites): every other tool works on it from now on. The pr
READ 82 tools
Read answer_lesson_page Go on in a lesson as the person: press a content page's button (by its label, or by its position from 1), or a Read assess_workshop_submission Assess a workshop submission as the person, through the workshop's assessment form (its grading strategy's): a Read browser_snapshot The page in the browser tools' tab as an accessibility tree (roles, names, values), with a ref per element ([r Read download_file Save a file of the Moodle site to a local folder, with the person's session: a resource's or folder's file (ge Read finish_quiz_attempt Submit an attempt for grading, as "Submit all and finish" does: no answer can change afterwards. Returns the r Read get_activities_overview Moodle's activities overview of a course, as the person sees it: per activity, its columns (due date, submissi Read get_activity_content Read a content activity as a person would, so Moodle logs the view: a page's or label's text, a book's chapter Read get_activity_report Read a course's activity report: per activity, how many times it was viewed, by how many people and when last, Read get_activity_settings Read every setting of an activity as its edit form holds them, without changing anything: its module, name, de Read get_assignment Read an assignment as the logged-in student sees it: the brief and its files, dates, the submission's status a Read get_attempt_review Read a finished attempt's review, as far as the quiz shows it: status, marks and grade, and per question wheth Read get_choice Read a choice activity (a poll) as the person sees it: its question, the options with their ids, whether it's Read get_choice_results Read a choice's responses as its report shows a teacher: each option with how many chose it and who (aliases w Read get_completion_report Read a course's progress report: every participant's completion (an alias when the server pseudonymizes) of ev Read get_conversation Read a message conversation: its members and each message's sender (aliases when the server pseudonymizes), te Read get_course_completion_criteria Read what completes a course, from its "Course completion" settings: activities, other courses, a date, days e Read get_course_completion_status Read each participant's course completion from the course completion report: whether and when they completed t Read get_course_logs Read a course's logs, newest first, as its logs report lists them: by a user (an alias when the server pseudon Read get_course_structure Get a Moodle course's sections and activities: ids, names, types, URLs, visibility, whether the person can ope Read get_course_updates What changed in a course's activities since a date (settings, content files, forum posts, submissions, attempt Read get_database_fields Read a database activity's fields in order: each one's id, name (templates name it [[name]]), type, descriptio Read get_database_templates Read a database activity's templates (list, listHeader, listFooter, single, add, search, rss, rssTitle, css, j Read get_discussion Read a Moodle forum discussion's posts, oldest first, a page at a time (limit posts, 50 by default, after skip Read get_event Read one calendar event by its id, as list_events gives them. Read get_feedback_items Read a feedback activity's items as its teacher builds them, in order: type (multichoice, multichoicerated, te Read get_forum_grades Read the whole-forum grades of a forum graded as a whole, as its grader shows them: one per person it can grad Read get_grade_letters Read a course's grade letters, from the highest boundary to the lowest: its own when overridden, the site's de Read get_gradebook_setup Read how a course's grades are computed, as the gradebook setup page shows it: its categories (aggregation, we Read get_grader_report Read everyone's grades in a course as the grader report shows them, in one group when given: its columns (grad Read get_h5p_activity Read an H5P activity: its content type (the H5P library), whether Moodle tracks attempts, and the person's own Read get_lesson_page Read the page of a lesson the person is on (starting the lesson the first time): a content page with its butto Read get_lesson_pages Read a lesson's pages as its teacher has them in Moodle's lesson editor, in order: type (content, a question t Read get_me Tell who the logged-in person is: user id, username, full name, email, language, time zone, first and last acc Read get_my_grades Get the logged-in person's grade report for a course: each grade item (with its activity id), category and the Read get_participation_report Read an activity's participation report: everyone with a role (all the roles it offers, unless roleId) and how Read get_quiz_attempt Read every question of an attempt in progress, page by page: text, images, fields with their options, and the Read get_quiz_info Read a quiz's page as the person: description, its rules (attempts allowed, grading method, time limit…), date Read get_quiz_results Read a quiz's attempts as its grades report shows them: per attempt the participant (an alias when the server Read get_quiz_statistics Read a quiz's statistics report, which tells which questions work: the quiz's figures (attempts, averages, med Read get_quiz_structure List a quiz's questions as its edit page does, in order: each slot's page, question id, type (or random), name Read get_rubric Read how an assignment is graded: simple (a grade or a scale), a rubric (criteria with their levels and scores Read get_scorm Read a SCORM activity as the person sees it: attempts allowed and made, grading method, the grade reported and Read get_site_info What the Moodle site says about itself: its name, URL, language, how people log in (its own form, guest access Read get_submissions Get the participants' submissions to a Moodle assignment, a page at a time (limit participants, 25 by default, Read get_survey Read a survey (the questionnaire plugin, or Moodle's feedback) as the person: whether they can answer it now, Read get_survey_results Read what people answered in a feedback or a questionnaire, as its reports show a teacher: every response (who Read get_wiki_page Read a wiki page: its content (HTML as Moodle renders it, its text, images and media), its sections, the pages Read get_workshop Read a workshop's phase and its report as a teacher sees it: every submission (author, title, grade once calcu Read get_workshop_allocation Read a workshop's allocation as its manual allocation page shows it (in the course's current group): each subm Read get_workshop_submission Read a workshop submission as its page shows it: title, text (HTML), attached files, author (an alias when the Read list_assignments List the assignments of a Moodle course: their ids (course module ids, for the other assignment tools), names, Read list_badges List a course's badges: name, description, image, what earns it (Moodle's summary), whether it's enabled and w Read list_book_chapters List a book's chapters in order: id, title, whether each is a subchapter or hidden, and its place; with conten Read list_conversations List the person's message conversations, latest first: private, group or with themselves, their members (alias Read list_courses List the Moodle courses the logged-in person is enrolled in (as teacher or student), with their ids, names, ca Read list_database_entries Read a database activity's entries in its list's order: author (an alias when the server pseudonymizes), when Read list_database_presets List the presets a database activity can be given: Moodle's own (image gallery, journal, proposals, resources) Read list_deadlines What the person has to do by a date, from Moodle's calendar (submit an assignment, attempt a quiz…), in one co Read list_discussions List the discussions of a Moodle forum: subject, who started it and when, the last post's author and time, the Read list_enrolment_methods List how people can enrol in a course, in the order Moodle tries them: each method's type, name, whether it's Read list_events List the upcoming events of the person's calendar, as its "Upcoming events" view does, in one course or in all Read list_feedback_templates List the templates a feedback activity can use: the course's own and the site's public ones. Read list_glossary_categories List a glossary's categories, by id and name, which add_glossary_entry and edit_glossary_entry take. Read list_glossary_entries Read a glossary's entries in its order: concept, definition (HTML), aliases, categories, author (an alias when Read list_groupings List a course's groupings (sets of groups an activity can be limited to) with their groups' ids. Needs the rig Read list_groups List the groups of a course the person can see, with their members (as aliases when the server pseudonymizes). Read list_notifications List the person's notifications, newest first (only unread ones when asked), a page at a time: limit of them ( Read list_participants List a course's participants with their roles and groups, as the participants page does: people as aliases whe Read list_pending List what the logged-in person still has to do in a course: activities whose completion is tracked and not com Read list_potential_users Find users the person may enrol in a course by manual enrolment, as the "Enrol users" dialog does: matching se Read list_question_banks List the question banks of a course: its shared banks (usable by any quiz in the course) and the activities' o Read list_question_categories List a question bank's categories as its categories page shows them, parents before their subcategories: id, n Read list_questions List a question bank's categories and the questions in them, category by category: id, name, type, status and Read list_questions_to_grade List a quiz's questions that wait for grading by hand (essays…), each with how many to grade and the finished Read list_scales List the scales a course's grades can use: its own and the site's standard ones, with their values and whether Read list_sites List the Moodle sites this server knows, by name: their URL, which one is active (every other tool works on it Read list_wiki_pages List the pages of a wiki's subwiki by title: each one's id, the pages it links to (those not created yet witho Read list_workshop_examples List a workshop's example submissions as its page shows a teacher: title, and whether its reference assessment Read server_info Show this server's version and effective configuration: the active Moodle site and the others, the browser pro Read show_browser Show the browser to the person, so they can watch what the tools do: the window opens now (the session is kept Read validate_gift Check questions in GIFT before import_questions, without Moodle: each question split at blank lines as Moodle' Read validate_html Check HTML for a page, a label, a description or a post before sending it, without Moodle, and approximately:

Related servers

Other MCP servers with similar tools — same risk classification, starter policies for each.

Questions about Moodle

Can an AI agent delete data through the Moodle MCP server? +

Yes. The Moodle server exposes 24 destructive tools including delete_activity, delete_book_chapter, delete_database_entry. These permanently remove resources with no undo. PolicyLayer blocks destructive tools by default so they never reach the upstream server.

How do I prevent bulk modifications through Moodle? +

The Moodle server has 121 write tools including add_book_chapter, add_database_entry, add_database_field. Set a rate limit in your policy -- for example, 10 calls per hour prevents an agent from making more than 10 modifications per hour. PolicyLayer enforces this at the gateway, before calls reach Moodle.

How many tools does the Moodle MCP server expose? +

233 tools across 4 categories: Destructive, Execute, Read, Write. 82 are read-only. 151 can modify, create, or delete data.

How do I enforce a policy on Moodle? +

Register the Moodle MCP server in PolicyLayer, apply the suggested rules above (adjust the limits to your use case), and point your AI client at the PolicyLayer proxy URL instead of the server directly. Your agents keep the same tools; PolicyLayer evaluates every call against policy before it executes. Nothing to install, live in minutes.

Enforce policy on every Moodle tool call.

Deterministic rules across all 233 Moodle tools. Per-identity grants. Full audit log. Live in minutes. Nothing to install.

Instant setup, no code required.

233 Moodle tools catalogued and risk-classified — across an index of 46,500+ MCP servers.

// WHERE THIS COMES FROM

These policies come from Moodle's registry record.

The record behind this page: verified identity, auth posture, risk grade, every tool classified, recommended policy — re-checked continuously.

Teams ship this data inside their own products. See what a licence covers →

// GET IN TOUCH

Have a question or want to learn more? Send us a message.

Message sent.

We'll get back to you soon.