MCP permet à un client de découvrir des outils et ressources selon un contrat standard. Un serveur sûr expose des capacités étroites, pas un shell ou un accès SQL arbitraire.
Installer
~~~bash python -m venv .venv source .venv/bin/activate pip install -U mcp ~~~
Créer le serveur
~~~python from mcp.server.fastmcp import FastMCP
mcp = FastMCP('catalogue')
PRODUCTS = { 'A-100': {'name':'Clavier', 'stock':12}, 'B-200': {'name':'Souris', 'stock':0}, }
@mcp.tool() def get_product(sku: str) -> dict: """Retourne le nom et le stock d’un SKU connu.""" if len(sku) > 30: raise ValueError('SKU invalide') product = PRODUCTS.get(sku) return {'found': product is not None, 'product': product}
@mcp.resource('catalogue://policy') def policy() -> str: return 'Le stock est informatif et doit être vérifié avant une commande.'
if __name__ == '__main__': mcp.run() ~~~
Le docstring et les types construisent le schéma présenté au client.
Tester
Lancez le serveur avec le transport recommandé par votre client et utilisez l’inspecteur MCP officiel. Vérifiez découverte, appel valide, SKU inconnu, entrée trop longue et exception.
Ajouter une dépendance externe
Pour une API ou une base, fixez endpoint et credentials côté serveur, ajoutez timeout et retour minimal. Une donnée retournée peut contenir du texte hostile : elle ne devient pas une instruction système.
Sécurité
En distant, authentifiez chaque client, autorisez les outils par identité, limitez fréquence et corps, utilisez TLS et journalisez outil, durée et statut. Une écriture exige confirmation humaine et idempotence.
Production
Versionnez schémas, ajoutez tests de contrat et déployez avec moindre privilège. Ne modifiez pas silencieusement la signification d’un outil existant ; créez une version si le contrat change.
FAQ
Ressource et outil, quelle différence ?
Une ressource fournit un contenu adressable ; un outil exécute une opération avec des arguments.
MCP sécurise-t-il automatiquement mes fonctions ?
Non. Le serveur reste responsable de validation, authentification et autorisation.