Aller au contenu principal

Définir des ressources

Les ressources dans les serveurs MCP permettent d’exposer des données aux clients, de façon similaire aux handlers GET dans un serveur HTTP classique. Elles sont parfaites pour les scénarios où vous avez besoin de récupérer des informations plutôt que d’effectuer des actions.

Comprendre les ressources par l’exemple

Imaginons que vous voulez construire une fonctionnalité de mention de documents où les utilisateurs tapent @nom_du_document pour référencer des fichiers. Cela nécessite deux opérations :

  1. Obtenir la liste de tous les documents disponibles (pour l’autocomplétion)
  2. Récupérer le contenu d’un document spécifique (quand il est mentionné)

Quand un utilisateur mentionne un document, votre système injecte automatiquement son contenu dans le prompt envoyé à Claude — sans que Claude ait besoin d’utiliser des outils pour récupérer l’information.

Comment fonctionnent les ressources

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

Types de ressources

Ressources directes

Les ressources directes ont des URIs statiques qui ne changent jamais. Parfaites pour les opérations sans paramètres :

@mcp.resource(
    "docs://documents",
    mime_type="application/json"
)
def list_docs() -> list[str]:
    return list(docs.keys())

Ressources avec templates

Les ressources avec templates incluent des paramètres dans leurs URIs. Le SDK Python analyse automatiquement ces paramètres et les passe comme arguments mot-clé à 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"Document avec l'id {doc_id} introuvable")
    return docs[doc_id]

Détails d’implémentation

Les ressources peuvent retourner n’importe quel type de données. Utilisez le paramètre mime_type pour indiquer aux clients le type de données retournées :

mime_typeUsage
"application/json"Données structurées
"text/plain"Texte brut
"application/pdf"Fichiers binaires

Le SDK MCP Python sérialise automatiquement vos valeurs de retour. Vous n’avez pas besoin de convertir manuellement les objets en chaînes JSON — retournez simplement la structure de données et laissez le SDK gérer la sérialisation.

Tester vos ressources

Testez les ressources avec l’inspecteur MCP :

uv run mcp dev mcp_server.py

Connectez-vous à l’inspecteur dans votre navigateur. Vous verrez deux sections :

  • Resources — Liste vos ressources directes/statiques
  • Resource Templates — Liste vos ressources avec templates

Cliquez sur n’importe quelle ressource pour la tester. Pour les ressources avec templates, vous devrez fournir des valeurs pour les paramètres.

Ressources vs Outils

RessourceOutil
Lecture seulePeut modifier l’état
Contrôlée par l’applicationContrôlé par Claude
Contexte pré-chargéExécuté à la demande
URI statique ou paramétréSchéma d’arguments

Les ressources fournissent un moyen propre d’exposer des données en lecture seule depuis votre serveur MCP, ce qui facilite la récupération d’informations sans la complexité des appels d’outils.