MCP SSE obsolète : migrez vers Streamable HTTP avant que votre serveur ne tombe en panne
Le transport MCP SSE a atteint la fin de sa durée de vie le 1er avril 2026. Migrez vers Streamable HTTP avec un gestionnaire sans état, une nouvelle instance par demande et un chemin de reprise de session ; code pour Node, Python et Cloudflare Workers.
Le transport des événements envoyés par le serveur MCP a atteint la fin de sa durée de vie le 1er avril 2026. Les bibliothèques clientes sont toujours
expédier le support SSE pour une compatibilité ascendante, mais la prochaine version mineure du protocole de base
le supprime et le registre public MCP rejette désormais les nouvelles inscriptions uniquement SSE. Si votre serveur MCP
répond toujours sur /sse et /messages, vous disposez d'une fenêtre de migration, non
une fenêtre éternelle.
SSE détenait une connexion TCP ouverte par client. Deux copies de votre serveur MCP derrière une charge l'équilibreur a produit des séances à cerveau divisé ; la mise à l'échelle horizontale nécessitait un routage collant que la plupart les équilibreurs de charge gérés ne peuvent pas s'exprimer proprement. HTTP streamable utilise une requête-réponse standard cycles avec des flux pouvant être repris en option, ce qui signifie que n'importe quelle instance peut répondre à n'importe quelle demande et tous les CDN du monde savent déjà comment le mettre en cache et le router.
Voici le chemin de migration complet : le code du serveur avant et après, un modèle de banque de données pour
des outils avec état, une implémentation Cloudflare Workers, un équivalent FastAPI et un
.well-known fichier de métadonnées afin que les clients puissent découvrir votre serveur sans ouvrir de fichier
connexion en premier.
Étape 1 : Supprimez le gestionnaire SSE
L'ancien code ressemble à ceci. Deux itinéraires, une carte de session conservée dans la mémoire du processus et un transport qui maintient la réponse ouverte jusqu'à ce que le client se déconnecte :
Chaque problème avec SSE apparaît dans cet extrait. Le transports La carte est seulement
visible pour un processus ; redémarrez le serveur et chaque session ouverte meurt ; échelle horizontale et
la moitié de vos clients accèdent à un serveur qui n’a jamais entendu parler d’eux. Arrachez-le.
Étape 2 : Installer HTTP diffusable
Le nouveau gestionnaire est plus petit. Une route répond à la fois à GET et POST ; chaque demande génère un nouveau paire serveur et transport ; le garbage collector nettoie à la fermeture de la réponse :
Trois clés comptent. sessionIdGenerator: undefined désactive l'épinglage de session afin
le transport est totalement apatride. enableJsonResponse: true renvoie un seul JSON
body pour les outils qui n'émettent pas de progression, ce qui maintient le chemin rapide et pouvant être mis en cache. Le
res.on("close") le nettoyage empêche les fuites de socket lors de la déconnexion précoce du client.
Étape 3 : Déplacer l'état de la session hors de la mémoire du processus
Un gestionnaire apatride ne signifie pas un produit apatride. Les outils qui fonctionnent depuis longtemps doivent encore rendre compte progresser sur plusieurs demandes. Mettez cet état dans Redis, un objet durable, DynamoDB ou Postgres ; lisez-le à l'entrée, écrivez-le à la sortie :
La Mcp-Session-Id l'en-tête, s'il est présent, identifie la session logique ; le gestionnaire
l'utilise comme clé de banque de données. UN Last-Event-Id l'en-tête du client permet au
le transport reprend un flux après une déconnexion sans redémarrer l'appel de l'outil. Les deux en-têtes sont
facultatif ; les outils apatrides peuvent les ignorer complètement.
Étape 4 : Déployer sans serveur
Streamable HTTP déverrouille ce que SSE a bloqué : exécuter un serveur MCP sur Cloudflare Workers, AWS Lambda, fonctions Vercel ou Fly Machines. Voici le serveur Cloudflare Workers complet en 40 lignes, en frappant le point de terminaison IP Lookup de Botoi comme exemple d'outil :
Pas de carte de session, pas de minuteries en arrière-plan, pas de pings de maintien. Le Worker démarre à la demande et répond la demande et s'arrête. One Worker gère un nombre illimité de clients parallèles car il existe pas d'état mutable partagé. Les démarrages à froid des serveurs MCP sur les Workers s'effectuent en moins de 5 ms pour la plupart surfaces d'outils ; sur Lambda, ils sont froids de 50 à 200 ms.
Étape 5 : migration Python avec FastAPI
Les serveurs Python ont la même forme. Le gestionnaire FastAPI construit le serveur MCP par requête et délégués au transport :
Le modèle est le même dans toutes les langues : créer un serveur par requête, transmettre la requête HTTP au transport, restituez tout ce que le transport produit. Les durées d'exécution des langues diffèrent ; l'architecture ce n'est pas le cas.
Étape 6 : Publier une carte de serveur pour la découverte
L’une des lacunes comblées par la feuille de route 2026 est la découverte sans connexion. Registres et
Les robots d'exploration avaient auparavant besoin d'une poignée de main en direct pour savoir ce que faisait votre serveur. Servir un document JSON à
/.well-known/mcp/server-card.json et les clients peuvent apprendre l'URL de transport,
schéma d'authentification et capacités définies avant leur connexion :
C'est l'élément qui permet aux plateformes d'agents d'indexer votre serveur sans le sonder. Auth0 pour Les agents, Cloudflare Agent Cloud et le registre public MCP consomment tous ce format ; ajoutez-le une fois et votre serveur devient listable.
Vérifier la migration
Avant d'inverser le DNS, exécutez l'inspecteur ou effectuez une boucle sur le nouveau point de terminaison. La première surface un Interface utilisateur avec chaque outil et ressource exposé ; le second confirme que le format du fil est correct :
Un succès tools/list réponse avec votre catalogue d'outils complet signifie que le serveur est
vivre. Si la réponse revient comme text/event-stream quand vous attendez JSON, le
le transport a enableJsonResponse désactivé; retournez le drapeau.
Laissez les deux transports fonctionner sur des chemins différents pendant une semaine après votre basculement :
/sse comme le vieil auditeur, /mcp comme le nouveau. Émettre une ligne de journal tous les
heure à laquelle un client se connecte /sse avec son user-agent. Lorsque le journal se tait, vous
peut supprimer l'ancien gestionnaire. La plupart des bibliothèques clientes ont fourni un support HTTP Streamable entre
décembre 2025 et février 2026 ; attendez-vous à une longue traîne d’anciennes installations de Cursor et Claude Desktop.
Ce qui reste pareil, ce qui change
| Préoccupation | Transports ESS | HTTP diffusable |
|---|---|---|
| Modèle de connexion | Un long terme par client | Requête-réponse, flux facultatif |
| Équilibrage de charge | Séances collantes requises | Toute instance répond à toute demande |
| État de la session | Mémoire en cours | Banque de données saisie sur l'ID de session |
| Ajustement sans serveur | Bloqué par les limites de durée de connexion | Indigène |
| Streaming de progression | Défaut | Inscription via l'en-tête Accepter |
| Découverte | Poignée de main en direct | /.well-known/mcp/server-card.json |
| Appel d'outil | JSON-RPC sur les trames SSE | JSON-RPC sur le corps HTTP |
Points clés à retenir
- SSE est obsolète et non supprimé. Les clients l’acceptent toujours jusqu’en 2026, mais nouveau les serveurs et les listes de registre nécessitent Streamable HTTP.
- Construire à nouveau par demande. Aucune cartographie de session en cours ; laissez le serveur objecter ne vit que le temps que dure le RPC.
-
Transférer l’état vers une banque de données. Redis, Objets durables ou Postgres saisis sur le
Mcp-Session-Iden-tête. - Le sans serveur est de retour sur la table. Travailleurs Cloudflare, Lambda, Vercel Fonctions ; aucun d’entre eux n’a bien soutenu l’ESS à long terme.
-
Publiez une carte de serveur.
/.well-known/mcp/server-card.jsonfait votre serveur détectable sans connexion.
Le serveur MCP de Botoi est livré sur Streamable HTTP à api.botoi.com/mcp avec 49 outils sélectionnés pour la recherche IP, la validation des e-mails, le DNS, le hachage, la signature JWT et le QR génération. La source est sous licence MIT et reflète le modèle ci-dessus ; lire le documents de configuration pour Configurations Claude Desktop, Claude Code, Cursor, VS Code et Windsurf.
FAQ
- MCP SSE est-il supprimé ou simplement obsolète ?
- Obsolète depuis le 1er avril 2026 ; La prise en charge de l'exécution existe toujours dans les bibliothèques clientes pour une compatibilité ascendante, mais les nouveaux serveurs MCP et les listes de registre nécessitent Streamable HTTP. La feuille de route 2026 supprime entièrement SSE du protocole de base dans la prochaine version mineure ; commencez votre migration maintenant plutôt qu'au moment de la suppression.
- Pourquoi MCP a-t-il abandonné SSE ?
- SSE maintenait une connexion TCP ouverte par client et rendait la mise à l'échelle horizontale pénible. Deux serveurs SSE identiques derrière un équilibreur de charge à tour de rôle ont produit des sessions split-brain : l'état de l'outil stocké sur le serveur A était invisible pour le serveur B. Le HTTP streamable utilise des cycles de requête-réponse courts avec des flux pouvant être repris en option, de sorte que les équilibreurs de charge et les CDN acheminent chaque requête sans épingler un client à une instance.
- Qu’est-ce qu’une nouvelle instance par requête ?
- Chaque requête entrante construit un nouvel objet serveur MCP, gère le RPC et supprime l'instance. Aucun état en mémoire entre les requêtes. L'état qui doit persister (jetons de progression, sessions d'outils) réside dans une banque de données que le gestionnaire lit à l'entrée et écrit à la sortie. Cela vous permet d'exécuter le même serveur sur une plate-forme sans serveur comme Cloudflare Workers ou AWS Lambda sans la limite de durée de connexion de 15 minutes.
- Ai-je toujours besoin de WebSockets pour la sortie de l'outil de streaming ?
- Non. Streamable HTTP inclut un flux facultatif de style SSE dans une réponse POST standard pour les outils qui émettent des résultats partiels. La différence avec l'ancien SSE est que le flux réside dans une requête HTTP et se termine par l'appel de l'outil. Vous ne gardez pas de socket ouvert entre les appels d’outils.
- Comment tester localement un serveur HTTP Streamable ?
- Utilisez l'inspecteur MCP officiel (npx @modelcontextprotocol/inspector) qui parle désormais les deux transports. Ou bouclez le point de terminaison avec un corps JSON-RPC et un en-tête Accept: text/event-stream ; vous verrez soit une seule réponse JSON, soit un flux d'événements selon que l'outil émet ou non une progression. La reprise de session est testable avec les en-têtes Mcp-Session-Id et Last-Event-Id.
Commencez a construire avec botoi
150+ endpoints API pour la recherche, le traitement de texte, la generation d'images et les utilitaires pour developpeurs. Offre gratuite, sans carte bancaire.