Outils, ressources et requêtes
Les trois primitives qu’un serveur MCP peut exposer.
Outils, ressources et requêtes est une leçon Claude Architect gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Claude Architect, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Claude Architect comprend 4 leçons au total.
Trois primitives, un seul serveur
Le protocole de contexte du modèle (MCP) permet à un serveur externe d'exposer des fonctionnalités à Claude via une interface standard. Un seul serveur peut proposer exactement trois types de primitives :
- Outils — des actions que le modèle peut invoquer (faire quelque chose, souvent avec des effets secondaires)
- Ressources — des données et du contexte en lecture seule que le modèle peut intégrer (schémas, catalogues, documents)
- Invites — des modèles réutilisables qui structurent la formulation d'une tâche
Savoir quelle primitive correspond à une fonctionnalité est une compétence essentielle d'architecte : classer incorrectement une action comme ressource (ou l'inverse) produit des intégrations fragiles et déroutantes.
Outils — des actions avec effets
Les outils sont des actions. Ce sont les primitives que le modèle appelle pour produire un résultat : interroger une base de données en temps réel, créer un ticket, envoyer un message, traiter un remboursement. Les outils sont l'équivalent MCP des outils du SDK Agent que vous définissez déjà dans le champ tools d'une requête d'API.
Comme les outils pilotent le comportement, leurs descriptions constituent le principal mécanisme de sélection — et non leurs noms. Une bonne description d'outil précise son objectif, ses valeurs de retour, ses formats d'entrée avec des exemples et ses limites d'utilisation, afin que le modèle sélectionne le bon outil.
# An MCP server exposing a Tool (action) — Python style
@mcp.tool()
def lookup_order(order_id: str) -> dict:
"""Fetch a single order by its ID from the orders DB.
Input: order_id as 'ORD-12345' (string, required).
Returns: {status, total_cents, items[]}.
Use only when you already have an exact order ID;
for fuzzy search use search_orders instead.
"""
return db.fetch_order(order_id)Ressources — du contexte en lecture seule
Les ressources sont des données en lecture seule. Elles fournissent au modèle un contexte sur lequel raisonner, plutôt qu'une action à effectuer : un schéma de base de données, un catalogue de produits, une spécification d'API, un fichier de configuration ou un document de référence.
Le test mental est le suivant : si le modèle lit pour comprendre, il s'agit d'une ressource ; s'il agit pour modifier quelque chose, il s'agit d'un outil. Exposer un schéma stable comme ressource évite de consommer un appel d'outil (et un aller-retour) simplement pour récupérer le contexte dont le modèle a besoin dès le départ.
# An MCP Resource — read-only context the model can load
@mcp.resource("schema://orders")
def orders_schema() -> str:
"""The current orders table schema (read-only).
Provides column names and types so the model can
write correct queries without guessing.
"""
return read_file("db/orders.schema.sql")Invites — des modèles réutilisables
Les invites sont des modèles. Un serveur MCP peut publier des modèles d'invite paramétrés et réutilisables — par exemple une invite standard « résumer cet incident » ou « examiner cette PR pour détecter des problèmes de sécurité », qui intègre la structure et les critères privilégiés par l'équipe.
Les invites ne sont ni des actions ni des données : elles indiquent comment formuler une tâche. Elles permettent à un serveur de fournir des instructions conformes aux bonnes pratiques (critères explicites, exemples few-shot), afin que chaque consommateur formule la requête de manière cohérente au lieu de la réinventer.
# An MCP Prompt — a reusable, parameterized template
@mcp.prompt()
def review_pr(diff: str, focus: str = "security") -> str:
return (
"Review the following diff. "
f"Flag a finding only when it clearly violates {focus} "
"best practice; do not flag style preferences.\n\n"
f"{diff}"
)Le choix : outil, ressource ou invite
Placez les trois catégories côte à côte et leurs limites deviennent évidentes :
- Outil — « Faites X. » Produit des effets, peut échouer de manière transitoire et est invoqué au milieu de la boucle. Par exemple :
process_refund. - Ressource — « Voici X à lire. » Stable, idempotente et sans effets secondaires. Par exemple : le schéma des commandes.
- Invite — « Demandez-le comme ceci. » Un modèle, pas un appel. Par exemple : le modèle d'examen d'une PR.
Une erreur fréquente consiste à encapsuler un contexte en lecture seule dans un outil. Cela fonctionne, mais coûte un appel d'outil et un aller-retour ; une ressource fournit le même contexte à moindre coût et indique clairement l'intention.
Configurer un serveur MCP : portée
L'endroit où vous enregistrez un serveur détermine qui y a accès. Deux portées sont importantes :
- Portée du projet —
.mcp.jsonà la racine du dépôt, validé dans le système de gestion de versions. Partagé avec toute l'équipe ; toute personne qui clone le dépôt obtient les mêmes serveurs. - Portée utilisateur —
~/.claude.json, personnelle et NON partagée via VCS. Adaptée à vos propres identifiants ou à des serveurs expérimentaux.
Pour une intégration dont toute l'équipe dépend, choisissez la portée du projet afin qu'elle soit conservée dans VCS et que les nouveaux membres de l'équipe en héritent automatiquement.
{
"mcpServers": {
"orders": {
"command": "node",
"args": ["./servers/orders-mcp.js"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}Secrets : ne validez jamais de jetons
Comme .mcp.json à portée de projet est validé dans VCS, vous ne devez jamais y coder des secrets en dur. Référencez-les plutôt au moyen de variables d'environnement — par exemple ${GITHUB_TOKEN} — afin que la configuration puisse être partagée, tandis que le jeton réel reste hors du code source.
Il s'agit d'une garantie de sécurité, pas d'une simple commodité : un jeton validé est un jeton divulgué. L'indirection par variable d'environnement garde la configuration du projet portable et l'identifiant privé sur chaque machine.
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }
}
}
}Privilégier les serveurs communautaires
Pour les intégrations standard — GitHub, Postgres, Slack, système de fichiers — préférez un serveur MCP communautaire bien maintenu plutôt que d'en développer un sur mesure. Vous bénéficiez ainsi gratuitement de descriptions d'outils éprouvées, de la gestion des erreurs et des mises à jour.
Réservez un serveur sur mesure aux systèmes véritablement propriétaires pour lesquels aucune solution communautaire n'existe. Cela reprend un principe d'architecture plus général : ne reconstruisez pas les composants standard ; consacrez vos efforts à ce qui est réellement propre à votre domaine.
Erreurs structurées des outils
Lorsqu'un outil MCP échoue, un message générique comme "Operation failed" laisse le modèle sans visibilité : il ne peut pas déterminer s'il doit réessayer, transmettre le problème ou tenter une autre solution. Renvoyez toujours des erreurs structurées afin que le modèle puisse les orienter intelligemment.
Une bonne erreur MCP contient : isError: true, une errorCategory (transitoire / validation / métier / autorisation), un indicateur isRetryable, un message compréhensible, la attempted_query et les éventuels partial_results. La catégorie et l'indicateur de possibilité de nouvelle tentative transforment une impasse en récupération intelligente.
{
"isError": true,
"errorCategory": "transient",
"isRetryable": true,
"message": "DB connection timed out after 5s",
"attempted_query": "SELECT * FROM orders WHERE id='ORD-1'",
"partial_results": []
}La rigueur des outils s'applique aussi à MCP
Tout ce que vous savez sur la bonne conception des outils s'applique également aux outils MCP :
- Ce sont les descriptions, pas les noms, qui orientent la sélection : indiquez l'objectif, les résultats renvoyés, les formats d'entrée, les cas limites et les limites d'utilisation.
- Adaptez la portée des outils au rôle. Environ 4 à 5 outils par agent est optimal ; à partir d'environ 18, la fiabilité de la sélection diminue.
- Évitez les recouvrements. Deux outils aux descriptions ambiguës et similaires provoquent une mauvaise orientation.
Un serveur MCP qui déverse 20 outils décrits vaguement sur un agent constitue une anti-pratique, quelle que soit la capacité de chaque outil.
Assembler les éléments
Imaginez un serveur MCP de gestion des commandes pour un agent d'assistance. Une conception claire utilise volontairement les trois primitives :
- Ressource
schema://orders— afin que l'agent comprenne d'emblée le modèle de données, sans appel d'outil. - Outils
lookup_order,process_refund— les actions, chacune dotée d'une description précise et d'erreurs structurées. - Instruction
refund_review— un modèle qui encode les critères de justification des remboursements de l'équipe.
Enregistrez-le dans .mcp.json à la portée du projet, récupérez les secrets depuis les variables d'environnement et limitez le nombre d'outils. Voilà une intégration MCP digne d'un architecte.
Vérification rapide
Vérifiez votre compréhension des trois primitives MCP et de la manière de les exposer.
Récapitulatif : outils, ressources et instructions
Points essentiels pour l'examen et les réalisations concrètes :
- Un serveur MCP expose trois primitives : outils (actions), ressources (données/contexte en lecture seule), instructions (modèles).
- Décidez selon l'intention : agir → outil, lire pour comprendre → ressource, savoir comment demander → instruction.
- Portée :
.mcp.jsondu projet (partagé dans le VCS) contre~/.claude.jsonde l'utilisateur (personnel). - Les secrets passent par des variables d'environnement comme
${GITHUB_TOKEN}— n'intégrez jamais de jetons dans le dépôt. - Préférez les serveurs communautaires pour les intégrations standard ; limitez les outils à environ 4 ou 5 et fournissez-leur des descriptions précises.
- Renvoyez des erreurs structurées (isError, errorCategory, isRetryable, attempted_query, partial_results) afin que le modèle puisse récupérer intelligemment.
Apprends Python avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 26
- Leçons
- 104
Questions Fréquemment Posées
La leçon « Outils, ressources et requêtes » est-elle gratuite ?
Oui — le texte complet de « Outils, ressources et requêtes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Claude Architect, passe à CoddyKit PRO. Le cours Claude Architect comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Outils, ressources et requêtes » ?
Les trois primitives qu’un serveur MCP peut exposer. Tu pratiques Claude Architect avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Claude Architect ?
Aucune expérience préalable n'est requise. Claude Architect sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Outils, ressources et requêtes » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Claude Architect ?
Oui. Chaque leçon Claude Architect inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Outils, ressources et requêtes
- Portée du projet ou de l’utilisateur
- Secrets avec des variables d’environnement
- Serveurs communautaires ou personnalisés