Zurück zur Bibliothek
Architektur

WebSocket vs SSE für die Agent-Kommunikation: Warum MCP keines von beiden wählte

Zuletzt aktualisiert: 2026年9月11日

Kernpunkte

  • Die MCP-Spezifikation 2026-07-28 hat HTTP+SSE verworfen und durch Streamable HTTP ersetzt — nicht WebSocket — weil zustandslose Server mit Standard-HTTP-Infrastruktur (WAFs, Load Balancer, Auth-Proxys) ohne Verwaltung dauerhafter Verbindungen funktionieren (MCP specification).
  • A2A verwendet JSON-RPC 2.0 über HTTP mit SSE für Task-Ausgabestreaming — der Transport ist Verkabelung; die Protokollsemantik (Task-Lebenszyklus, INPUT_REQUIRED-Zustand) ist es, was die Agent-zu-Agent-Kommunikation funktionieren lässt (A2A protocol).
  • CVE-2026-16496 (CVSS 10.0) in Terraform MCP exploitte den zustandsbehafteten SSE-Transportmodus — eine gestohlene Sitzungs-ID ermöglichte es einem Angreifer, Tool-Aufrufe mit den Anmeldeinformationen eines anderen Benutzers auszuführen. Zustandsloser Transport eliminiert die Angriffsfläche auf Architekturebene, nicht auf Patch-Ebene (NVD).
  • WebSocket ist als benutzerdefinierter MCP-Transport verfügbar, fügt aber eine Sitzungsverwaltungskomplexität hinzu, die die Spezifikationsautoren bewusst vermieden — das Protokoll ist transportagnostisch, aber die Standardtransporte (stdio, Streamable HTTP) decken die Produktionsfälle ab (MCP specification).
  • Die AGNTCon+MCPCon-Europe-Session „Stateless: The Future of MCP Transports" am 17. September 2026 ist die erste große Konferenzvalidierung der zustandslosen Transporthrichtung — präsentiert von Google und Hugging Face, den Maintainern der MCP Transport Working Group (Linux Foundation).

Die Transportfrage klingt nach Infrastruktur-Verkabelung, und das ist sie — aber die Wahl hat Sicherheits-, Skalierbarkeits- und Betriebskonsequenzen, die in der Produktion sichtbar werden. Als das Model Context Protocol am 28. Juli 2026 HTTP+SSE verwarf und durch Streamable HTTP ersetzte, trafen die Spezifikationsautoren eine bewusste Engineering-Entscheidung: zustandslose Server statt dauerhafte Verbindungen, Standard-HTTP statt benutzerdefinierte Protokolle, und ein einzelner Endpunkt statt des Dual-Endpoint-SSE-Modells. Sie wählten nicht WebSocket, obwohl WebSocket bidirektional ist und SSE nicht. Der Grund ist nicht, dass WebSocket falsch ist — sondern dass für die spezifische Arbeitslast, die MCP bedient (Tool-Aufrufe zwischen einem Agenten und einer Datenquelle), die bidirektionale Fähigkeit den Sitzungsverwaltungsaufwand nicht wert ist.

Dieser Artikel mappt die drei Transportoptionen — SSE, WebSocket und Streamable HTTP — gegen die beiden Agentenprotokolle, die sie verwenden (MCP und A2A), mit einer Entscheidungsmatrix für B2B-Agent-Deployments. Die AGNTCon-Session am 17. September macht das Timing konkret: Der zustandslose Transport bewegt sich von der Spezifikation zur Konferenzvalidierung, und Teams, die den verworfenen SSE-Transport ausführen, haben ein 12-Monats-Migrationsfenster, von dem bereits zwei Monate verstrichen sind.

Die drei Transporte und was jeder tut

SSE (Server-Sent Events) — der verworfene Standard

SSE ist ein unidirektionales Protokoll: Der Server pusht Daten an den Client über eine langlebige HTTP-Verbindung, und der Client kann keine Nachrichten über dieselbe Verbindung zurücksenden. Jede Client-Aktion — eine Generierung abbrechen, einen Agenten während einer Aufgabe lenken, einen Tool-Aufruf genehmigen — erfordert eine separate HTTP-POST-Anfrage (WebSocket.org).

MCP verwendete SSE in seiner Spezifikation 2024-11-05 als Transport für Remote-Server. Das Modell erforderte zwei Endpunkte: einen SSE-Endpunkt für Server-zu-Client-Nachrichten und einen separaten POST-Endpunkt für Client-zu-Server-Nachrichten. Der Server hielt den Sitzungsstatus über beide Verbindungen aufrecht. Drei Einschränkungen führten zur Verwerfung: keine Unterstützung für wiederaufnehmbare Streams, die Anforderung langlebiger hochverfügbarer Verbindungen und Server-Nachrichten, die nur über SSE geliefert wurden (MCP specification PR #206).

A2A verwendet weiterhin SSE für seinen Streaming-Modus. Die SendStreamingMessage-Methode liefert Task-Updates als SSE-Ereignisse — Token-Deltas, Artefakt-Chunks, Zustandsübergänge. Dies ist die richtige Wahl für A2A, weil das Streaming unidirektional ist (Server zu Client) und die Steuerungsnachrichten des Clients (Abbrechen, Abonnieren) über separate JSON-RPC-Aufrufe laufen (A2A protocol). SSE ist einfach, funktioniert über Standard-HTTP und erfordert nicht WebSockets Sitzungsverwaltung für eine Arbeitslast, die grundlegend Server-Push ist.

WebSocket — die bidirektionale Option, die MCP nicht standardisierte

WebSocket bietet eine dauerhafte, bidirektionale Verbindung zwischen Client und Server. Nach einem HTTP-Upgrade-Handshake bleibt die Verbindung offen und beide Seiten können jederzeit Nachrichten senden. Dies ist das richtige Primitive für Anwendungen, die echte bidirektionale Kommunikation auf einem einzigen Kanal benötigen: Chat, kollaborative Bearbeitung, Multiplayer-Spiele, Trading-Dashboards (Ably).

Für KI-Agenten ist der bidirektionale Fall real. Agenten-Workflows benötigen Client-zu-Server-Nachrichten während der Ausführung: eine Generierung abbrechen, einen Agenten während einer Aufgabe lenken, einen Tool-Aufruf genehmigen oder ablehnen, Folgekontext senden. Mit SSE ist jede dieser Aktionen eine separate HTTP-Anfrage. Mit WebSocket reisen sie auf derselben Verbindung wie der Token-Stream (WebSocket.org).

Die MCP-Spezifikation standardisiert WebSocket nicht. Es ist als benutzerdefinierter Transport verfügbar — die Spezifikation sagt, dass „Clients und Server zusätzliche benutzerdefinierte Transportmechanismen implementieren DÜRFEN", solange sie das JSON-RPC-Nachrichtenformat bewahren — aber die Standardtransporte sind stdio (für lokale Server) und Streamable HTTP (für Remote-Server) (MCP specification). Ein GitHub-Issue (#493) schlug vor, WebSocket als Standardtransport hinzuzufügen, um das HTTP-Modell zu vereinfachen; es wurde ohne Übernahme geschlossen, und die Spezifikation wechselte stattdessen zu Streamable HTTP (GitHub).

Der Grund, warum MCP WebSocket nicht standardisierte, ist betrieblich, nicht technisch. WebSocket erfordert, dass der Server dauerhafte Verbindungen aufrechterhält, die Sitzungsgesundheit verwaltet, Wiederverbindungslogik handhabt und mit unterbrochenen Verbindungen umgeht. Dies ist dieselbe zustandsbehaftete Verbindungslast, die SSE zu einer Belastung machte. Die MCP-Autoren wollten zustandslose Server — jede Instanz kann jede Anfrage bearbeiten, kein gemeinsamer Sitzungsspeicher, einfaches Round-Robin-Load-Balancing — und WebSockets dauerhaftes Verbindungsmodell arbeitet gegen dieses Ziel.

Streamable HTTP — was MCP stattdessen wählte

Streamable HTTP ist die Antwort der MCP-Spezifikation auf die SSE-vs-WebSocket-Frage. Der Server stellt einen einzelnen HTTP-Endpunkt (z. B. https://example.com/mcp) bereit, der sowohl POST als auch GET verarbeitet. Der Client sendet jede JSON-RPC-Nachricht als POST. Der Server kann mit einem einfachen JSON-Body antworten oder die Antwort auf einen SSE-Stream upgraden, wenn das Ergebnis langlebig ist. Die wichtigste Designentscheidung: Der Server muss keine dauerhafte Verbindung aufrechterhalten. Jede Anfrage ist in sich geschlossen (MCP specification).

Dies gibt MCP die Streaming-Fähigkeit von SSE ohne die Anforderung langlebiger Verbindungen und die bidirektionale Fähigkeit von WebSocket ohne den Sitzungsverwaltungsaufwand. Der Client sendet Nachrichten via POST (Standard-HTTP), der Server streamt Antworten via optionalem SSE (Standard-HTTP), und der Server kann zustandslos sein (Standard-HTTP-Infrastruktur) (Bright Data; Auth0).

Das Sicherheitsargument ist konkret. Auth0s Analyse: Mit Streamable HTTP „können wir einen Standard-`Authorization: ***-Header auf jeden einzelnen Umschlag stempeln. Die Poststelle prüft den Stempel auf jeder Nachricht, nicht nur auf der ersten." Beim alten SSE-Transport wurde das Authentifizierungs-Token einmal zum Verbindungszeitpunkt eingerichtet und die dauerhafte Verbindung trug alle nachfolgenden Nachrichten — einschließlich Nachrichten von einem Angreifer, der die Sitzungs-ID gestohlen hatte (Auth0).

Die Entscheidungsmatrix

Kriterium SSE (verworfen) WebSocket (benutzerdefiniert) Streamable HTTP (MCP-Standard)
Richtung Nur Server → Client Bidirektional Client → Server via POST; Server → Client via optionalem SSE
Verbindungsmodell Langlebig, dauerhaft Langlebig, dauerhaft Pro Anfrage (zustandslos)
Serverzustand Zustandsbehaftet (Sitzung pro Verbindung) Zustandsbehaftet (Sitzung pro Verbindung) Zustandslos (keine Sitzung zwischen Anfragen)
Load Balancing Sticky Sessions erforderlich Sticky Sessions erforderlich Einfaches Round-Robin
Skalierung Begrenzt (Verbindung pro Client) Begrenzt (Verbindung pro Client) Hoch (jede HTTP-Infrastruktur)
Authentifizierung Zum Verbindungszeitpunkt Zum Handshake-Zeitpunkt Pro Anfrage (Bearer auf jedem POST)
Wiederaufnehmbarkeit Nein Nein Nein (aber zustandslos bedeutet keine Sitzung zum Wiederaufnehmen)
Infrastruktur Benötigt SSE-fähigen Proxy Benötigt WebSocket-fähigen Proxy Standard-HTTP (WAFs, LBs, CDN, Auth-Proxys)
Angriffsfläche Sitzungs-ID-Diebstahl (CVE-2026-16496) Sitzungs-Hijacking auf dauerhafter Verbindung Keine auf Transportschicht (keine Sitzung zu stehlen)
MCP-Status Verworfen, 12-Monate-Sunset Benutzerdefinierter Transport (nicht standardisiert) Standard-Remote-Transport seit 2026-03-26
A2A-Status Für Streaming-Modus verwendet Nicht verwendet Nicht verwendet (A2A verwendet JSON-RPC über HTTP + SSE)
Am besten für Einfacher Server-Push (A2A-Task-Streaming) Echte Bidirektionalität (Chat, Kollaboration) Agent-zu-Tool-Aufrufe (MCP)

Die Tabelle beantwortet die Frage, die sich die meisten B2B-Teams stellen: Wenn Ihr Agent ein Tool auf einem entfernten MCP-Server aufrufen muss, verwenden Sie Streamable HTTP. Wenn Ihr Agent die Ausgabe einer Aufgabe an einen anderen Agenten streamen muss, verwenden Sie den SSE-Streaming-Modus von A2A. Wenn Sie eine Echtzeit-Kollaborationsschnittstelle bauen, bei der der Client genauso oft Nachrichten sendet wie der Server, ist WebSocket das richtige Primitiv — aber es ist ein benutzerdefinierter Transport, kein Protokollstandard.

Die drei Transporte im Vergleich:

WebSocket vs SSE vs Streamable HTTP für die Agent-Kommunikation MCP hat SSE verworfen und Streamable HTTP gewählt. Weder WebSocket noch SSE haben gewonnen. SSE Server-Sent Events VERWORFEN in MCP 12-Monate-Sunset (endet Juli 2027) Richtung Nur Server → Client Verbindung Langlebig, dauerhaft Serverzustand Zustandsbehaftet (Sitzung pro Verbindung) Load Balancing Sticky Sessions erforderlich Authentifizierung Nur zum Verbindungszeitpunkt Angriffsfläche Sitzungs-ID-Diebstahl (CVE-2026-16496) Verwendet von A2A-Streaming (weiterhin gültig) AM BESTEN FÜR A2A-Task-Fortschritts-Streaming WebSocket Bidirektional, dauerhaft BENUTZERDEFINIERTER TRANSPORT in MCP Nicht standardisiert; Spezifikation erlaubt es Richtung Bidirektional (Vollduplex) Verbindung Langlebig, dauerhaft Serverzustand Zustandsbehaftet (Sitzung pro Verbindung) Load Balancing Sticky Sessions erforderlich Authentifizierung Zum Handshake-Zeitpunkt Angriffsfläche Sitzungs-Hijacking auf dauerhafter Verb. Verwendet von Benutzerdefinierte Agent-Implementierungen AM BESTEN FÜR Echte Bidirektionalität: Chat, Kollaboration Streamable HTTP MCP-Standard seit 2026-03-26 MCP-STANDARDTRANSPORT Zustandslos, einzelner Endpunkt Richtung POST (Client→Server) + optionales SSE Verbindung Pro Anfrage (zustandslos) Serverzustand Zustandslos (keine Sitzung zwischen Anfr.) Load Balancing Einfaches Round-Robin Authentifizierung Pro Anfrage (Bearer auf jedem POST) Angriffsfläche Keine auf Transportschicht Verwendet von MCP (alle Remote-Server) AM BESTEN FÜR Agent-zu-Tool-Aufrufe (MCP) MCP wählte Streamable HTTP — nicht WebSocket, nicht SSE — für zustandslose Server. CVE-2026-16496 (CVSS 10.0) bewies, dass der zustandsbehaftete Transport ein Sicherheitsrisiko war.

Die Sicherheitsdimension — warum Zustandslosigkeit wichtig ist

Der CVE, der die Wahl des zustandslosen Transports validierte, ist CVE-2026-16496, eine CVSS-10.0-Autorisierungs-Bypass im Terraform MCP Server von HashiCorp. Die Schwachstelle betraf den zustandsbehafteten Streamable-HTTP-Transportmodus: Ein Benutzer, der die MCP-Sitzungs-ID eines anderen Benutzers erlangte, konnte Tool-Aufrufe mit den Terraform-Anmeldeinformationen dieses Benutzers ausführen lassen. Der Angriffsvektor existiert nur, weil der Server einen Sitzungsstatus hält, den ein Angreifer stehlen und wiederverwenden kann. Ein zustandsloser Server hat keine Sitzung zu stehlen (NVD; The Hacker News).

Dies ist der Produktionsbeweis, dass der zustandsbehaftete Transportmodus ein Sicherheitsrisiko ist, nicht nur eine betriebliche Komplexität. Das 12-Monate-SSE-Verwerfungsfenster ist nun eine Sicherheitsfrist, nicht nur eine betriebliche. Die 1.227 Server, die noch den verworfenen HTTP+SSE-Transport ausführen, sind die am stärksten betroffene Population — und die Population, die die Session-Hijacking-Angriffsfläche trägt.

Für eine tiefere Behandlung des zustandslosen Protokolls und des Explicit-Handle-Musters, das den serverseitigen Sitzungsstatus ersetzt, siehe MCP 2026-07-28: Was das zustandslose Protokoll für B2B-Agent-Deployments bedeutet.

Was A2A anders macht — und warum es funktioniert

A2A verwendet SSE für Streaming, nicht Streamable HTTP. Der Unterschied ist die Arbeitslast. MCP-Tool-Aufrufe sind kurze Request/Response-Operationen — eine Datenbank abfragen, einen Datensatz abrufen, eine Berechnung ausführen. Der Server verarbeitet die Anfrage und gibt ein Ergebnis zurück. Streaming ist optional und selten. A2A-Tasks sind langlebige Operationen mit expliziter Lebenszyklusverwaltung — eine Preisbewertung, die zwei Minuten dauert, eine Compliance-Prüfung, die eine Stunde dauert. Das Streaming sind die Fortschrittsaktualisierungen, nicht das Ergebnis selbst.

A2As SSE-Streaming ist nur Server-Push, was die richtige Richtung für Task-Fortschritt ist: Der Agent, der an der Aufgabe arbeitet, sendet Updates an den aufrufenden Agenten. Die Steuerungsnachrichten des aufrufenden Agenten (Abbrechen, Updates abonnieren) laufen über separate JSON-RPC-Aufrufe. Es ist keine bidirektionale Kommunikation auf dem Streaming-Kanal erforderlich, weil der Steuerungskanal eine separate Standard-HTTP-Anfrage ist (A2A protocol; Google Developers Blog).

Deshalb ist die Transportfrage Verkabelung, nicht Architektur. MCP und A2A verwenden unterschiedliche Transporte, weil sie unterschiedliche Arbeitslasten haben, aber beide bauen auf Standard-HTTP auf. Die Protokollsemantik — MCPs zustandslose Tool-Aufrufe und A2As zustandsbehafteter Task-Lebenszyklus — ist es, was die Agent-Kommunikation funktionieren lässt. Der Transport transportiert die Nachrichten; er definiert sie nicht.

Für den vollständigen Protokollvergleich (Umfang, Transport, Auth, Zustand, Human-in-the-Loop) siehe A2A vs MCP: Wahl des richtigen Protokolls für die Agent-Kommunikation.

Wann WebSocket die richtige Antwort ist

WebSocket ist nicht falsch. Es ist der richtige Transport für spezifische Arbeitslasten, die MCP und A2A nicht standardisieren:

  • Echtzeit-Kollaborationsschnittstellen, bei denen der Client ungefähr so oft Nachrichten sendet wie der Server — ein gemeinsames Agenten-Dashboard, auf dem mehrere Operatoren denselben Agenten gleichzeitig steuern.
  • Hochfrequente bidirektionale Kommunikation, bei der der HTTP-Anfrageaufwand pro Nachricht prohibitiv ist — ein Trading-Agent, der Marktdaten empfängt und Aufträge auf demselben Kanal sendet.
  • Benutzerdefinierte MCP-Transporte, bei denen die Standardtransporte nicht passen — die Spezifikation erlaubt ausdrücklich benutzerdefinierte Transporte, solange sie das JSON-RPC-Nachrichtenformat und die Lebenszyklusanforderungen bewahren (MCP specification).

Der Kompromiss ist betriebliche Komplexität. Die Aufrechterhaltung langlebiger, bidirektionaler Verbindungen erfordert explizite Logik für Sitzungsgesundheit, Wiederholungen, unterbrochene Verbindungen und Nachrichtenprotokolle (Nimble Way). Für die meisten B2B-Agent-Deployments — ein Agent, der NetSuite aufruft, ein Beschaffungsagent, der an einen Preisagenten delegiert — ist diese Komplexität durch die Arbeitslast nicht gerechtfertigt.

Der zustandslose Trend

Die Branchenrichtung ist klar. MCP wurde am 28. Juli 2026 zustandslos. A2A verwendet zustandsbehaftete Task-Maschinen, aber zustandslosen Transport (HTTP + SSE, keine dauerhafte Sitzung auf dem Server). Die AGNTCon+MCPCon-Europe-Session am 17. September — „Stateless: The Future of MCP Transports", präsentiert von Kurtis Van Gent (Google) und Shaun Smith (Hugging Face, MCP Transport Working Group Maintainer) — ist die erste große Konferenzsession, die der zustandslosen Transporthrichtung gewidmet ist (Linux Foundation; sched.com).

Shaun Smith wird auf derselben Konferenz auch einen Keynote halten: „Getting to Stateless MCP: In Production" — was signalisiert, dass der zustandslose Transport von der Spezifikation zu Produktions-Deployment-Leitfäden übergeht. Für Teams, die den verworfenen SSE-Transport ausführen, ist das 12-Monate-Migrationsfenster (Ende Juli 2027) die betriebliche Frist. Die Sicherheitsfrist ist näher: Jeder Tag, an dem ein Server zustandsbehafteten SSE-Transport ausführt, ist ein Tag, an dem er die Session-Hijacking-Fläche trägt, die CVE-2026-16496 ausnutzt.

Die WebSocket-vs-SSE-Frage hat für die Agent-Kommunikation eine klare Antwort: keines von beiden, wenn Sie auf MCP aufbauen. Verwenden Sie Streamable HTTP. Verwenden Sie SSE, wenn Sie A2A-Task-Ausgabe streamen. Verwenden Sie WebSocket nur, wenn die Arbeitslast genuin bidirektional ist und die betriebliche Komplexität gerechtfertigt ist. Der Transport ist Verkabelung. Die Protokollsemantik — zustandslose Tool-Aufrufe, zustandsbehaftete Task-Lebenszyklen, explizite Handles, Human-in-the-Loop-Zustände — ist es, was Agentensysteme in der Produktion funktionieren lässt.

Verwandte Lektüre


Ein mittelständischer Distributor mit NetSuite, BigCommerce und drei Lieferantenkatalogen deployt einen MCP-basierten Angebotsagenten. Der Agent ruft NetSuite für Staffelpreise ab, prüft Lieferantenkataloge auf Verfügbarkeit und reserviert Bestand mit Ablaufzeit. Jeder dieser Aufrufe ist ein zustandsloser Tool-Aufruf über Streamable HTTP — keine dauerhafte Verbindung, keine Sitzung zu verwalten, kein Sticky-Session-Load-Balancer. Wenn der Agent eine komplexe Multi-Lieferanten-Verhandlung an einen Preisagenten delegiert, überschreitet diese Delegation die A2A-Protokollgrenze als Task mit SSE-Streaming für Fortschrittsaktualisierungen. Die Transportwahl war nicht WebSocket vs SSE — sondern Streamable HTTP für Tool-Aufrufe und SSE für Task-Streaming, wobei die Protokollsemantik die Arbeit leistete, die der Transport nicht leisten muss.

Fordern Sie ein_scoped Build an. Eine Woche Discovery. Sie erhalten ein Systeminventar, eine Workflow-Karte und einen festen Umfang — ob Sie mit uns bauen oder nicht.

Möchten Sie dies für Ihre Systeme gebaut?

Jedes Dokument hier stammt aus echter Produktionsarbeit. Wenn Sie ein Zielsystem und einen Workflow im Sinn haben, können wir in einer Woche einen Build umreißen.

Build mit festem Umfang anfragen

Einwöchiges Discovery. Sie erhalten ein Systeminventar, eine Workflow-Mappe und einen festen Umfang — unabhängig davon, ob Sie mit uns bauen.