MCP fjerner initialize-handshaket: revisjon 2026-07-28 er tilstandsløs
Fjerner initialize-handshaket fra Model Context Protocol: fra revisjon 2026-07-28 bærer hver enkelt forespørsel sin egen protokollversjon og capabilities i _meta-feltet.
Tre metadatanøkler erstatter hele initialize-handshaket i MCP. Klienten legger io.modelcontextprotocol/protocolVersion, io.modelcontextprotocol/clientCapabilities og io.modelcontextprotocol/clientInfo på hver enkelt forespørsel, og serveren avgjør forespørsel for forespørsel om den kan betjene den. Serveren din svarer nå på det første ekte kallet, uten noe oppsett i forkant. Passer ikke versjonen, får klienten en UnsupportedProtocolVersionError med feilkode -32022 og en liste over versjonene serveren faktisk støtter.
Endringen kommer fra SEP-2575, som Kurtis Van Gent i Google Cloud åpnet 14. april og som ble slått sammen 11. mai etter 112 review-kommentarer. Forrige revisjon, 2025-11-25, krevde at klient og server ble enige én gang og deretter holdt tilstanden i en økt. Spesifikasjonen kaller nå de gamle versjonene «legacy» og de nye «modern», og skiller dem på nøyaktig dette punktet.
«Det nåværende kravet om et initialiseringshåndtrykk skaper betydelige utfordringer for skalerbarhet (lastbalansering krever sticky sessions), robusthet (serverfeil mister øktstilstanden) og implementasjonskompleksitet» — Kurtis Van Gent, SEP-2575
Session-headeren Mcp-Session-Id er fjernet fra Streamable HTTP, og listekall som tools/list varierer ikke lenger per tilkobling. Trenger serveren din tilstand mellom kall, skal den dele ut egne handles som klienten sender tilbake som vanlige verktøyargumenter, beskrevet i SEP-2567. Samtidig forsvinner ping, logging/setLevel og gjenopptakelse av SSE-strømmer: brytes responsstrømmen, mister du kallet som var underveis og må sende det på nytt med ny request-id. Roots, Sampling og Logging er avviklingsmerket i samme revisjon.
«Det finnes ingen forhandlingshåndtrykk. Hver forespørsel bærer sin protokollversjon, og serveren godtar eller avviser hver forespørsel uavhengig» — MCP-spesifikasjonen, revisjon 2026-07-28
Kjernen krymper også andre steder. Eksperimentelle tasks er flyttet ut i en offisiell utvidelse, io.modelcontextprotocol/tasks, og server-initierte kall som sampling/createMessage og elicitation/create er erstattet av mønsteret Multi Round-Trip Requests: serveren returnerer et resultat med resultType «input_required», og klienten sender det opprinnelige kallet på nytt med svarene i inputResponses.
Kompatibilitetsmatrisen i spesifikasjonen er tydelig om prisen. En moderne klient mot en gammel server feiler, og en gammel klient mot en moderne server feiler også, uten noen mekanisme for å hoppe fremover. Bare implementasjoner som håndterer begge epokene, det spesifikasjonen kaller «dual-era», fungerer på tvers. Servere MÅ nå implementere server/discover, som klienten kan kalle for å hente støttede versjoner før første ekte kall, eller bruke som probe på stdio for å avgjøre hvilken epoke serveren tilhører.
Hva bør du gjøre?
- Sjekk om SDK-en din har rullet ut 2026-07-28 før du oppgraderer klienten. En moderne klient mot en server som fortsatt venter på initialize, feiler uten fall-forward.
- Flytt øktstilstand ut av transportlaget og over i eksplisitte handles som sendes som vanlige verktøyargumenter, slik SEP-2567 beskriver.
- Implementer server/discover i egne servere, og gjør dem dual-era hvis du har klienter du ikke kontrollerer.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.