Aller au contenu
Mastering Claude

Accueil / Étendre : compétences, MCP, sous-agents, hooks, plugins

Étendre : compétences, MCP, sous-agents, hooks, plugins9 minApplication

Construire son propre serveur MCP

Un serveur MCP maison se lance en processus enfant par transport stdio, déclare dans inputSchema un schéma JSON que le serveur doit lui même valider, et une description précise décide quand Claude l'appelle.

Un serveur MCP construit maison n'est rien de plus qu'un programme ordinaire qui lit et écrit sur son entrée et sa sortie standard en suivant le protocole MCP. Claude Code le lance lui-même comme processus enfant, via le transport stdio, sans que ce programme n'écoute jamais un port réseau. Le même mécanisme sert pour un outil interne, connecté à une base de données privée, qu'aucun serveur public ne pourrait exposer sans risque.

Le déclarer auprès de Claude Code

La commande d'enregistrement sépare clairement ce qui appartient à Claude Code de ce qui appartient au serveur : claude mcp add --env CLE=valeur --transport stdio nom-du-serveur -- commande arguments. Tout ce qui suit le double tiret est transmis tel quel au serveur, sans interprétation ; tout ce qui le précède, --transport ou --env, configure la connexion côté Claude Code.

claude mcp add --env DEPOT=./donnees --transport stdio compteur -- node ./serveurs/compteur.js

Le processus compteur.js démarre alors à chaque session qui en a besoin, reçoit la variable DEPOT dans son environnement, et communique avec Claude Code par des messages écrits sur sa sortie standard.

Le schéma décide ce qui entre, la description décide si on l'appelle

Chaque outil déclare un schéma JSON qui borne ses arguments valides. Un outil qui compte les mots d'un texte peut exiger une chaîne obligatoire et refuser tout autre type :

{
  "name": "compter_mots",
  "description": "Compte le nombre de mots dans un texte fourni en argument.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "texte": { "type": "string" }
    },
    "required": ["texte"]
  }
}

Ce schéma déclare ce que l'outil attend, un argument manquant ou du mauvais type n'y est pas conforme, mais la validation reste due par le serveur : la spécification MCP impose au serveur de valider chaque entrée d'outil, le schéma n'est pas une garantie appliquée côté client avant l'appel. Le schéma ne décide pas non plus si Claude choisit cet outil plutôt qu'un autre : c'est le champ description qui joue ce rôle, exactement comme pour une skill. Une description qui promet plus que ce que l'outil fait réellement, par exemple compter les mots de n'importe quel document sans préciser qu'il ne lit qu'un argument texte déjà fourni, se retourne contre vous dès que Claude s'y fie pour un cas qu'elle ne couvre pas.

La leçon précédente montre comment vérifier qu'un serveur ainsi déclaré apparaît bien connecté avant de lui faire confiance.

Figure 1

De la demande à l'appel d'outil MCP

01
Lecture de la description
Claude compare la tâche en cours à la description de chaque outil disponible et retient celui qui correspond.
02
Construction des arguments
Claude prépare les arguments à passer, à partir du contexte de la conversation.
03
Envoi au serveur
Les arguments construits sont envoyés tels quels au serveur, sans validation côté client contre le schéma déclaré.
04
Validation puis exécution
Le serveur, lancé par Claude Code en processus enfant via stdio, valide lui même les arguments reçus contre son schéma avant d'exécuter le code et de renvoyer un résultat sur sa sortie standard.
La séquence montre les quatre étapes qui séparent une demande formulée dans la conversation de l'exécution réelle du code du serveur.
Calibrez vous-même

Un ingénieur enregistre un serveur MCP maison avec claude mcp add --transport stdio compteur -- node ./serveurs/compteur.js, dont le seul outil déclaré exige un argument texte de type chaîne. Il demande ensuite à Claude de compter les mots d'un nombre entier qu'il tape directement dans la conversation.

Écrivez en une phrase ce que cette situation établit, et en une phrase ce qu'elle n'établit pas.

Ce qu’il faut retenir
  • Un serveur MCP maison est un programme ordinaire lancé en processus enfant par Claude Code via le transport stdio, sans jamais ouvrir de port réseau.
  • Le double tiret dans la commande claude mcp add sépare les options de Claude Code, --transport et --env, de la commande et des arguments transmis tels quels au serveur.
  • Un schéma JSON, dans le champ inputSchema, déclare les arguments valides d'un outil, mais c'est au code du serveur, jamais au client, que la spécification impose de valider chaque appel reçu.
  • La description d'un outil, pas son schéma, décide si Claude le choisit pour une tâche donnée, exactement comme pour une skill.
À faire maintenant

Écrivez, dans un fichier texte de votre poste, le schéma JSON d'un outil imaginaire à un seul argument obligatoire, en vous inspirant de l'exemple de cette leçon, sans l'enregistrer auprès de Claude Code.

Vérifier à la source

Chaque affirmation datable de cette leçon renvoie ici au texte public qui la porte. Une source qui ne s’ouvre pas ne prouve rien.