MoodleMCP 1.0
v1.0.0
First stable release of MoodleMCP: the panel, the hosted MCP server, and the local_mcpconnector plugin.
Protocol and authentication
- Per-organization MCP endpoint on its own subdomain, over Streamable HTTP in stateless mode: credentials are verified on every request, and a revocation takes effect on the next call.
- Two authentication paths: OAuth "Sign in with your Moodle" (standard
discovery and token-to-resource binding, RFC 8707) for ChatGPT and Claude,
and bearer MCP keys (
mcpk_…, only their hash is stored) for Cursor, VS Code, Claude Code, scripts, and CI.
Tools
- 13 curated tools for the common flows and 3 gateway meta-tools
(
moodle_find_tools,moodle_tool_schema,moodle_run_tool) reaching the remaining 742 functions of Moodle's web service catalog. - Every call runs with the key's Moodle user token and passes their role checks; keys support additional restrictions — read-only, allowed tools, allowed courses, and expiry.
- File uploads by URL with
local_mcpconnector_create_resourceandlocal_mcpconnector_create_scorm, plusmoodle_request_file_uploadfor signed temporary transfers (30 minutes, up to 512 MiB).
local_mcpconnector plugin
- Installation with a license key + panel secret; every plugin↔panel request is signed with HMAC-SHA256 within a ±5 minute window.
- Role-based user provisioning from Moodle's own administration, with key delivery by email and centralized revocation.
- Compatible with Moodle 4.2 – 5.1.
Panel
- Built-in AI chat (Anthropic, OpenAI, or Google) with the same tool catalog, explicit approval of writes, and credit metering.
- Usage view by key, tool, and source; call details are purged after 90 days while daily aggregates are kept.
- Panel and documentation in six languages: Spanish, English, French, German, Dutch, and Portuguese.
Security and limits
- Moodle tokens encrypted at rest with AES-256-GCM; connections to Moodle pinned against SSRF, with a per-request timeout and a streaming response size cap.
- Per-key and per-IP rate limits, and writes serialized per key through a queue.