MCP wygląda skomplikowanie — protokół, transport, narzędzia, zasoby, prompty. Ale pod spodem jest coś bardzo prostego: JSON-RPC. Każda wiadomość MCP to JSON-RPC. Każde wywołanie narzędzia to JSON-RPC. Każda odpowiedź to JSON-RPC.
Zrozumienie JSON-RPC to zrozumienie jak MCP (i A2A, i wiele innych protokołów agentowych) komunikuje się na najniższym poziomie.
Czym jest JSON-RPC
JSON-RPC to lekki protokół zdalnego wywoływania procedur (Remote Procedure Call) używający JSON jako formatu danych — klient wysyła żądanie z nazwą metody i parametrami, serwer zwraca wynik lub błąd — stanowiący fundament komunikacji w MCP, A2A i wielu innych protokołach agentowych. Specyfikacja JSON-RPC 2.0 jest prosta, powszechnie obsługiwana i niezależna od transportu (HTTP, WebSocket, STDIO).
Anatomia żądania JSON-RPC
Żądanie ma cztery pola: `jsonrpc` (zawsze „2.0”), `id` (unikalny identyfikator żądania), `method` (nazwa metody do wywołania), `params` (parametry metody).
Przykład — wywołanie narzędzia search_term w MCP słownika Webflux:
„`json
{
„jsonrpc”: „2.0”,
„id”: 1,
„method”: „tools/call”,
„params”: {
„name”: „search_term”,
„arguments”: { „query”: „agent-readiness” }
}
}
„`
Odpowiedź zawiera `jsonrpc`, `id` (ten sam co w żądaniu), i albo `result` albo `error`. Jeśli `id` pasuje do żądania — wiesz że odpowiedź dotyczy twojego konkretnego wywołania.
Powiadomienia — żądania bez id
JSON-RPC obsługuje też powiadomienia — żądania bez pola `id`. Serwer nie musi odpowiadać na powiadomienie. W MCP używane do `notifications/initialized` — klient informuje serwer że inicjalizacja zakończona, serwer nie musi nic odpowiadać.
Dlaczego JSON-RPC a nie REST
REST zakłada zasoby (URL-e) i operacje na nich (GET, POST, PUT, DELETE). JSON-RPC zakłada akcje (metody) i ich wywołanie. Dla protokołów agentowych model akcji jest naturalniejszy — „wywołaj narzędzie”, „pobierz zasób”, „wylistuj prompty” to są akcje, nie operacje na zasobach URL.
Dodatkowo JSON-RPC jest transport-agnostic — te same wiadomości działają przez HTTP, WebSocket, STDIO. MCP używa tej właściwości żeby obsługiwać zarówno lokalne połączenia (STDIO między procesami) jak i sieciowe (HTTP).
Debugowanie MCP przez znajomość JSON-RPC
Znajomość JSON-RPC pozwala debugować połączenia MCP przez zwykły curl. Zamiast specjalistycznych narzędzi — wysyłasz POST z JSON-RPC body i czytasz odpowiedź. Wszystkie przykłady z debugowaniem serwera MCP słownika Webflux w tej dokumentacji używają właśnie curl z JSON-RPC.