Chargement

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é)

Diapositive de fonctionnalité : les utilisateurs peuvent mentionner un document en écrivant @doc_name ; taper @ affiche une liste de tous les documents disponibles dans une autocomplétion, et le contenu d'un document mentionné est automatiquement injecté dans l'invite

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.

Diagramme d'un utilisateur demandant « Que contient le fichier @report.pdf ? » — notre code enveloppe la requête dans une invite pour Claude avec le contenu du document référencé injecté à l'intérieur d'une balise document

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.

Diagramme de séquence : l'utilisateur tape « Que contient le @… », notre code demande au client MCP une liste de noms de documents pour l'autocomplétion, et le client envoie une ReadResourceRequest avec l'URI docs://documents au serveur MCP

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.

Diagramme de séquence (suite) : le serveur MCP renvoie un ReadResourceResult contenant la liste des noms de documents, que le client MCP transmet à notre code pour l'insérer dans l'autocomplétion

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.

python
@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.

python
@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]

Comparaison côte à côte : une ressource directe dont l'URI ne contient aucun paramètre, et une ressource modélisée dont l'URI contient un ou plusieurs paramètres que le SDK Python analyse et transmet comme arguments à votre fonction

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.py

Connectez-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

MCP Inspector avec l'onglet Resources ouvert, montrant la ressource directe docs://documents sous Resources, le modèle fetch_doc sous Resource Templates, et la réponse JSON pour docs://documents avec son URI, son mimeType et sa liste sérialisée de noms de documents

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.