moodle-mcp
Provides tools for interacting with a Moodle LMS instance, enabling agents to list courses, view course overviews, read assignments and attachments, fetch files as markdown, browse forums and discussions, check schedules and grades, upload files, submit assignments, and call Moodle web service functions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@moodle-mcpWhat's due in the next two weeks? Plan my studying around it."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
A Model Context Protocol server that lets LLM agents use a real Moodle LMS — read courses, fetch assignment PDFs, write code, upload and submit — through a single static binary.
mcp-name: io.github.G36maid/moodle-mcp
Built in Rust on the official MCP SDK (rmcp).
Verified live against Moodle 3.7, 4.5 and 5.2; designed for 3.7 → 5.x.
✅ Why
A generic chatbot has no way into your Moodle, so every study task stays manual — five browser tabs to answer "what's due this week?", PDFs re-uploaded by hand, forums and grades copy-pasted one page at a time.
moodle-mcp signs the agent in as you. 20 typed tools cover the full student journey, and the agent chains them by itself — without ever opening a browser:
Batteries included — document conversion, HTML → markdown, an auth CLI and an opt-in escape hatch in one binary: no plugins, no helper scripts, no second runtime
Agent-native — tools take and return local file paths instead of base64; every result embeds the IDs for the next call; errors are plain-language and suggest the fix
Safe by default — write tools confirm with you first, submissions stay drafts until you say so; quiz-taking is intentionally not provided
Version-adaptive — verified against Moodle 3.7 and designed for 4.x/5.x; response differences between versions are absorbed automatically
One static binary — no runtime dependencies
Related MCP server: Moodle MCP Server
🚀 Quick start
Needs a Moodle 3.7 → 5.x account on a site that allows the mobile-app web service (most do — see prerequisites).
# 1. Install
cargo install moodle-mcp # or a prebuilt binary / one-click .mcpb — no Rust needed
# 2. Log in once — prints MOODLE_URL and MOODLE_TOKEN
moodle-mcp auth
# 3. Connect your client (Claude Code shown; Codex/OpenCode/pi below)
claude mcp add moodle \
--env MOODLE_URL=https://moodle.example.com \
--env MOODLE_TOKEN=your-token \
-- /path/to/moodle-mcp
# 4. Open a chat and ask:
# "What's due in the next two weeks? Plan my studying around it."Or paste this into your agent and let it do every step (it will open
moodle-mcp auth in its terminal — type your school credentials there):
Set up moodle-mcp (github.com/G36maid/moodle-mcp): read docs/src/installation.md
and docs/src/configuration.md from the repo's main branch first. Then install
the binary for my platform, run `moodle-mcp auth` in the terminal so I can
type my school credentials when it prompts, and register the server in your
own MCP config using the snippet for your harness. Never store or repeat my
credentials; ask before anything global.Prebuilt binaries, SSO login, config snippets for every client, and the full environment-variable reference: Installation · Getting Started · Configuration
💬 What the agent can do
All of these work with no further setup — the agent discovers the tools from their descriptions and chains them itself:
You say | The agent chains |
"Finish my Information Security HW1: read the assignment brief and the attached PDF, work through the problems, and submit a draft." |
|
"Based on upcoming deadlines and course materials, build me a complete study plan for the next two weeks." |
|
"I missed what happened in Data Communication this week — catch me up, including the announcements forum." |
|
"Prep me for the Software Engineering quiz: what did the teacher post about it?" |
|
🔄 How the agent works
The tools mirror how you navigate Moodle — each level's output embeds the IDs for the next:
flowchart TD
Q["💬 prompt (intent only)"] --> LC["list_courses(search?)<br/>find the course"]
LC --> OV["get_course_overview(course_id)<br/>markdown map: sections · files ·<br/>assignments · quizzes · forums · grades"]
OV --> FD["get_forum_discussions(forum_id)<br/>→ get_discussion_posts(discussion_id)"]
OV --> AS["get_assignment(assignment_id)<br/>brief · attachments · submission · grade"]
AS --> FF["fetch_file(url)<br/>assignment PDF → readable markdown"]
FF --> WK["agent works:<br/>answers · code · report on disk"]
WK --> UP["upload_file(path, filename)<br/>solution → draft area → item_id"]
UP --> SB["submit_assignment(assignment_id, item_id?, finalize?)<br/>save draft or turn in"]
SB --> VF["get_assignment<br/>verify: submitted ✓ files ✓"]
OV --> SC["get_schedule(time window)<br/>deadlines → study plan"]
OV --> GR["get_grades(course_id)<br/>graded items + feedback"]Everything the dedicated tools don't cover is reachable through the
call_ws_function + list_ws_functions escape hatch — full coverage of the
~350 functions a typical token can call (20 + 2 = 22 in total; the escape
hatch is opt-in via MOODLE_ENABLE_WS_FUNCTION=true).
📚 Documentation
Full documentation lives at moodle.ntnu.cc/docs (mdBook —
mdbook serve docs to read locally):
Page | Contents |
from zero to the first prompt; no MCP experience assumed | |
prebuilt binaries, cargo, from source | |
every environment variable; config snippets for Claude Code, Codex, OpenCode, and pi | |
the full 22-tool reference and the ID flow between them | |
token lifecycle, transport and write safety | |
release notes, version by version | |
architecture tour, tests, release process | |
what moodle-mcp, MCP, and Moodle are |
🧰 Development
cargo test # unit + wiremock integration + MCP protocol tests
cargo clippy --all-targets
cargo fmt -- --check
cargo build --releaseProject documentation lives in docs/ — mdBook,
formatted with Prettier (see docs/README.md); preview with
mdbook serve docs.
The landing page lives in site/ — Astro 7 + TypeScript
(cd site && npm install && npm run dev, build with npm run build).
🔐 Security
Use HTTPS — the token travels with every request. It never appears in tool output or errors, is only injected into same-site Moodle URLs, and write tools confirm with you before they act. Full details: Security & Authentication.
📄 License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.
- openhelmOAuthai.openhelm
Autonomous cloud agent tasks: real browser + your tools, structured evidence-backed results.
An agent-first office suite Claude & ChatGPT read and write over one MCP URL.
Control a real browser from AI agents: navigate, click, type, screenshot, read the page.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Moodle LMS via browser automation, using a server and browser extension to keep credentials local and route commands securely.1 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with Moodle LMS via the Moodle REST API, supporting management of courses, users, enrollments, grades, and content.GPL 3.0
- AlicenseBqualityBmaintenanceEnables AI agents to download courses from any Moodle site for offline study, supporting authentication, course listing, and syncing via CLI or MCP.13MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with Moodle LMS, fetching assignments, grades, deadlines, course content, and syncing to Obsidian, with WhatsApp alerts and class-slot filtering.-