MCP 2026-07-28: Stateless, Production-Ready – und nicht von Skills ersetzt
TechChase Team · 28. Juli 2026
TechChase Team · 28. Juli 2026

Das Model Context Protocol hat gerade seine größte Überarbeitung seit dem Start veröffentlicht. Die Spezifikation 2026-07-28 streicht genau die zwei Dinge, um die herum jede MCP-Implementierung gebaut wurde: Sessions und den initialize-Handshake.
Das klingt brutal. Es ist aber genau die Änderung, die MCP endlich zu langweiliger Infrastruktur macht – der Sorte, die man hinter einen Load Balancer stellt, ohne nachzudenken. Hier die Kurzfassung: was passiert ist, was bricht, und warum die Debatte "Skills vs. MCP" von einer falschen Annahme ausgeht.
Bisher war die Kommunikation mit einem entfernten MCP-Server über HTTP ein Ritual: Client und Server tauschten Capabilities aus, der Server erzeugte eine Mcp-Session-Id, und jeder weitere Aufruf musste beim selben Prozess landen. In Produktion bedeutet das Sticky Sessions, einen geteilten Redis für den Session-State und Gateways, die Pakete tief inspizieren, um korrekt zu routen. Nett in der Demo. Schmerzhaft im Betrieb.
Spezifikation 2026-07-28 entfernt Sessions auf Protokollebene vollständig. Es gibt keinen Mcp-Session-Id-Header mehr und keinen Handshake. Jeder Request bringt alles Nötige in _meta mit:
io.modelcontextprotocol/protocolVersion – welche Version dieser Request sprichtio.modelcontextprotocol/clientCapabilities – was der Client unterstütztio.modelcontextprotocol/clientInfo – wer da anfragtServer antworten mit ihrer eigenen Identität im _meta jedes Ergebnisses. Eine Versionsabweichung liefert einen UnsupportedProtocolVersionError, statt irgendwo tief im Aufruf zu scheitern. Die List-Endpunkte (tools/list, resources/list, prompts/list) variieren nicht mehr pro Verbindung – derselbe Request liefert dieselbe Antwort, egal welches Replica ihn bearbeitet.
Braucht ein Server wirklich Zustand über mehrere Aufrufe hinweg, erzeugt er ein explizites Handle, das der Client als ganz normales Tool-Argument zurückgibt. Zustand wird zu Anwendungsdaten statt zu Protokollmagie.
Das praktische Ergebnis: Ein MCP-Server ist jetzt einfach ein HTTP-Endpunkt. Serverless Functions, autoskalierende Pods, CDN-gecachte List-Antworten – alles funktioniert ohne Spezialrouting.
| Änderung | Bedeutung |
|---|---|
| Sessions entfernt | Keine Mcp-Session-Id, kein Sticky Routing, kein Session Store. |
Kein initialize-Handshake | Protokollversion und Capabilities reisen pro Request in _meta mit. |
Neues server/discover | Server MÜSSEN es implementieren: unterstützte Versionen, Capabilities, Identität. Clients können es einmal vorab aufrufen – oder als Kompatibilitäts-Probe über stdio nutzen. |
subscriptions/listen | Ersetzt den HTTP-GET-Endpunkt und resources/subscribe. Ein langlebiger POST-Stream, und Clients abonnieren gezielt einzelne Notification-Typen. |
| Multi Round-Trip Requests (MRTR) | Ersetzt server-initiierte Requests. Statt zurückzurufen, liefert der Server resultType: "input_required" mit ; der Client wiederholt den Original-Request mit . |
MRTR ist konzeptionell das Spannendste. Im alten Modell riefen Server zurück in den Client – für Sampling, Roots oder Nutzereingaben. Das funktioniert nur mit einer zustandsbehafteten, bidirektionalen Verbindung. Das neue Modell macht daraus einen ganz normalen, wiederholbaren Request/Response-Zyklus. Elicitation, Freigaben, fehlende Parameter: alles wird zu "das brauche ich noch, frag mich nochmal".
MCP hat außerdem eine formale Feature-Lifecycle-Policy eingeführt: Active → Deprecated → Removed, mit einem Mindestfenster von zwölf Monaten und einem öffentlichen Register. Nichts verschwindet über Nacht, aber neue Implementierungen sollten Folgendes nicht mehr übernehmen:
| Deprecated | Migration |
|---|---|
| Roots | Verzeichnisse/Dateien über Tool-Parameter, Resource-URIs oder Serverkonfiguration übergeben |
| Sampling | Direkt gegen die API des LLM-Anbieters integrieren |
| Logging | stderr bei stdio; OpenTelemetry für Observability |
| Dynamic Client Registration (RFC 7591) | Client ID Metadata Documents |
| HTTP+SSE-Transport | Streamable HTTP |
includeContext: "thisServer" / "allServers" | Feld weglassen oder "none" nutzen |
Dass Roots, Sampling und Logging deprecated werden, ist eine Absichtserklärung: MCP verengt sich auf das, was nur ein Protokoll leisten kann – Transport, Discovery, Autorisierung, Tool- und Resource-Semantik. Alles andere gehört in die Host-Anwendung oder in dedizierte Infrastruktur.
In den kleinen Änderungen steckt der "Production Ready"-Teil:
iss-Parameter zurückgeben (RFC 9207), und Clients MÜSSEN ihn prüfen, bevor sie den Code einlösen. Client-Credentials sind an den ausstellenden Authorization Server gebunden – keine Wiederverwendung über Issuer hinweg, Neuregistrierung bei Wechsel. Dynamic Client Registration weicht Client ID Metadata Documents.tools/list, prompts/list, resources/list, resources/read und Templates liefern jetzt ttlMs und cacheScope (public/private). Clients cachen statt zu pollen; Intermediaries wissen, was sie halten dürfen.traceparent, tracestate und baggage in _meta. Agenten-Aufrufe werden über Servicegrenzen hinweg nachvollziehbar.Mcp-Method und bei Streamable-HTTP-POSTs, damit Gateways routen und rate-limiten können, ohne den JSON-RPC-Body zu parsen.Zusammengenommen: Transport ohne Sticky Sessions, audience-gebundenes OAuth, Cache-Hinweise und verteiltes Tracing. Genau die Checkliste, die einem jedes Enterprise-Plattformteam vorlegt, bevor irgendetwas in Produktion darf.
Parallel dazu wurden Agent Skills – schlichte Markdown-Dateien mit prozeduralen Anweisungen, die bei Bedarf in einen isolierten Kontext geladen werden – sehr populär, und das Internet erklärte MCP prompt für tot.
Ist es nicht. Was stirbt, ist eine konkrete Unart: das mechanische Verpacken einer REST-API in einen MCP-Server. MCP-Mitgründer David Soria Parra bezeichnet simple REST-zu-MCP-Wrapper als Anti-Pattern, und die Zahlen geben ihm recht. Wer 40 REST-Endpunkte als 40 Tools exponiert, injiziert 40 JSON-Schemas in jeden einzelnen Turn des System-Prompts. In Claude Code verbrauchten statische Tool-Definitionen routinemäßig über 56.000 Tokens, bevor der Nutzer überhaupt etwas eingegeben hatte. Jede Zwischenantwort fließt anschließend durch das Kontextfenster – ein Dokument zwischen zwei Systemen zu bewegen, schiebt denselben Text also zweimal durch das Modell.
Aufmerksamkeit ist endlich und quadratisch. Mehr Tokens heißt mehr Kosten, mehr Latenz und messbar schlechteres Erinnerungsvermögen – Context Rot.
Zwei Muster lösen das, und keines davon verlangt, MCP aufzugeben:
search_tools-Fähigkeit und lädt nur die Schemas, die der aktuelle Schritt braucht. In Anthropics eigenen Messungen sank der Basis-Overhead in Claude Code von ~56.000 auf ~9.000 Tokens – rund 84 % weniger Kontext, verbrannt bevor die Arbeit beginnt.Der Stack 2026 ist also kein einzelner Mechanismus, sondern drei komplementäre Säulen:
Sie ergänzen sich. Ein Skill kann dem Agenten explizit sagen, welche MCP-Tools er wie aufrufen soll. Server können ihr Domänenwissen zusammen mit ihren Tools ausliefern, sodass Anleitungen mit dem Server reisen statt in jedem Client zu leben. Und höhere Ebenen wie MCP Apps (server-gerenderte UI) sitzen auf dem Protokoll-Kernel, nicht darin – der Core bleibt schlank, das Ökosystem wächst drumherum.
Mcp-Session-Id, ersetzt ihn durch explizite, serverseitig erzeugte Handles als Tool-Argumente.server/discover implementieren. Es ist verpflichtend – und die Kompatibilitätsgeschichte für ältere Clients.input_required-Ergebnis plus Retry.ttlMs setzen, Tool-Reihenfolge stabil halten – den Rest erledigen Progressive Discovery oder Code-Ausführung.MCP wird nicht ersetzt – es wird zur Infrastruktur degradiert, und das ist das Beste, was einem Protokoll passieren kann. Die Revision 2026-07-28 tauscht clevere bidirektionale Zustandshaltung gegen etwas, das in Produktion deutlich mehr wert ist: ein zustandsloses, cachebares, nachvollziehbares und audience-gebundenes HTTP-Protokoll, das skaliert wie alles andere im Cluster.
Die Ära des naiven Tool-Wrappings ist vorbei. Die Ära der Konnektivitätsschicht beginnt gerade.
inputRequestsinputResponsesresultType in jedem Ergebnis | "complete" oder "input_required". Ergebnisse älterer Server ohne das Feld gelten als "complete". |
ping, logging/setLevel gestrichen | Das Log-Level wird pro Request über io.modelcontextprotocol/logLevel gesetzt. |
| Tasks raus aus dem Core | Langlaufende Arbeit lebt jetzt in der offiziellen Extension io.modelcontextprotocol/tasks, mit Polling über tasks/get statt blockierendem tasks/result. |
| Keine SSE-Resumability | Last-Event-ID und Event-IDs sind weg. Bricht der Stream, stellt der Client den Request mit neuer ID erneut. |
Mcp-Name