Model Context Protocol to standard, przez który asystenci AI rozmawiają z zewnętrznymi narzędziami: bazą danych, repozytorium, kalendarzem. Wersja specyfikacji 2026-07-28 wyszła jako wersja kandydująca 21 maja, a jako ostateczna 28 lipca. Twórcy mieli więc około dziesięciu tygodni na sprawdzenie zmian na żywych implementacjach. To nie jest drobna aktualizacja. Lista zmian łamiących zgodność jest długa, a najważniejsza z nich zmienia sam charakter protokołu.
Co się zmieniło w MCP 2026-07-28
Protokół przestał trzymać stan. Znika handshake initialize razem z notifications/initialized, a z transportu Streamable HTTP znikają sesje i nagłówek Mcp-Session-Id. Każde żądanie niesie wersję protokołu i możliwości klienta w polu _meta:
{ "method": "tools/call",
"params": {
"name": "get_weather",
"_meta": {
"io.modelcontextprotocol/protocolVersion":
"2026-07-28",
"io.modelcontextprotocol/clientCapabilities":
{ ... }
} } }To schemat z kluczami ze specyfikacji, skrócony do najważniejszych pól. Klient powinien się też przedstawiać w każdym żądaniu (clientInfo), a serwer w każdym wyniku (serverInfo). Niezgodna wersja kończy się błędem UnsupportedProtocolVersionError. Serwer musi za to obsłużyć nowe server/discover, w którym ogłasza wspierane wersje i swoje możliwości. Klient może je wywołać przed czymkolwiek innym albo potraktować jako próbę zgodności przez STDIO.
Gdzie trzymać stan, skoro nie ma sesji?
W uchwytach. Serwer, który potrzebuje pamiętać coś między wywołaniami (koszyk, otwarty plik, transakcję), sam generuje identyfikator i oddaje go jako zwykły argument narzędzia. Klient odsyła go przy następnym wywołaniu. Listy tools/list, resources/list i prompts/list nie mogą się już różnić między połączeniami. Dzięki temu serwer da się postawić za zwykłym load balancerem bez przyklejania klienta do jednej instancji.
Co jeszcze usunięto, a co oznaczono do usunięcia
- ping i logging/setLevel znikają. Poziom logowania ustawia się w _meta każdego żądania (io.modelcontextprotocol/logLevel).
- Wznawianie strumieni SSE (nagłówek Last-Event-ID) znika. Zerwany strumień oznacza zgubione żądanie, które klient musi wysłać ponownie z nowym ID.
- subscriptions/listen zastępuje endpoint GET oraz resources/subscribe: jeden długi strumień na powiadomienia, na które klient się zapisał.
- Żądania wysyłane przez serwer (sampling, elicitation, roots/list) zastępuje wzorzec MRTR. Serwer odpowiada wynikiem input_required, a klient ponawia żądanie z brakującymi danymi. Każdy wynik ma wymagane pole resultType.
- Tasks wychodzą z rdzenia do oficjalnego rozszerzenia. Zamiast blokującego tasks/result jest odpytywanie przez tasks/get, a tasks/list znika.
- Roots, Sampling i Logging są oznaczone jako przestarzałe. Jeszcze działają, ale nowe implementacje nie powinny ich dodawać.
Mniejszych zmian też jest sporo. Żądania HTTP POST muszą mieć nagłówki Mcp-Method i Mcp-Name. Wyniki list dostają pola ttlMs i cacheScope, czyli wskazówki, jak długo i gdzie wolno je trzymać w cache. Schematy narzędzi przyjmują pełny JSON Schema 2020-12. Błąd „nie znaleziono zasobu” zmienia kod z -32002 na -32602. W autoryzacji klient musi sprawdzić parametr iss zgodnie z RFC 9207.
Kto teraz rządzi MCP?
Od 9 grudnia 2025 nie tylko Anthropic. Protokół trafił wtedy do Agentic AI Foundation, funduszu działającego pod Linux Foundation, który Anthropic założył razem z Block i OpenAI. MCP jest dziś wszędzie tam, gdzie agent sięga po zewnętrzne narzędzia, od Claude Code po bramkę MCP w Docker Sandboxes. Kto utrzymuje własny serwer, ma dwie rzeczy na start: obowiązkowe server/discover i pozbycie się zależności od sesji. Dobrze przy tym przeczytać badanie o tym, jak bezpieczny jest kod pisany przez agentów, zanim przepisanie serwera zleci się w całości modelowi.



