Zum Inhalt springen
Tutorial

MCP SSE veraltet: Migrieren Sie zu Streamable HTTP, bevor Ihr Server ausfällt

| 8 min read

Der MCP-SSE-Transport hat am 1. April 2026 das Ende seiner Lebensdauer erreicht. Migrieren Sie zu Streamable HTTP mit einem zustandslosen Handler, einer neuen Instanz pro Anfrage und einem Sitzungswiederaufnahmepfad. Code für Node-, Python- und Cloudflare-Worker.

Data center with network switches representing stateless MCP transport
Photo by Taylor Vick on Unsplash

Der MCP Server-Sent Events-Transport hat am 1. April 2026 das Ende seiner Lebensdauer erreicht. Client-Bibliotheken sind weiterhin vorhanden liefert SSE-Unterstützung für Abwärtskompatibilität, jedoch die nächste Nebenversion des Basisprotokolls entfernt es und die öffentliche MCP-Registrierung lehnt jetzt neue reine SSE-Einträge ab. Wenn Ihr MCP-Server immer noch Antworten auf /sse Und /messages, Sie haben ein Migrationsfenster, nicht ein ewiges Fenster.

SSE hielt pro Client eine TCP-Verbindung offen. Zwei Kopien Ihres MCP-Servers hinter einer Last Balancer produzierte Split-Brain-Sitzungen; Die horizontale Skalierung erforderte am meisten Sticky-Routing Verwaltete Lastausgleichsfunktionen können nicht sauber ausgedrückt werden. Streamable HTTP verwendet Standard-Request-Response Zyklen mit optional fortsetzbaren Streams, was bedeutet, dass jede Instanz jede Anfrage beantworten kann und Jedes CDN auf der Welt weiß bereits, wie es zwischengespeichert und weitergeleitet wird.

Hier ist der vollständige Migrationspfad: der Vorher-Nachher-Servercode, ein Datenspeichermuster für Stateful-Tools, eine Cloudflare Workers-Implementierung, ein FastAPI-Äquivalent und a .well-known Metadatendatei, damit Clients Ihren Server erkennen können, ohne eine öffnen zu müssen Verbindung zuerst.

Schritt 1: Löschen Sie den SSE-Handler

Der alte Code sieht so aus. Zwei Routen, eine im Prozessspeicher gehaltene Sitzungskarte und ein Transport Dadurch bleibt die Antwort offen, bis der Client die Verbindung trennt:

Jedes Problem mit SSE taucht in diesem Snippet auf. Der transports Karte ist nur für einen Prozess sichtbar; Starten Sie den Server neu und jede offene Sitzung stirbt. horizontal skalieren und Die Hälfte Ihrer Kunden erreicht einen Server, der noch nie von ihnen gehört hat. Reiß es raus.

Schritt 2: Streamable HTTP installieren

Der neue Handler ist kleiner. Eine Route beantwortet sowohl GET als auch POST; Jede Anfrage erzeugt eine neue Server- und Transportpaar; Der Garbage Collector bereinigt, wenn die Antwort geschlossen wird:

Drei Schlüssel sind wichtig. sessionIdGenerator: undefined Deaktiviert das Sitzungs-Pinning Der Transport ist völlig staatenlos. enableJsonResponse: true gibt einen einzelnen JSON zurück body für Werkzeuge, die keinen Fortschritt ausgeben, wodurch der Pfad schnell und zwischenspeicherbar bleibt. Der res.on("close") Die Bereinigung verhindert Socket-Lecks bei vorzeitiger Client-Trennung.

Schritt 3: Sitzungsstatus aus dem Prozessspeicher verschieben

Ein zustandsloser Handler bedeutet nicht, dass es sich um ein zustandsloses Produkt handelt. Lang laufende Tools müssen weiterhin melden Fortschritt über mehrere Anfragen hinweg. Fügen Sie diesen Status in Redis, ein dauerhaftes Objekt, DynamoDB oder ein Postgres; Lesen Sie es beim Eintritt und schreiben Sie es beim Verlassen:

Der Mcp-Session-Id Header, falls vorhanden, identifiziert die logische Sitzung; der Handler verwendet es als Datenspeicherschlüssel. A Last-Event-Id Header vom Client lässt die Transport setzt einen Stream nach einer Trennung fort, ohne den Tool-Aufruf neu zu starten. Beide Header sind optional; Zustandslose Tools können sie vollständig ignorieren.

Schritt 4: Serverlose Bereitstellung

Streamable HTTP macht das frei, was SSE blockiert hat: die Ausführung eines MCP-Servers auf Cloudflare Workers, AWS Lambda-, Vercel-Funktionen oder Flugmaschinen. Hier ist der vollständige Cloudflare Workers-Server in 40 Zeilen, die Botois IP-Lookup-Endpunkt als ein Beispieltool treffen:

Keine Sitzungskarte, keine Hintergrund-Timer, keine Keep-Alive-Pings. Der Arbeiter dreht sich bei Bedarf hoch und antwortet die Anforderung und wird heruntergefahren. Ein Worker verwaltet eine beliebige Anzahl paralleler Clients, da dies der Fall ist kein gemeinsamer veränderlicher Zustand. Kaltstarts für MCP-Server auf Workers dauern in den meisten Fällen weniger als 5 ms Werkzeugoberflächen; Bei Lambda sind sie 50 bis 200 ms kalt.

Schritt 5: Python-Migration mit FastAPI

Python-Server erhalten die gleiche Form. Der FastAPI-Handler erstellt den MCP-Server pro Anfrage und Beauftragte für den Transport:

Das Muster ist in allen Sprachen das gleiche: Erstellen Sie einen Server pro Anfrage und übergeben Sie die HTTP-Anfrage an den Transport, geben Sie alles zurück, was der Transport produziert. Die Laufzeiten der Sprachen sind unterschiedlich. die Architektur nicht.

Schritt 6: Veröffentlichen Sie eine Serverkarte zur Erkennung

Eine der Lücken, die die Roadmap 2026 schließt, ist Entdeckung ohne Verbindung. Register und Früher benötigten Crawler einen Live-Handshake, um zu erfahren, was Ihr Server tat. Stellen Sie ein JSON-Dokument bereit unter /.well-known/mcp/server-card.json und Kunden können die Transport-URL erfahren, Authentifizierungsschema und festgelegte Funktionen, bevor sie eine Verbindung herstellen:

Mit diesem Teil können Agentenplattformen Ihren Server indizieren, ohne ihn zu prüfen. Auth0 für Agenten, Cloudflare Agent Cloud und die öffentliche MCP-Registrierung nutzen alle dieses Format; füge es hinzu einmal und Ihr Server wird auflistbar.

Überprüfen Sie die Migration

Bevor Sie DNS umdrehen, führen Sie den Inspektor aus oder führen Sie einen Curl für den neuen Endpunkt durch. Die ersten Flächen a Benutzeroberfläche mit allen verfügbaren Tools und Ressourcen; Der zweite bestätigt, dass das Leitungsformat richtig ist:

Ein Erfolg tools/list Antwort mit Ihrem vollständigen Werkzeugkatalog bedeutet, dass der Server vorhanden ist leben. Wenn die Antwort als zurückkommt text/event-stream Wenn Sie JSON erwarten, ist das Transport hat enableJsonResponse deaktiviert; Drehen Sie die Flagge um.

Lassen Sie beide Transporte nach der Umstellung eine Woche lang auf unterschiedlichen Wegen laufen: /sse als der alte Zuhörer, /mcp als der Neue. Geben Sie alle eine Protokollzeile aus Zeit, zu der ein Client eine Verbindung herstellt /sse mit seinem User-Agent. Wenn das Protokoll still wird, Sie kann den alten Handler löschen. Die meisten Client-Bibliotheken haben zwischenzeitlich Streamable HTTP-Unterstützung bereitgestellt Dezember 2025 und Februar 2026; Erwarten Sie eine lange Reihe alter Cursor- und Claude Desktop-Installationen.

Was bleibt gleich, was ändert sich

Sorge SSE-Transport Streambares HTTP
Verbindungsmodell Eine langlebige pro Kunde Anfrage-Antwort, optionaler Stream
Lastausgleich Sticky-Sessions erforderlich Jede Instanz beantwortet jede Anfrage
Sitzungsstatus In-Prozess-Speicher Datenspeicher mit Sitzungs-ID verschlüsselt
Serverlose Passform Blockiert durch Verbindungsdauerbegrenzungen Einheimisch
Fortschrittsstreaming Standard Opt-in über den Accept-Header
Entdeckung Live-Handschlag /.well-known/mcp/server-card.json
Tool-Aufruf JSON-RPC über SSE-Frames JSON-RPC über HTTP-Body

Wichtige Erkenntnisse

  • SSE ist veraltet und wird nicht entfernt. Kunden akzeptieren es noch bis 2026, aber neu Server und Registrierungseinträge erfordern Streamable HTTP.
  • Bauen Sie auf Anfrage frisch auf. Keine In-Process-Session-Maps; Lassen Sie den Server Einspruch erheben leben nur so lange, wie der RPC dauert.
  • Status in einen Datenspeicher übertragen. Redis, Durable Objects oder Postgres eingegeben Mcp-Session-Id Kopfzeile.
  • Serverlos ist wieder auf dem Tisch. Cloudflare-Mitarbeiter, Lambda, Vercel Funktionen; Keiner von ihnen unterstützte die langlebige SSE gut.
  • Veröffentlichen Sie eine Serverkarte. /.well-known/mcp/server-card.json macht Ihr Server ist ohne Verbindung erkennbar.

Botois MCP-Server wird auf Streamable HTTP unter ausgeliefert api.botoi.com/mcp mit 49 kuratierten Tools für IP-Suche, E-Mail-Validierung, DNS, Hashing, JWT-Signierung und QR Generation. Die Quelle ist MIT-lizenziert und spiegelt das obige Muster wider; lies das Setup-Dokumente für Claude Desktop, Claude Code, Cursor, VS Code und Windsurf-Konfigurationen.

FAQ

Wird MCP SSE entfernt oder ist es einfach veraltet?
Ab dem 1. April 2026 veraltet; Aus Gründen der Abwärtskompatibilität gibt es in den Client-Bibliotheken weiterhin Laufzeitunterstützung, neue MCP-Server und Registrierungseinträge erfordern jedoch Streamable HTTP. Die Roadmap 2026 entfernt SSE in der nächsten Nebenversion vollständig aus dem Basisprotokoll; Beginnen Sie Ihre Migration jetzt und nicht mit der Entfernung.
Warum hat MCP SSE fallengelassen?
SSE hielt eine TCP-Verbindung pro Client offen und machte die horizontale Skalierung mühsam. Zwei identische SSE-Server hinter einem Round-Robin-Load-Balancer erzeugten Split-Brain-Sitzungen: Der auf Server A gespeicherte Tool-Status war für Server B unsichtbar. Streamable HTTP verwendet kurze Anfrage-Antwort-Zyklen mit optional fortsetzbaren Streams, sodass Load Balancer und CDNs jede Anfrage weiterleiten, ohne einen Client an eine Instanz zu heften.
Was ist Fresh-Instance-per-Request?
Jede eingehende Anfrage erstellt ein neues MCP-Serverobjekt, verarbeitet den RPC und verwirft die Instanz. Kein In-Memory-Status zwischen Anfragen. Status, der bestehen bleiben muss (Fortschrittstoken, Toolsitzungen), befindet sich in einem Datenspeicher, den der Handler beim Eintritt liest und beim Beenden schreibt. Auf diese Weise können Sie denselben Server auf einer serverlosen Plattform wie Cloudflare Workers oder AWS Lambda ausführen, ohne dass die Begrenzung der Verbindungsdauer auf 15 Minuten greift.
Benötige ich weiterhin WebSockets für die Ausgabe des Streaming-Tools?
Nein. Streamable HTTP enthält einen optionalen Stream im SSE-Stil in einer Standard-POST-Antwort für Tools, die Teilergebnisse ausgeben. Der Unterschied zum alten SSE besteht darin, dass der Stream innerhalb einer HTTP-Anfrage lebt und mit dem Tool-Aufruf endet. Sie lassen einen Socket zwischen Werkzeugaufrufen nicht offen.
Wie teste ich einen Streamable HTTP-Server lokal?
Verwenden Sie den offiziellen MCP-Inspektor (npx @modelcontextprotocol/inspector), der jetzt beide Transporte beherrscht. Oder fügen Sie dem Endpunkt einen JSON-RPC-Body und einen Accept: text/event-stream-Header hinzu. Sie sehen entweder eine einzelne JSON-Antwort oder einen Ereignisstream, je nachdem, ob das Tool den Fortschritt ausgibt. Die Sitzungswiederaufnahme kann mit den Headern „Mcp-Session-Id“ und „Last-Event-Id“ getestet werden.

Starte mit botoi zu entwickeln

150+ API-Endpunkte für Abfragen, Textverarbeitung, Bildgenerierung und Entwickler-Tools. Kostenloser Tarif, keine Kreditkarte nötig.