Aller au contenu principal

Types de messages JSON

Le MCP (Model Context Protocol) utilise des messages JSON pour gérer la communication entre clients et serveurs. Comprendre ces types de messages est crucial pour travailler avec MCP, en particulier quand vous utilisez différentes méthodes de transport comme le transport StreamableHTTP.

Format des messages

Toute la communication MCP se fait via des messages JSON. Chaque type de message sert un objectif spécifique — qu’il s’agisse d’appeler un outil, de lister des ressources disponibles, ou d’envoyer des notifications sur des événements système.

Exemple typique : quand Claude doit appeler un outil fourni par un serveur MCP, le client envoie un message “Call Tool Request”. Le serveur traite cette requête, exécute l’outil, et répond avec un message “Call Tool Result” contenant le résultat.

La spécification MCP

La liste complète des types de messages est définie dans le dépôt officiel de spécification MCP sur GitHub. Cette spécification est séparée des différents dépôts SDK (Python, TypeScript, etc.) et constitue la source de référence pour le fonctionnement de MCP.

Les types de messages sont écrits en TypeScript pour leur clarté — pas parce qu’ils sont exécutés comme code TypeScript, mais parce que TypeScript fournit un moyen clair de décrire les structures de données et les types.

Catégories de messages

Les messages MCP se divisent en deux catégories principales :

Messages Requête-Résultat

Ces messages viennent toujours par paires. Vous envoyez une requête et attendez un résultat en retour :

RequêteRésultat
CallToolRequestCallToolResult
ListPromptsRequestListPromptsResult
ReadResourceRequestReadResourceResult
InitializeRequestInitializeResult
ListRootsRequestListRootsResult
CreateMessageRequest (sampling)CreateMessageResult

Messages de Notification

Ces messages sont unidirectionnels — ils informent sur des événements mais ne nécessitent pas de réponse :

NotificationSource
ProgressNotificationMises à jour sur les opérations longues
LoggingMessageNotificationMessages de log système
ToolListChangedNotificationQuand les outils disponibles changent
ResourceUpdatedNotificationQuand des ressources sont modifiées
InitializedNotificationConfirmation d’initialisation du client

Messages Client vs Serveur

La spécification MCP organise les messages selon qui les envoie :

Messages clients → requêtes que les clients envoient aux serveurs (appels d’outils) et notifications que les clients peuvent envoyer.

Messages serveurs → requêtes que les serveurs envoient aux clients (ex: sampling via CreateMessageRequest) et notifications que les serveurs diffusent.

Pourquoi c’est important

Comprendre que les serveurs peuvent envoyer des messages aux clients est particulièrement important quand vous travaillez avec différentes méthodes de transport. Certains transports, comme le transport StreamableHTTP, ont des limitations sur les types de messages pouvant circuler dans chaque direction.

L’insight clé : MCP est conçu comme un protocole bidirectionnel — clients et serveurs peuvent tous deux initier la communication. C’est crucial quand vous choisissez la méthode de transport appropriée pour votre cas d’usage spécifique.

Dans les prochaines leçons, nous examinerons comment les deux transports principaux — STDIO et StreamableHTTP — gèrent cette communication bidirectionnelle.