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ête | Résultat |
|---|---|
CallToolRequest | CallToolResult |
ListPromptsRequest | ListPromptsResult |
ReadResourceRequest | ReadResourceResult |
InitializeRequest | InitializeResult |
ListRootsRequest | ListRootsResult |
CreateMessageRequest (sampling) | CreateMessageResult |
Messages de Notification
Ces messages sont unidirectionnels — ils informent sur des événements mais ne nécessitent pas de réponse :
| Notification | Source |
|---|---|
ProgressNotification | Mises à jour sur les opérations longues |
LoggingMessageNotification | Messages de log système |
ToolListChangedNotification | Quand les outils disponibles changent |
ResourceUpdatedNotification | Quand des ressources sont modifiées |
InitializedNotification | Confirmation 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.