Aller au contenu principal

Le transport StreamableHTTP

Le transport StreamableHTTP permet aux clients MCP de se connecter à des serveurs hébergés à distance via des connexions HTTP. Contrairement au transport STDIO qui nécessite client et serveur sur la même machine, ce transport ouvre la possibilité de serveurs MCP publics auxquels n’importe qui peut accéder.

Cependant, il y a une mise en garde importante : certains paramètres de configuration peuvent significativement limiter les fonctionnalités de votre serveur MCP. Si votre application fonctionne parfaitement avec le transport STDIO en local mais se casse lors du déploiement avec le transport HTTP, c’est probablement la cause.

Paramètres de configuration importants

Deux paramètres clés contrôlent le comportement du transport StreamableHTTP :

ParamètrePar défautImpact
stateless_httpFalseContrôle la gestion de l’état de connexion
json_responseFalseContrôle la gestion du format de réponse

Par défaut, les deux sont False. Certains scénarios de déploiement peuvent vous forcer à les mettre à True. Quand ils sont activés, ces paramètres peuvent casser les fonctionnalités essentielles comme les notifications de progression, les logs, et les requêtes initiées par le serveur.

Le défi de la communication HTTP

Pour comprendre pourquoi ces limitations existent, rappelons comment fonctionne la communication HTTP standard :

✅ Client → Serveur : facile (le serveur a une URL connue)
✅ Serveur → Client : facile (réponse à une requête existante)
❌ Serveur → Client (initié) : difficile (le client n'a pas d'URL connue)
❌ Client → Serveur (réponse) : problématique

Types de messages MCP affectés

Cette limitation HTTP impacte des patterns de communication MCP spécifiques. Les types de messages suivants deviennent difficiles à implémenter avec du HTTP simple :

Requêtes initiées par le serveur :

  • CreateMessageRequest (sampling)
  • ListRootsRequest

Notifications :

  • ProgressNotification
  • LoggingMessageNotification
  • InitializedNotification
  • CancelledNotification

Ce sont exactement les fonctionnalités qui se cassent quand vous activez les paramètres HTTP restrictifs. Les barres de progression disparaissent, les logs s’arrêtent, et les requêtes de sampling initiées par le serveur échouent.

La solution StreamableHTTP

Le transport StreamableHTTP fournit une solution intelligente pour contourner les limitations d’HTTP, mais avec des compromis. Quand vous êtes forcé d’utiliser stateless_http=True ou json_response=True, vous dites essentiellement au transport d’opérer dans les contraintes d’HTTP plutôt que de les contourner.

Décisions à prendre

Comprendre ces limitations vous aide à :

  1. Choisir le bon transport pour différents scénarios de déploiement
  2. Concevoir votre serveur MCP pour gérer gracieusement les contraintes HTTP
  3. Accepter les compromis de fonctionnalités réduites vs les avantages de l’hébergement distant

La leçon suivante explique en détail comment StreamableHTTP utilise les Server-Sent Events (SSE) pour contourner les limitations d’HTTP et permettre une communication bidirectionnelle.