EDT Unicaen — Serveur MCP (Model Context Protocol)
Ce dépôt contient un serveur Model Context Protocol (MCP) minimal exposant des outils pour interroger des emplois du temps (EDT) de l'Université de Caen (Unicaen).
Le serveur est implémenté en Python et fournit des outils MCP (via mcp.server.fastmcp) pour récupérer le prochain cours d'un professeur, d'une salle ou d'un étudiant, et pour vérifier la disponibilité d'une salle.
Points clés
- Nom : EDT Unicaen MCP Server
- Fichiers principaux :
index.py,utils.py - Outils MCP exposés :
prochain_cours,disponibilite_salle - Endpoint de santé :
/health
Fonctionnalités
- Construction d'URL de mise à jour ADE (endpoint tiers) à partir des métadonnées d'entrée.
- Récupération via HTTP des mises à jour (JSON ou ICS) et parsing pour retrouver les événements (prochains cours, disponibilités).
- Support d'une limite temporelle optionnelle lors des requêtes de disponibilité (paramètres
startetend).
Prérequis
- Python 3.10+ recommandé
- Dépendances listées dans
requirements.txt(utiliser un environnement virtuel)
Installation rapide
- Créez et activez un environnement virtuel (Windows PowerShell) :
python -m venv devenv
.\devenv\Scripts\Activate.ps1
- Installez les dépendances :
pip install -r requirements.txt
Configuration
Le comportement du serveur peut être configuré via variables d'environnement :
MCP_HOST— adresse d'écoute (par défaut127.0.0.1)MCP_PORT— port HTTP (par défaut8000)MCP_MOUNT— chemin de montage MCP (par défaut/mcp)MCP_SSE_PATH— chemin SSE (par défaut/sse)MCP_MESSAGE_PATH— chemin messages (par défaut/messages/)MY_EDT— nom par défaut à utiliser quand l'appelant ne fournit pas de nom (format attendu :PRENOM NOM)
Exemple (PowerShell) :
$env:MCP_PORT = '8000'
$env:MY_EDT = 'Jean Dupont'
Usage
Lancer le serveur en mode standard (stdio) :
python index.py
Le serveur démarre un serveur MCP et expose les outils déclarés dans index.py.
Endpoints utiles
/health(GET) — renvoie un JSON simple pour vérifier que le serveur est actif.
Les outils MCP sont accessibles via la couche MCP (middleware) — voir le dispatch et le client MCP utilisé par vos agents/EDT.
Outils MCP fournis
prochain_cours(nom: Optional[str]) -> dict:- Retourne le prochain événement (date/heure ISO, résumé) pour le nom fourni (professeur / salle / étudiant / université).
- Si
nomabsent ou égal àme/moi/self, le serveur utiliseMY_EDTsi configuré. - Recherche dans les fichiers
assets/*.json, construit l'URL ADE, récupère la ressource, et tente de parser JSON ou ICS pour extraire le prochain événement.
disponibilite_salle(nom: Optional[str], start: Optional[str], end: Optional[str]) -> dict:- Indique si la salle est libre maintenant, et si non jusqu'à quelle heure elle est occupée.
- Paramètres
start/endpeuvent être des heuresHH:MMou des datetimes ISO pour limiter la fenêtre de recherche.
Les retours incluent des dates/horaires au format ISO complet (ex: 2025-10-25T08:00:00).
Données / Assets
Le dossier assets/ contient plusieurs fichiers JSON d'exemple :
prof.json— métadonnées des enseignantssalle.json— métadonnées des sallesstudent.json— métadonnées des étudiantsuniv.json— métadonnées générales / timetable
Ces fichiers servent de source locale pour résoudre un nom d'EDT et construire les URLs ADE.
Développement
- Code principal :
index.py - Fonctions utilitaires de parsing/résolution :
utils.py
Conseils pour développement :
- Activez l'environnement de développement.
- Installez les dépendances de développement si nécessaire.
- Lancez
index.pyet testez les outils via un client MCP ou en simulant des appels.
Tests
Il n'y a pas (encore) de suite de tests incluse dans ce dépôt. Pour ajouter des tests :
- Ajouter
pytestàrequirements.txtourequirements-dev.txt. - Écrire des tests unitaires pour
utils.py(parsing ICS/JSON, construction d'URL, recherche d'entrées).
Exemple d'utilisation (client MCP)
Un client MCP peut invoquer l'outil prochain_cours en passant un nom. La réponse est un objet JSON contenant ok, source, et next (ou error).
Contribuer
Contributions bienvenues : issues, PRs pour ajouter des tests, améliorer la robustesse du parsing ICS/JSON, ou ajouter des outils MCP supplémentaires.
Licence
Ce dépôt n'inclut pas de fichier LICENSE. Ajoutez-en un si vous souhaitez déclarer une licence explicite.
Si vous voulez, je peux :
- compléter le
readme.mdavec des exemples concrets d'appels (payloads et réponses), - ajouter une suite de tests minimaliste pour
utils.py, - ou créer un
requirements-dev.txtet des scripts make/shell pour développement.