Wyvern&Castle
Ceci est un projet de modèle MCP (Model Context Protocol) pour le cours de Natural Language Programming de l'année 2025-2026.
L'objectif du projet a été de concevoir une version simplifié du jeu Donjon & Dragon avec un LLM capable de générer des parties et des scénarios qui n'ont de limite que votre imagination (et celles du LLM aussi!).
Le projet contient un serveur (server.py) qui intéragit avec notre API de jeu (game.py).
Initialisation du projet
Pour lancer une partie de notre jeu, nous vous conseillons d'installer Claude Desktop (disponible sur Windows et Mac) qui va servir de LLM. Nous n'avons pas essayé mais il serait aussi possible d'utiliser la version Desktop de ChatGPT
- Installer l'utilitaire python UV :
# Mac/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows, l'ajouter au Path
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Initialiser le dossier pour l'installation Creer un dossier et cloner le projet :
mkdir wyvern_castle
cd wyvern_castle
git clone "https://gitea.galaxynoliro.fr/KuMiShi/Wyvern-Castle.git"
- Creation de l'environnement virtuel
uv venv
Mac/Linux
source .venv/bin/activate
Windows
.\.venv\Scripts\activate
- Installation des dependances/requirements
# Synchronise l'environnement virtuel du dossier avec les dependances du projet
uv pip sync pyproject.toml
# Si cela ne fonctionne pas correctement, vous pouvez le générer un fichier de dependances avec la commande suivante à partir du .toml:
uv pip compile --upgrade pyproject.toml -o uv.lock
# Puis synchroniser à nouveau (avec le nouveau fichier cette fois)
uv pip sync uv.lock
- Changement de la config de Claude Desktop
Modifier le fichier
claude_desktop_config.json
{
"mcpServers": {
"wyvern_castle": {
"command": "uv",
"args": [
"--directory",
"C:\\ABSOLUTE\\PATH\\TO\\PARENT\\FOLDER\\wyvern_castle",
"run",
"server.py"
]
}
}
}
Utilisation
Le projet est assez simple d'utilisation car une fois le serveur lancé, il vous suffit d'écrire des prompts à l'aide de votre application Desktop de LLM. Il est aussi possible d'avoir accès à une aide de génération de prompt intégrée.
Documentation
Tools
Outils
Outils liés à la gestion de la partie :
async def load_game(slot:int) # Charge une sauvegarde
async def save_game(slot:int) # Sauvegarde une partie
async def get_game_state() # Récupère le contexte de la partie pour se remettre à jour
Routines de création de contenu :
# Crée un joueur
async def create_npc(name: str, strength: int, dexterity: int, intelligence: int, wisdom: int, charisma: int, hp: int, armor: int, speed: int, item_id:str)
# Crée un personnage non-joueur
async def create_player(name: str, strength: int, dexterity: int, intelligence: int, wisdom: int, charisma: int, hp: int, armor: int, speed: int, item_id:str)
# Crée un objet
async def create_item(name: str, description: str, stat_modifier: dict[str,int])
# Crée un événement (fonctionne comme un contexte de combat, d'exploration, etc.)
async def start_event(location:str, initial_description:str, entity_list:list[str])
Routines d'actions du joueur et du système
# Lance une attaque
async def perform_attack(src_entity_id:str, target_entity_id:str, attack_type:Stat)
# Lance un test (ex: crocheter une serrure, soulever un poids)
async def perform_simple_action(entity_id:str, stat:Stat, difficulty:int, roll:int, description:str)
# Modifie une statistique (se faire maudire, boire une potion)
async def perform_stat_modification(entity_id:str, stat:Stat, value:int=0)
# Donne un objet à une entité
async def equip_item_to_entity(entity_id: str, item_id: str)
Routines utilitaires :
# Récupère les propriétés d'un objet
async def get_item_properties(item_id: str) -> Dict[str, Any]
# Récupère les propriétés d'une entité
async def get_entity_status(entity_id: str) -> Dict[str, Any]
# Récupère l'événement en cours
async def get_current_event() -> Dict[str, Any]
# Récupère la liste de toutes les entités actives
async def get_all_entities_status()
# Lance un dé
async def throw_a_dice(n_faces: int) -> Any
# Lance une pièce
async def toss_coin()