Les ressources dans les serveurs MCP vous permettent d'exposer des données aux clients, de manière similaire aux gestionnaires de requêtes GET dans un serveur HTTP classique. Elles sont parfaites pour les scénarios où vous devez récupérer des informations plutôt qu'effectuer des actions.
Comprendre les ressources à travers un exemple
Supposons que vous souhaitiez créer une fonctionnalité de mention de document où les utilisateurs peuvent taper @document_name pour référencer des fichiers. Cela nécessite deux opérations :
- Obtenir une liste de tous les documents disponibles (pour l'autocomplétion)
- Récupérer le contenu d'un document spécifique (lorsqu'il est mentionné)

Lorsqu'un utilisateur mentionne un document, votre système injecte automatiquement le contenu du document dans l'invite envoyée à Claude, éliminant ainsi le besoin pour Claude d'utiliser des outils pour récupérer l'information.

Comment fonctionnent les ressources
Les ressources suivent un modèle requête-réponse. Lorsque votre client a besoin de données, il envoie une ReadResourceRequest avec un URI pour identifier la ressource souhaitée. Le serveur MCP traite cette requête et renvoie les données dans un ReadResourceResult.

Le flux se déroule ainsi : votre code demande une ressource au client MCP, qui transmet la requête au serveur MCP. Le serveur traite l'URI, exécute la fonction appropriée et renvoie le résultat.

Types de ressources
Il existe deux types de ressources :
Ressources directes
Les ressources directes ont des URI statiques qui ne changent jamais. Elles sont parfaites pour les opérations qui n'ont pas besoin de paramètres.
@mcp.resource(
"docs://documents",
mime_type="application/json"
)
def list_docs() -> list[str]:
return list(docs.keys())Ressources modélisées
Les ressources modélisées incluent des paramètres dans leurs URI. Le SDK Python analyse automatiquement ces paramètres et les transmet comme arguments nommés à votre fonction.
@mcp.resource(
"docs://documents/{doc_id}",
mime_type="text/plain"
)
def fetch_doc(doc_id: str) -> str:
if doc_id not in docs:
raise ValueError(f"Doc with id {doc_id} not found")
return docs[doc_id]
Détails d'implémentation
Les ressources peuvent renvoyer tout type de données - chaînes de caractères, JSON, données binaires, etc. Utilisez le paramètre mime_type pour donner aux clients une indication sur le type de données que vous renvoyez :
"application/json"pour les données structurées"text/plain"pour le texte brut"application/pdf"pour les fichiers binaires
Le SDK Python MCP sérialise automatiquement vos valeurs de retour. Vous n'avez pas besoin de convertir manuellement les objets en chaînes JSON - renvoyez simplement la structure de données et laissez le SDK gérer la sérialisation.
Tester vos ressources
Vous pouvez tester les ressources à l'aide du MCP Inspector. Démarrez votre serveur avec :
uv run mcp dev mcp_server.pyConnectez-vous ensuite à l'inspecteur dans votre navigateur. Vous verrez deux sections :
- Resources - Répertorie vos ressources directes/statiques
- Resource Templates - Répertorie vos ressources modélisées

Cliquez sur n'importe quelle ressource pour la tester. Pour les ressources modélisées, vous devrez fournir des valeurs pour les paramètres. L'inspecteur vous montre la structure exacte de la réponse que votre client recevra, y compris le type MIME et les données sérialisées.
Les ressources offrent un moyen propre d'exposer des données en lecture seule depuis votre serveur MCP, facilitant ainsi la récupération d'informations par les clients sans la complexité des appels d'outils.