Moodle MCP Server

Moodle MCP Server

Exposes Moodle data (courses, users, enrollments, grades, SCORM, completion reports) as tools for Claude via stdio or HTTP transport.

Category
Visit Server

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_TOKEN comme un secret critique, au même titre que MOODLE_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, handlers tools/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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured