Générer un serveur MCP Python
Créez un serveur Model Context Protocol (MCP) complet en Python avec les spécifications suivantes :
Exigences
- Structure du projet : Créez un nouveau projet Python avec une structure appropriée en utilisant uv
- Dépendances : Incluez le paquet mcp[cli] avec uv
- Type de transport : Choisissez entre stdio (pour local) ou streamable-http (pour distant)
- Outils : Créez au moins un outil utile avec des type hints appropriés
- Gestion des erreurs : Incluez une gestion des erreurs et une validation complètes
Détails d'implémentation
Configuration du projet
- Initialisez avec
uv init project-name - Ajoutez le SDK MCP :
uv add "mcp[cli]" - Créez le fichier serveur principal (ex.
server.py) - Ajoutez un
.gitignorepour les projets Python - Configurez pour l'exécution directe avec
if __name__ == "__main__"
Configuration du serveur
- Utilisez la classe
FastMCPdepuismcp.server.fastmcp - Définissez le nom du serveur et les instructions facultatives
- Choisissez le transport : stdio (par défaut) ou streamable-http
- Pour HTTP : configurez facultativement l'hôte, le port et le mode sans état
Implémentation des outils
- Utilisez le décorateur
@mcp.tool()sur les fonctions - Incluez toujours les type hints - ils génèrent les schémas automatiquement
- Écrivez des docstrings clairs - ils deviennent les descriptions des outils
- Utilisez les modèles Pydantic ou TypedDicts pour les sorties structurées
- Supportez les opérations asynchrones pour les tâches liées aux E/S
- Incluez une gestion d'erreurs appropriée
Configuration des ressources/prompts (optionnel)
- Ajoutez les ressources avec le décorateur
@mcp.resource() - Utilisez les templates URI pour les ressources dynamiques :
"resource://{param}" - Ajoutez les prompts avec le décorateur
@mcp.prompt() - Retournez des chaînes ou des listes Message depuis les prompts
Qualité du code
- Utilisez les type hints pour tous les paramètres et retours de fonction
- Écrivez les docstrings pour les outils, ressources et prompts
- Respectez les directives de style PEP 8
- Utilisez async/await pour les opérations asynchrones
- Implémentez les gestionnaires de contexte pour le nettoyage des ressources
- Ajoutez des commentaires inline pour la logique complexe
Exemples de types d'outils à considérer
- Traitement et transformation de données
- Opérations sur le système de fichiers (lecture, analyse, recherche)
- Intégrations d'API externes
- Requêtes de base de données
- Analyse ou génération de texte (avec sampling)
- Récupération d'informations système
- Calculs mathématiques ou scientifiques
Options de configuration
-
Pour les serveurs stdio :
- Exécution directe simple
- Testez avec
uv run mcp dev server.py - Installez dans Claude :
uv run mcp install server.py
-
Pour les serveurs HTTP :
- Configuration du port via variables d'environnement
- Mode sans état pour la scalabilité :
stateless_http=True - Mode réponse JSON :
json_response=True - Configuration CORS pour les clients navigateur
- Montage sur serveurs ASGI existants (Starlette/FastAPI)
Conseils de test
- Expliquez comment exécuter le serveur :
- stdio :
python server.pyouuv run server.py - HTTP :
python server.pypuis connectez-vous àhttp://localhost:PORT/mcp
- stdio :
- Testez avec l'inspecteur MCP :
uv run mcp dev server.py - Installez dans Claude Desktop :
uv run mcp install server.py - Incluez des exemples d'invocation d'outils
- Ajoutez des conseils de dépannage
Fonctionnalités supplémentaires à considérer
- Utilisation du contexte pour la journalisation, la progression et les notifications
- LLM sampling pour les outils alimentés par l'IA
- Sollicitation d'entrée utilisateur pour les workflows interactifs
- Gestion de la durée de vie pour les ressources partagées (bases de données, connexions)
- Sortie structurée avec modèles Pydantic
- Icônes pour l'affichage dans l'UI
- Gestion des images avec la classe Image
- Support des complétions pour une meilleure UX
Bonnes pratiques
- Utilisez les type hints partout - ils ne sont pas optionnels
- Retournez des données structurées autant que possible
- Journalisez vers stderr (ou utilisez la journalisation Context) pour éviter la pollution de stdout
- Nettoyez correctement les ressources
- Validez les entrées rapidement
- Fournissez des messages d'erreur clairs
- Testez les outils indépendamment avant l'intégration avec les LLM
Générez un serveur MCP complet, prêt pour la production, avec la sécurité des types, une gestion d'erreurs appropriée et une documentation complète.