- MCP (Model Context Protocol) fournit une méthode d’intégration standardisée permettant aux LLM d’interagir avec le monde extérieur
- Des standards similaires comme ACP d’IBM et A2A de Google ont récemment émergé, tandis que les implémentations de MCP et les outils associés se multiplient rapidement
- Toutefois, des pratiques d’ingénierie encore immatures sont pointées du doigt, notamment une conception confuse, une documentation insuffisante et l’absence de véritables spécifications de protocole
- Les modes de transport actuellement proposés, comme HTTP+SSE et Streamable HTTP, accroissent la complexité et les problèmes de sécurité, et l’usage de WebSocket est recommandé comme alternative
- Les protocoles les plus récents ajoutent aussi une complexité excessive et incohérente autour de l’autorisation et de la gestion des sessions
Examen du MCP et des évolutions récentes
- MCP est un protocole ouvert conçu pour standardiser la manière dont les applications fournissent du contexte aux grands modèles de langage (LLM)
- Depuis un mois, MCP s’impose rapidement comme un standard clé pour transformer les LLM en agents, avec une adoption et des implémentations en forte accélération
- Des standards plus orthodoxes poursuivant des objectifs similaires apparaissent aussi rapidement, comme ACP d’IBM ou A2A de Google
Problèmes de pratiques d’ingénierie et de spécification du protocole
- Le faible niveau des implémentations réelles et de la documentation apparaît à de nombreux endroits
- Les grandes entreprises technologiques investissent massivement dans l’entraînement des modèles, mais leurs SDK et leur documentation restent souvent médiocres, ce qui crée de la confusion chez les utilisateurs
- MCP montre lui aussi des problèmes comparables, avec certaines décisions de conception peu rationnelles et un manque de spécifications, d’exemples et de lignes directrices
Discussion sur les protocoles de transport
Mode de transport stdio
- Stdio est la méthode traditionnelle consistant à relier directement, en local, un serveur MCP et un client via des pipes (
stdout, stdin)
- Cette approche réduit les traitements complexes liés aux sockets et les problèmes dépendants de l’OS, tout en permettant une configuration d’environnement simple via les variables d’environnement et les flux d’entrée/sortie
Modes HTTP+SSE / Streamable HTTP
- Dans l’idée de s’adapter à l’ère du web, les approches HTTP+SSE et Streamable HTTP ont été adoptées pour les usages basés sur HTTP
- Mais au lieu de remplacer WebSocket, ces approches introduisent davantage d’ambiguïtés, de confusion de conception et de complexité
- Une même session et une même connexion peuvent être créées ou fermées de plusieurs façons, ce qui impose une lourde charge au serveur en matière de gestion d’état et de sécurité
Difficultés observées dans les implémentations serveur/client MCP
- Le manque de support est particulièrement visible dans plusieurs langages, notamment avec l’absence d’un SDK Go officiel
- La documentation et les spécifications étant floues, il faut souvent implémenter en passant par de la rétro-ingénierie
- Bien que la plupart des serveurs d’exemple soient basés sur Python et JavaScript, les problèmes de dépendances et de portabilité compliquent leur adoption en environnement de production
- Lors de l’implémentation d’un serveur, SSE/Streamable HTTP tente d’imiter les sockets, mais en pratique il est difficile de maintenir de façon cohérente les sessions et l’état des connexions, et une infrastructure séparée comme une file de messages devient nécessaire
Structure et problèmes de HTTP+SSE et de Streamable HTTP
Mode HTTP+SSE
- Le client ouvre une session SSE avec le serveur puis envoie ses requêtes d’écriture vers un endpoint distinct ; le serveur répond alors avec un code 202 et transmet la réponse via la connexion SSE existante
- Cela exige la gestion des sessions et la synchronisation de l’état, mais la documentation sur ce processus est insuffisante et la complexité opérationnelle très élevée
Mode Streamable HTTP
- La création de session, l’ouverture de SSE et la transmission des réponses s’y mélangent selon plusieurs variantes, si bien qu’un même flux requête-réponse manque de cohérence
- La coexistence de multiples mécanismes de gestion d’état, de divers endpoints et de différentes méthodes via les headers crée un obstacle majeur à l’implémentation réelle et à l’extensibilité
Implications générales
- Avec l’augmentation de la complexité technique, la charge cognitive et de maintenance pour les développeurs augmente, et des problèmes de compatibilité incohérente et de comportements imprévisibles apparaissent entre les différentes implémentations serveur et client
- Le serveur doit suivre l’ensemble des états et des situations de connexion, et dans un environnement distribué il devient encore plus difficile d’assurer une montée en charge efficace et une synchronisation de l’état
Implications de sécurité
- La diversité et la granularité des modes de connexion et de session augmentent les vulnérabilités de sécurité liées à la gestion d’état, comme le détournement de session, les attaques par rejeu et le déni de service (DoS)
- La multiplication des points d’entrée et des modes de réponse élargit la surface d’attaque et peut permettre de dissimuler des activités malveillantes dans des flux inattendus
Confusion autour du protocole de gestion des autorisations
- La spécification actuelle applique des règles incohérentes, par exemple en imposant OAuth2 uniquement pour le transport HTTP, tandis qu’en STDIO elle laisse l’usage de variables d’environnement au libre choix de l’implémentation
- Il existe donc une confusion et une incohérence, notamment sur la raison pour laquelle seul le transport HTTP impose une implémentation complexe d’OAuth2
Pistes d’amélioration
- Il faudrait simplifier autour d’un unique protocole JSON RPC, avec comme transports principaux Stdio et WebSocket
- Une approche souhaitable consisterait à faire correspondre les variables de l’environnement Stdio aux headers dans l’environnement HTTP, et les entrées/sorties aux flux bidirectionnels de WebSocket
- Cela permettrait d’éliminer le suivi de session inutile, la gestion d’état superflue et la multitude de traitements d’exception
- WebSocket devrait devenir l’option standard pour tous les transports basés sur HTTP, ce qui permettrait aussi de résoudre les problèmes complexes de synchronisation d’état
Comparaison avec les protocoles alternatifs et tendances du marché
- ACP d’IBM et A2A de Google offrent, pour l’interopérabilité entre agents, une conception du transport plus simple ainsi que des fonctions de découverte d’agents
- Mais dans le fond, ils restent pour la plupart au niveau d’outils séparés pouvant être intégrés dans un environnement construit autour de MCP
- Comme l’apparition continue de nouveaux protocoles risque d’aboutir à une prolifération des standards, il est important pour la croissance du secteur de privilégier avant tout la simplicité du transport
1 commentaires
Avis Hacker News
agents.jsonà la racine web et de laisser les agents se débrouiller via une conversation sémantique automatique ; au final, HTTP deviendrait l’entrée/sortie standard des agents