Guide d’étude CCDV-F/Domaine 08 sur 0810,6 % de l’examen

Outils et MCP

Trois sous-domaines, 10,6 % des points, sur la manière dont Claude agit : rédiger des définitions d’outils qui déclenchent les bons appels, comprendre ce qu’est réellement un serveur MCP et choisir le plus petit mécanisme qui comble l’écart.

Fabs||26 min de lecture|Version anglaise →

Un outil est un contrat typé entre le modèle et votre application : vous déclarez une opération et la forme de ses arguments ; le modèle décide quand l’appeler et avec quelles valeurs ; votre application exécute l’appel. Deux faits sur ce contrat organisent tout le domaine : le modèle ne voit jamais votre implémentation — seulement le schéma que vous avez écrit et les résultats que vous avez renvoyés — et ce que l’examen teste vraiment ici, c’est la qualité de votre conception d’outils, pas l’intelligence du modèle.

Une carte avant de commencer. L’examen nomme trois sous-domaines ; cette page compte plus de trois sections, et c’est voulu. Les sections 01–03 couvrent les définitions d’outils, la section 04 la boucle d’exécution, la section 05 les échecs et les approbations, la section 06 MCP, et la section 07 l’échelle de décision entre mécanismes. Tout ce qui suit — les tableaux de révision, les pièges, le quiz — est de l’aide à la révision, pas un nouveau programme. Une légende pour le balisage : la prose explique, les encadrés « À retenir pour l’examen » regroupent les faits sur lesquels portent les questions, et les pièges sont les mauvaises réponses déguisées en bonnes. Tout ce qui est étiqueté note SDK est à reconnaître seulement — l’examen vise le concept, pas le câblage.

↳Glossaire — six termes sur lesquels cette page s’appuie
tool_use / tool_result

La paire de blocs au centre de la boucle d’exécution. tool_use est la requête structurée du modèle : un id, le nom de l’outil, un objet input. tool_result est la réponse de votre application, qui reprend le même id. Chaque tool_use doit recevoir exactement un tool_result ; les server tools, cas à part, arrivent déjà appariés à leur résultat.

stop_reason

Le champ de réponse qui indique pourquoi la génération s’est arrêtée. Votre boucle s’y accroche : « tool_use » signifie exécuter puis continuer ; toute autre valeur signifie que le tour est terminé.

Server tool

Un outil défini et exécuté sur l’infrastructure d’Anthropic : recherche web, fetch web, exécution de code, tool search. Son résultat revient déjà attaché à la réponse ; vous n’en construirez jamais un.

Contenu structuré

Un résultat d’outil MCP qui valide par rapport à un schéma de sortie déclaré : des données vérifiables par une machine, plutôt qu’une prose que le modèle doit interpréter.

Elicitation

La primitive MCP côté client : le serveur demande au client de recueillir une entrée ou une confirmation auprès de l’humain, puis attend la réponse. Le serveur ne peut pas atteindre l’humain lui-même.

Roots

Les répertoires qu’un client expose à un serveur : une indication de la portion du système de fichiers qui le concerne. Un serveur bien élevé s’y tient.

01Quand un outil est la réponse

Le principe est simple : utilisez un outil quand le modèle doit agir, obtenir une information récente, ou répondre dans une forme que votre code peut exploiter ; passez-vous-en quand la prose seule constitue déjà la bonne réponse.

Quatre situations en justifient un : les actions avec effets de bord (envoyer, écrire, mettre à jour) ; les données fraîches ou externes que le modèle ne peut pas connaître (prix, météo, contenu d’une base de données) ; les sorties qui doivent respecter une structure garantie ; et les appels à des systèmes existants — bases de données, API internes, systèmes de fichiers. Pour le cas limite, l’heuristique de la documentation mérite d’être connue : si vous devez écrire une expression régulière pour extraire une décision du texte produit par le modèle, cette décision aurait probablement dû prendre la forme d’un appel d’outil. À l’inverse, les anti-cas — résumé, traduction, questions de culture générale — ont deux points communs : aucun effet de bord, et un modèle qui sait déjà traiter ces tâches ; dans ces cas, un aller-retour d’outil coûte plus que le travail lui-même.

02Anatomie d’une définition

Dans le tableau tools de l’API, un outil défini par l’utilisateur comporte un nom (lettres, chiffres, tirets et tirets bas, jusqu’à 128 caractères), une description en texte brut et un input_schema en JSON Schema. Autour de ce noyau, des propriétés optionnelles : des exemples d’entrées, cache_control, l’application stricte du schéma, le chargement différé pour les grands jeux d’outils, et allowed_callers, qui limite les composants autorisés à invoquer l’outil. Utilisez le schéma pour sécuriser les arguments : des enums pour borner un paramètre d’unité à celsius ou fahrenheit, required pour distinguer obligatoire et optionnel. Le modèle lit le schéma pour construire les arguments, mais il lit la description pour décider s’il doit appeler l’outil.

C’est le fait le plus exigible du domaine : la documentation qualifie la description de facteur de loin le plus important de la performance des outils, et le mécanisme explique ce classement — l’API assemble un prompt système dédié à partir de vos définitions d’outils, de la configuration des outils et de votre propre prompt système. Une description n’est donc pas une métadonnée que le modèle consulte : c’est du texte de prompt, présent à chaque tour. Une bonne description compte au moins trois ou quatre phrases et précise ce que fait l’outil, quand l’utiliser, quand ne pas l’utiliser, ce que signifie chaque paramètre — et, le point que tout le monde saute — ce que l’outil ne renvoie pas. « Récupère le cours de l’action » est le mauvais exemple type ; la réécriture nomme les bourses couvertes, la devise de la réponse, et énonce noir sur blanc qu’elle ne fournit aucune autre information sur l’entreprise. Les exemples d’entrées existent, mais ils résolvent un autre problème : les arguments complexes, imbriqués ou sensibles au format — et chaque exemple doit valider par rapport au schéma.

↳tool_choice — les quatre réglages
RéglageCe qu’il impose
tool + le nom de l’outilCet outil précis, pour ce tour
anyUn outil, n’importe lequel — le modèle choisit
autoAucun outil imposé — le modèle décide, outils optionnels
noneTous les outils désactivés pour ce tour
La position dans le tableau tools ne signifie rien : une réponse piège qui accorde de l’importance à l’ordre est fausse par construction.

Quand un appel d’outil échoue en aval, renvoyez un tool_result avec le tool_use_id correspondant, is_error réglé à true, et un message sur lequel le modèle peut agir — ce qui a échoué, si et quand réessayer. Renvoyer le corps d’erreur brut comme une donnée ordinaire est la façon documentée de semer la confusion.

03Concevoir le jeu

  • —Consolidez — un outil avec un paramètre action vaut mieux que create_pr, review_pr et merge_pr en trois définitions séparées : moins d’outils, plus polyvalents, offrent au modèle moins d’options voisines à départager, et la sélection s’en trouve plus fiable.
  • —Utilisez des espaces de noms — github_list_prs, slack_send_message : des noms qui portent leur service, ce qui compte le plus dès que tool search entre en jeu.
  • —Ne renvoyez que l’essentiel — des identifiants sémantiques stables et les champs dont le modèle a besoin pour son prochain pas, rien d’autre. Des résultats volumineux consomment le contexte en pure perte et noient le signal utile.

04La boucle et qui exécute quoi

Une question déverrouille toute cette section, et l’essentiel du domaine avec elle : où l’outil s’exécute-t-il ? L’endroit où il s’exécute détermine qui mène la boucle, qui renvoie le résultat et qui gère l’échec — réglez cela d’abord, et tout le reste suit. Les identifiants de blocs donnent la réponse d’un coup d’œil : toolu_ marque un tool_use client, srvtoolu_ un server_tool_use. Traitez ces préfixes comme des indices de diagnostic à lire, pas comme une liste à réciter par cœur.

Les outils clients mettent votre application au volant : Claude peut demander un appel, mais il ne peut pas exécuter votre code — c’est donc votre application qui mène la boucle. Quand le modèle veut un outil, la réponse se termine par stop_reason « tool_use » et un ou plusieurs blocs tool_use, chacun portant un id, le nom de l’outil et un objet input conforme à votre schéma. Vous aiguillez selon le nom, vous exécutez, puis vous répondez par un message utilisateur dont les blocs tool_result reprennent ces ids. En code, le client standard est une boucle while pilotée par stop_reason :

↳Outils clients — la boucle que vous menez
Vous

Envoyez la conversation et le tableau tools — schémas et descriptions seulement. Le modèle ne voit jamais votre implémentation.

Modèle

Demande un outil : la réponse se termine par stop_reason « tool_use » et un ou plusieurs blocs tool_use, chacun portant un id (toolu_…), le nom de l’outil et l’input.

Vous

Aiguillez selon le nom et exécutez l’appel dans votre application.

Vous

Répondez par un message utilisateur dont les blocs tool_result reprennent ces ids — exactement un résultat par tool_use.

Boucle

Renvoyez, et bouclez tant que stop_reason vaut « tool_use ».

Sortie

end_turn, max_tokens, stop_sequence, refusal — toute valeur autre que « tool_use » termine la boucle client.

Un tool_use laissé sans réponse rend la requête suivante mal formée : la règle d’appariement est mécanique, pas stylistique.

Les server tools inversent l’arrangement. Recherche web, fetch web, exécution de code et tool search font tourner leur propre boucle au sein de l’infrastructure d’Anthropic — une même requête peut déclencher plusieurs recherches avant qu’une réponse ne revienne. Cette réponse apparie chaque bloc server_tool_use (ids préfixés srvtoolu_) avec son résultat déjà attaché : vous ne construisez jamais de tool_result pour ces blocs, et le tour favori de l’examen sur ce terrain consiste justement à vous faire croire que vous en devez un. Le comportement à connaître par cœur est pause_turn : la boucle serveur a atteint sa limite d’itérations et le travail reste inachevé — une pause, pas un échec.

↳Server tools — la boucle qu’Anthropic mène
Vous

Envoyez une requête avec les server tools activés — recherche web, fetch web, exécution de code, tool search.

Anthropic

Fait tourner la boucle serveur dans sa propre infrastructure ; plusieurs itérations d’outils peuvent partir avant toute réponse.

API

Renvoie chaque bloc server_tool_use (préfixé srvtoolu_) avec son résultat déjà attaché.

Vous

Ne construisez rien — jamais de tool_result pour un server tool.

Si pause

stop_reason « pause_turn » : la boucle serveur a atteint sa limite d’itérations sans terminer. Renvoyez la conversation exactement comme elle est arrivée — retirer un outil du tableau est une erreur de validation — et plafonnez vos relances, car un tour repris peut se mettre en pause à nouveau.

Les server tools ne passent jamais par votre processus : au maximum, vous devez renvoyer la conversation.

Le cas subtil est le tour mixte : Claude émet un server tool et un client tool dans le même groupe parallèle, et l’API répond aussitôt — sans exécuter le server tool — pour que vous exécutiez le vôtre d’abord. Ce tour récompense une lecture attentive : stop_reason « tool_use » et non « pause_turn » ; un bloc server_tool_use sans résultat attaché comme signe ; exactement un tool_result dû, et il est à vous.

↳Le tour mixte, pas à pas
Modèle

Émet un server tool et un client tool dans le même groupe parallèle.

API

Répond immédiatement, sans exécuter le server tool — vous pouvez ainsi exécuter le vôtre d’abord. stop_reason vaut « tool_use », pas « pause_turn ».

Le signe

Un bloc server_tool_use sans résultat attaché. Sans client tool dans le groupe, ce signe veut dire pause_turn ; ici, il veut dire « en attente de vous ».

Vous

Exécutez votre client tool et renvoyez uniquement son tool_result — un seul résultat, pour le seul outil qui est à vous.

Vous

Conservez le tableau tools identique à l’octet près — retirer web_fetch vaut un 400.

API

Le server tool différé s’exécute ensuite ; son résultat arrive en tête de la réponse suivante.

↳Le même échange, comme il apparaît sur le fil
response stop_reason: "tool_use" ← pas "pause_turn"
assistant [ server_tool_use web_fetch srvtoolu_01… (pas encore de résultat)
tool_use get_weather toolu_01A… ]
 
vous envoyez user [ tool_result toolu_01A… ] ← seulement le vôtre
 
réponse suivante
assistant [ server_tool_use web_fetch + son résultat ← arrive en premier
text … ]
Un aller-retour, les deux outils servis : le vôtre maintenant, celui du serveur sur la réponse suivante.

05Quand les outils échouent, et qui approuve

La répartition des erreurs se déduit d’une seule question, déjà posée : où l’outil s’exécute-t-il ? La réponse indique qui gère l’échec — votre application pour un outil client, Anthropic pour un server tool.

↳Qui gère quel échec
L’échecCe qui se passe vraimentVotre geste
Votre outil échoue en pleine exécution — le service météo est en panneL’échec devient une donnée transmise au modèle : un tool_result avec is_error trueÉcrivez un message sur lequel le modèle peut agir — ce qui a échoué, si et quand réessayer
L’appel de Claude est invalide — un paramètre requis manqueEn développement, un problème de description ; à l’exécution, une erreur d’entrée invalideExplicitez le paramètre dans la description ; à l’exécution, renvoyez un tool_result is_error qui nomme l’erreur — Claude retente typiquement deux ou trois fois en corrigeant, avant de s’excuser auprès de l’utilisateur
Un server tool échoue — recherche web : trop de requêtes, usages épuisés, requête trop longueClaude absorbe l’échec et répond malgré toutRien — pas de is_error de votre part ; ce n’est pas votre outil
Un outil qui lève une exception n’interrompt rien : un échec d’exécution est une donnée que le modèle relaie, pas un crash dans votre boucle.

Les approbations sont la réponse de l’Agent SDK à la question « cet appel doit-il s’exécuter du tout ? » — et le concept compte plus que le câblage. Enregistrez un callback can_use_tool (canUseTool en TypeScript) : ce callback se déclenche chaque fois qu’un appel n’a pas déjà été approuvé par une règle ou un mode de permission. C’est le seul endroit où vous inspectez l’entrée complète avant toute exécution : la vraie commande derrière Bash, le vrai chemin et le vrai contenu derrière Write. Renvoyez allow, éventuellement avec un updated_input qui remplace ce qui a été demandé, ou deny — l’exécution est sautée, mais Claude voit votre message et peut changer de cap.

Deux notes SDK, à reconnaître seulement : un tableau tools passé avec le callback doit inclure AskUserQuestion, et le SDK Python exige un hook PreToolUse no-op enregistré pour tenir le flux ouvert. En revanche, ceci n’est pas une note : pour les refus fermes, disallowed_tools est évalué avant que tout mode de permission ne soit consulté — « Bash(rm -rf *) » reste donc bloqué même sous bypassPermissions, tandis qu’un « Bash » nu retirerait l’outil entier de la vue du modèle, plus large que prévu.

06MCP sans mystère

MCP est une interface standardisée. L’application hôte possède la conversation et la politique ; à l’intérieur, un client par serveur ; et les serveurs sont les programmes que les gens écrivent, qui exposent des capacités via un protocole uniforme. Tout ce qui parle ce protocole — un éditeur, Claude Desktop, Claude Code, votre propre application — peut réutiliser le même serveur.

↳Les trois rôles, et ce que chacun possède
RôleCe que c’estCe qu’il possède
HostL’application que l’humain fait tourner — Claude Code, Claude Desktop, votre applicationLa conversation, la politique de sécurité, chaque décision de consentement et d’autorisation, l’historique complet
ClientUn connecteur à l’intérieur de l’hôteExactement un serveur — un client par connexion de serveur
ServerLe programme que vous écrivezLes capacités qu’il expose à l’hôte
Les serveurs locaux (stdio) servent typiquement un client ; les serveurs distants (Streamable HTTP) en servissent typiquement plusieurs.

Le principe de conception que l’examen teste est l’isolation : un serveur ne voit que les requêtes qui lui parviennent — jamais la conversation, ni les autres serveurs, ni l’intérieur de l’hôte. S’il a besoin de quelque chose du côté client, il doit le demander et attendre : elicitation pour recueillir une entrée auprès de l’humain, roots pour savoir quels répertoires il peut toucher, sampling pour emprunter le modèle de l’hôte le temps d’une complétion. Une précision : sampling est déprécié depuis la révision 2026-07-28 de la spécification — reconnaissez le nom ; les nouvelles implémentations s’intègrent directement aux API de fournisseurs LLM.

Deux transports, et une règle simple pour les distinguer : une commande désigne généralement un serveur local utilisant stdio ; une URL désigne généralement un serveur distant utilisant Streamable HTTP. Côté hygiène : liez les serveurs locaux au loopback seulement ; pour les connexions distantes, validez l’en-tête Origin et authentifiez comme il faut. Dans Claude Code, l’enregistrement tient en une ligne dans chaque sens — une commande pour stdio, une URL pour HTTP.

↳Les deux transports
TransportComment le repérerComment il parleLa règle d’hygiène
stdio — localUne commande ; le serveur tourne comme processus enfantJSON-RPC, un message par ligne — stdout appartient en propre au protocoleLiez au loopback seulement ; les journaux vont sur stderr — un client bien élevé ne traitera pas stderr comme un échec
Streamable HTTP — distantUne URLUn seul endpoint ; chaque requête est un POST dont l’en-tête Accept liste JSON et event-stream, et le serveur répond dans l’une ou l’autre formeValidez l’en-tête Origin des connexions ; authentifiez comme il faut
Une trace de débogage égarée sur stdout corrompt le flux d’un serveur stdio — le bug classique du serveur local que l’examen nomme.

Avant qu’une capacité soit utilisée, les deux parties la déclarent et la négocient pour la session : un client ne peut appeler des outils que si le serveur a déclaré la capacité tools, et les listes se rafraîchissent par notification quand elles changent.

Puis les trois primitives — une ligne chacune avant le détail. Un outil accomplit une action. Une ressource expose des données lisibles. Un prompt encapsule une interaction réutilisable. Ce sont trois primitives distinctes, pas trois vues d’une même chose, et un serveur peut exposer n’importe quel mélange : l’exemple de la spécification elle-même est un serveur de base de données offrant des outils de requête, une ressource de schéma et un prompt few-shot en même temps.

  • —Outils — la primitive d’action du modèle : un nom, une description et un schéma d’entrée requis (un outil sans argument déclare tout de même un objet vide et fermé — {} sans rien de permis dedans) ; en option, un schéma de sortie, qui apporte dans les résultats du contenu structuré vérifiable par une machine. Les résultats portent un tableau content et un drapeau d’erreur ; un outil peut aussi signaler qu’il attend une entrée humaine avant de continuer.
  • —Ressources — des données lisibles adressées par URI, que le client liste et lit, avec en option des gabarits d’URI pour des familles paramétrées. La règle de sécurité n’est pas négociable : un serveur doit valider chaque URI et assainir les chemins de fichiers, car une URI file:// forgée qui sort de son répertoire est l’attaque classique ; les URI inconnues reçoivent une erreur de protocole.
  • —Prompts — des gabarits de messages nommés et réutilisables, avec arguments, remplis à la demande. La manière dont une organisation encapsule ses flux de travail pour que des humains les invoquent.

07Intégré, outil personnalisé, MCP, ou skill

Le principe est simple : utilisez ce qui est livré, n’écrivez que la logique qui vous appartient, branchez-vous sur ce qui existe déjà, et ajoutez de la connaissance — pas des outils — quand l’écart est une lacune de connaissance. Le choix dépend surtout de l’endroit où la logique s’exécute et de l’existence éventuelle d’une intégration ; l’ordre va du moins cher d’abord, parce que le mécanisme le moins cher est celui que vous n’avez pas à construire.

↳L’échelle de décision en un coup d’œil
MécanismeCe que c’estQuand y recourirLe signe que c’est faux
IntégrésLivrés avec Claude Code et l’Agent SDK — lecture et édition de fichiers, shell, recherche, fetch web ; certains sans permission, d’autres avec approbationLe travail reste dans le périmètre livré — une refonte à l’intérieur du dépôt n’exige rien d’autreVous êtes sur le point d’écrire à la main un lecteur de fichiers
Outil personnaliséLe vôtre : votre schéma, votre codeLa logique vous appartient — API internes, calculs de domaine, données qu’aucun intégré n’atteintLa capacité existe déjà comme service
Serveur MCPLe serveur de quelqu’un d’autre, local ou distantLa capacité existe — le tracker, le système de docs, la base de données ; connecter vaut mieux que réécrireVous écrivez à la main une intégration que d’autres équipes partagent déjà
SkillPas un outil : de la connaissance et du flux de travail — une liste de contrôle de déploiement comme commande slashL’écart est une question d’instructions, pas d’actionsLa correction ajouterait une action nouvelle entre les mains du modèle
L’échelle court du moins cher au plus cher. Sauter des barreaux est permis ; en inventer est l’erreur.

Un fait de câblage éclaire à la fois une bizarrerie de nommage et une façon de cadrer le débat : dans l’Agent SDK, les outils personnalisés s’enregistrent enveloppés dans un serveur MCP en processus. Retenez-le deux fois : il explique les noms d’outils préfixés mcp__, et il signifie que « outil personnalisé contre MCP » est en réalité une question sur l’endroit où la logique s’exécute — votre processus, ou le serveur de quelqu’un d’autre.

Une distinction côté API revient sans cesse dans les questions d’examen : les schémas définis par Anthropic comme bash et text_editor ressemblent à des server tools, mais ils s’exécutent de votre côté. Anthropic définit leur schéma — vous le demandez par son type daté plutôt que de définir le vôtre —, entraîne le modèle dessus, mais votre application exécute l’appel et renvoie le résultat. Seuls les vrais server tools — recherche web, fetch web, exécution de code, tool search — tournent sur l’infrastructure d’Anthropic.

08Une page pour réviser

Sept sections de prose précèdent cette ligne. Voici le même domaine en un tableau — qui exécute quoi, la question sur laquelle tourne chaque scénario — plus la liste de contrôle de la veille. Si vous ne relisez qu’une chose la veille de l’examen, relisez ceci.

↳Qui exécute quoi — le tableau sur lequel ce domaine tourne
Genre d’outilQui exécuteLes idsVotre tool_result ?En cas d’échec
Outils (clients) définis par l’utilisateurVotre applicationtoolu_Oui — exactement un par tool_useVous l’écrivez : is_error true, message actionnable
Schémas définis par Anthropic — bash, text_editorVotre application — la ligne qu’on ratetoolu_Oui — comme les outils clientsComme les outils clients
Server tools — recherche web, fetch web, exécution de code, tool searchL’infrastructure d’Anthropicsrvtoolu_Jamais — la réponse les apparieClaude l’absorbe ; rien de votre part
stop_reason « tool_use » → exécutez vos outils clients et répondez. « pause_turn » → boucle serveur inachevée : renvoi identique à l’octet près. Toute autre valeur → terminé.

La liste de contrôle de la veille. Vous devriez pouvoir énoncer chacune de ces lignes sans regarder :

  • —Les cinq règles du haut de la page, à voix haute, dans l’ordre.
  • —Ce que signifie chaque stop_reason — et que pause_turn veut dire inachevé, pas échoué.
  • —Le tour mixte en une phrase : un server tool sans résultat plus un client tool dans le groupe → exécutez seulement le vôtre, renvoyez un tableau d’outils identique.
  • —Les trois rôles MCP, le principe unique (l’isolation), et la règle de transport : commande → stdio avec stdout réservé au protocole ; URL → Streamable HTTP.
  • —Outil, ressource et prompt en une ligne chacun — et le fait qu’un serveur peut exposer les trois.
  • —L’échelle du moins cher d’abord — intégrés, personnalisé, MCP, skill — et le fait qu’un skill n’est pas un outil.

Un dernier tri, parce que tout ce qui précède ne mérite pas le même effort de mémorisation. À connaître parfaitement : les cinq règles, les valeurs de stop_reason et ce que votre code fait pour chacune, les trois rôles MCP, et outil / ressource / prompt en une ligne chacun. À reconnaître immédiatement : les préfixes toolu_ et srvtoolu_ (des indices de diagnostic, pas une liste à réciter), les notes SDK autour de can_use_tool, les raisons d’échec nommées de la recherche web. En simple référence : tout le reste. Ce domaine récompense le jugement — quel mécanisme, à qui revient l’échec, quelle primitive — bien plus que la mémoire.

09Les pièges de ce domaine

  • —« Claude choisit le mauvais outil — ajoutez des exemples d’entrée » — la sélection est un problème de description ; les exemples corrigent les arguments complexes.
  • —« Plus d’outils, plus étroits, rendent la sélection plus claire » — la documentation dit consolider : un outil, un paramètre action.
  • —« Le serveur MCP peut voir toute la conversation » — l’isolation est la conception : l’hôte voit tout, le serveur ne voit que des requêtes.
  • —« Les serveurs stdio peuvent imprimer sur stdout » — stdout est le canal du protocole ; les journaux vont sur stderr.
  • —« bash et text_editor tournent sur les serveurs d’Anthropic » — les schémas définis par Anthropic s’exécutent pourtant dans votre application.
  • —« Un skill est une sorte d’outil » — un skill ajoute de la connaissance et du flux de travail, pas une action.
  • —« Après un server tool, vous devez un tool_result » — jamais : Anthropic apparie chaque server_tool_use avec son résultat ; en construire un vous-même est l’erreur.
  • —« Un server_tool_use sans résultat veut dire pause_turn » — seulement si aucun client tool ne partage le groupe ; sinon, c’est un tour mixte, et vous ne devez que le résultat de votre client tool.
  • —« Un outil qui lève une exception termine la boucle » — un échec d’exécution est une donnée, pas un crash : is_error true, un message actionnable, et Claude le relaie.
  • —« bypassPermissions passe outre toute restriction » — les règles deny passent avant tout mode consulté ; disallowed_tools tient même là.

10Vérifiez vos acquis

Quatre questions, à peu près dans le registre de l’examen. Chacune se déplie pour montrer la réponse et — plus utile encore — pourquoi les mauvaises options sont mauvaises.

Q1

En test, Claude construit des arguments corrects pour votre outil d’inventaire, mais il choisit souvent un outil de recherche moins cher quand il devrait choisir l’inventaire. Où corrigez-vous ?

  1. AAjouter plus d’exemples d’entrée montrant des formes d’arguments complexes
  2. BRégler tool_choice sur « any » pour qu’un outil soit toujours utilisé
  3. CRéécrire la description de l’outil d’inventaire pour dire quand l’utiliser — et quand ne pas l’utiliser
  4. DRenommer les outils pour que l’outil d’inventaire arrive en premier
→Vérifier votre réponse
Réponse : C

La sélection est un problème de description : la description est le texte de prompt que le modèle lit pour décider s’il appelle l’outil du tout. Les exemples corrigent un autre problème — les arguments complexes ou sensibles au format. « any » impose un outil mais pas lequel, et la position dans le tableau ne signifie rien : renommer ne peut pas aider.

Q2

Une réponse arrive avec stop_reason « tool_use », contenant un server_tool_use pour web_fetch sans résultat attaché, et un tool_use pour votre get_weather. Que fait votre code ?

  1. AConstruire des tool_results pour les deux blocs avant de renvoyer
  2. BRetirer web_fetch du tableau d’outils pour que le modèle ne puisse plus le demander
  3. CTraiter cela comme pause_turn et renvoyer la conversation sans aucun résultat ajouté
  4. DExécuter get_weather, renvoyer seulement son tool_result, et conserver un tableau d’outils identique à l’octet près
→Vérifier votre réponse
Réponse : D

C’est le tour mixte : le server tool attend que vous exécutiez le vôtre d’abord. Le server_tool_use sans appariement est le signe, et stop_reason vaut « tool_use », pas « pause_turn ». Vous ne devez que le résultat de votre client tool — en construire un pour web_fetch est le piège que l’examen tend — et le tableau d’outils doit rester identique : retirer web_fetch vaut un 400.

Q3

Le serveur MCP de documentation de votre équipe doit laisser l’agent interroger l’index des docs, exposer le guide de style comme contenu lisible, et offrir un gabarit réutilisable « compte rendu d’incident » qui prend des arguments. Quelles primitives déclare-t-il — et combien de serveurs ?

  1. AOutils, ressources et prompts — un serveur peut exposer les trois
  2. BTrois serveurs, un par primitive
  3. COutils et prompts seulement — les ressources doivent être des fichiers locaux
  4. DRessources et prompts seulement — interroger un index est une lecture, donc une ressource
→Vérifier votre réponse
Réponse : A

Un outil accomplit l’action (interroger), une ressource expose la donnée lisible (le guide de style), un prompt encapsule l’interaction réutilisable (le gabarit) — et les capacités se déclarent par serveur, donc un serveur peut exposer le lot entier ; l’exemple du serveur de base de données de la spécification fait exactement cela. Interroger est une action dirigée par le modèle, pas une donnée passive — ce qui écarte la dernière option.

Q4

Un relecteur veut que Claude parcoure la liste de contrôle de déploiement de l’équipe avant chaque mise en production — les mêmes étapes à chaque fois, aucune capacité nouvelle nécessaire. Quel mécanisme convient ?

  1. AUn outil personnalisé qui exécute les étapes
  2. BUn serveur MCP enveloppant le runbook
  3. CWeb fetch, tirant la liste de contrôle du wiki à chaque fois
  4. DUn skill — la liste de contrôle comme commande slash
→Vérifier votre réponse
Réponse : D

L’écart est de la connaissance et du flux de travail, pas de l’action — et c’est exactement ce qu’est un skill : de la connaissance et du flux de travail, pas un outil nouveau. Les trois autres options ajoutent de la machinerie que l’échelle dit de ne pas construire : le mécanisme le moins cher est celui que vous n’avez pas à construire.

Fabs
Fondateur, The Third Way Company
Travailler avec nous