
Moodle MCP
io.github.fabioovPublished by GitHub account fabioovv0.1.1Updated Nov 6, 2026
Read-only Moodle server: assignments, deadlines, grades, courses, forums, notifications.
Overview
Read-only Moodle MCP server that lets an assistant answer questions about your courses, assignments, deadlines, grades, forums and notifications.
- What you can do
- Check the site and current user, and list your current or past courses
- Browse a course's sections and activities, and list its assignments with due dates
- Check submission and grading status, grades and feedback for an assignment
- Get upcoming deadlines and calendar events, marking each assignment submitted or pending
- Read recent forum discussions and recent Moodle notifications
- When to use it
- Useful for students who want to ask in plain language what is due this week, what they have already submitted, what their grades are, or whether there are new announcements, without opening Moodle in a browser.
- Requirements
- A local Node.js 20+ runtime (npx package) or Docker; the README also describes a Cloudflare Workers deployment. Needs a Moodle site with web services / mobile app access enabled, the site root URL in MOODLE_URL, and a personal web service token in MOODLE_TOKEN. MCP_TRANSPORT=stdio for local clients; MCP_AUTH_SECRET is only needed for the hosted HTTP mode.
Installation
In SourceWeft
- Open Moodle MCP in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Moodle MCP
An open source, read-only MCP server for Moodle. Connect it to Claude and ask about your assignments, deadlines, grades, courses, forums and notifications in plain language.
Not affiliated with or endorsed by Moodle Pty Ltd. "Moodle" is a trademark of its owner.
What you can ask
- "Which assignments do I still have to hand in this month?"
- "What's due this week, and what have I already submitted?"
- "What are my grades in Machine Learning?"
- "Any new announcements in my courses?"
- "Show me the sections and activities of my Computer Graphics course."
Tools
All tools are read-only and return concise, readable output.
Requirements
- A Moodle site with Web Services / mobile app access enabled (Moodle 4.x; developed against 4.5).
- Your own web service token (below). Functions your institution disables simply return an error for that tool.
- Node 20+ for the server (Node 22+ to deploy with Wrangler), or Docker, or a free Cloudflare account.
Setup
1. Get your Moodle URL and token
- URL: the root of your Moodle, without a page or
/webservice, e.g.https://moodle.example.edu(if Moodle lives in a subfolder, include it:https://example.edu/moodle). - Token: in Moodle, Preferences → Security keys shows a key for Moodle mobile web service. Some sites
only show a label there; Reset generates a new key (and signs out your Moodle mobile app). Alternatively, if
you log in with a Moodle username and password (not SSO), request one:
curl -s "$MOODLE_URL/login/token.php" -d username=... --data-urlencode password=... -d service=moodle_mobile_app(type the password interactively so it doesn't end up in your shell history).
2. Configure
Copy .env.example to .env and fill in MOODLE_URL, MOODLE_TOKEN and MCP_AUTH_SECRET
(generate the latter with openssl rand -hex 24). .env is git-ignored.
3. Run it, pick one
Cloudflare Workers (free, always on, no domain needed): recommended
Check Cloudflare's current free-tier limits. Try it locally first by copying your .env values to a
git-ignored .dev.vars and running npm run dev:worker.
Docker / Node (self-hosted)
Then expose it over HTTPS (for example with a Cloudflare Tunnel or Tailscale Funnel).
Local only (Claude Desktop / Claude Code, stdio): no install needed:
MCP_AUTH_SECRET is not needed in this mode.
4. Add it to Claude
- Claude.ai: Settings → Connectors → Add custom connector. URL
https://<your-host>/mcp, choose No sign-in, then Add headerAuthorization=Bearer <MCP_AUTH_SECRET>. - Claude Code:
claude mcp add --transport http moodle https://<your-host>/mcp --header "Authorization: Bearer <MCP_AUTH_SECRET>" - If a client can only be given a URL, use
https://<your-host>/mcp/<MCP_AUTH_SECRET>. Treat that URL as a password; the header is preferred because URLs end up in logs.
Security and privacy
- Your token acts as you: anyone who can call your endpoint can read what your token can read. Keep
MOODLE_TOKENandMCP_AUTH_SECRETin environment variables or Cloudflare secrets, never in the repo. - The server is read-only by design and has no write tools.
- Whatever the tools return (grades, messages, names) is sent to Claude as part of your conversation. Check your institution's rules on sharing academic data with third-party services before using this, especially if you have access to other people's data (for example as a teacher).
- See SECURITY.md to report a vulnerability.
Known limitations
- Tested mainly against Moodle 4.5 with a student account. Teacher/admin roles and other versions or plugins are untested; reports and fixtures are welcome.
- Sites can disable individual web service functions, so some tools may not work everywhere.
- Large result sets are trimmed (for example, 25 assignments by default) to save context.
Development
See CONTRIBUTING.md. Changes are listed in CHANGELOG.md.
License
Source: README.md at commit 7cf8f4c
Tools
0Version history
1- v0.1.1LatestNov 6, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts