Moodle MCP Server
Exposes Moodle data (courses, users, enrollments, grades, SCORM, completion reports) as tools for Claude via stdio or HTTP transport.
README
Moodle MCP Server
Serveur MCP (Model Context Protocol) qui expose des données Moodle (cours, utilisateurs, inscriptions, notes, SCORM, rapports de complétion) sous forme d'outils utilisables par Claude.
Deux modes de transport sont disponibles :
- stdio — pour un usage local avec Claude Code ou Claude Desktop.
- HTTP (Streamable HTTP) — pour déployer le serveur et l'ajouter comme connecteur personnalisé distant sur claude.ai.
Prérequis
- Node.js 20+
- Une instance Moodle avec le service web REST activé et un token utilisateur (
MOODLE_TOKEN)
Installation
npm install
cp .env.example .env
Renseigne ensuite .env :
| Variable | Obligatoire | Description |
|---|---|---|
MOODLE_URL |
Oui | URL du endpoint REST Moodle, ex: https://moodle.tonsite.fr/webservice/rest/server.php |
MOODLE_TOKEN |
Oui | Token du web service Moodle |
PORT |
Non (mode HTTP uniquement) | Port d'écoute du serveur HTTP (défaut 3000) |
MCP_ACCESS_TOKEN |
Oui (mode HTTP uniquement) | Token d'accès au serveur HTTP — génère-le avec openssl rand -hex 32 |
Mode stdio (Claude Code / Claude Desktop)
npm run dev # développement (tsx)
npm run build && npm run start # production
Dans la config MCP de Claude Code/Desktop, pointe simplement vers node dist/index.js (après npm run build) avec les variables d'environnement MOODLE_URL/MOODLE_TOKEN chargées via .env.
Mode HTTP (connecteur distant claude.ai)
npm run dev:http # développement (tsx)
npm run build && npm run start:http # production
Le serveur écoute sur POST /mcp (port PORT, défaut 3000). Chaque requête doit inclure le token d'accès en paramètre de requête :
https://ton-domaine.com/mcp?token=<MCP_ACCESS_TOKEN>
C'est cette URL qu'il faut renseigner dans le champ URL du serveur MCP distant du formulaire "Ajouter un connecteur personnalisé" de claude.ai.
Sans MCP_ACCESS_TOKEN défini, le serveur refuse de démarrer (aucun mode non protégé possible). Une requête sans token, ou avec un token invalide, reçoit une réponse 401. GET/DELETE /mcp renvoient 405 (pas de sessions, le transport est sans état).
⚠️ Sécurité : token dans l'URL
Le formulaire de connecteur claude.ai ne permet pas d'envoyer un en-tête HTTP personnalisé, seulement une URL — le token est donc transmis en paramètre de requête plutôt qu'en en-tête Authorization. Tout proxy inverse, CDN, load balancer ou autre infrastructure placée devant ce serveur et qui journalise les URLs complètes des requêtes capturera ce token dans ses logs. Avant un déploiement public :
- désactive la journalisation des query strings sur tes proxies, ou redacte-les ;
- traite
MCP_ACCESS_TOKENcomme un secret critique, au même titre queMOODLE_TOKEN.
Le déploiement effectif (Docker, systemd, reverse proxy, certificat TLS) n'est pas couvert par ce dépôt — c'est une étape à part, propre à ton infrastructure.
Outils MCP disponibles
| Outil | Description |
|---|---|
moodle_get_courses |
Liste les cours disponibles sur Moodle |
moodle_get_users |
Récupère une liste d'utilisateurs Moodle |
moodle_get_enrolled_users |
Liste les utilisateurs inscrits dans un cours |
moodle_get_grade_items |
Récupère les notes d'un utilisateur dans un cours |
moodle_get_scorms_by_courses |
Liste les modules SCORM disponibles dans un ou plusieurs cours |
moodle_get_scorm_completion_report |
Génère un rapport de complétion pour un module SCORM |
moodle_get_completion_report |
Génère un rapport de complétion pour un cours |
Architecture
src/moodleClient.ts— client HTTP vers l'API REST Moodle (avec cache).src/tools/*.ts— définition des outils MCP (schéma Zod + handler).src/server.ts— construction du serveur MCP (liste des outils, handlerstools/list/tools/call), partagée par les deux transports.src/index.ts— point d'entrée stdio.src/httpServer.ts— point d'entrée HTTP (Express, transport sans état, authentification par token).
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.