JSON-RPC

Lekki protokół zdalnego wywoływania procedur używający JSON — klient wysyła żądanie z nazwą metody i parametrami, serwer zwraca wynik lub błąd — stanowiący fundament komunikacji w MCP, A2A i wielu protokołach agentowych. Prosty, transport-agnostic, powszechnie obsługiwany.

W Polsce nazywane też:

zdalne wywoływanie procedur JSONprotokół RPCJSON Remote Procedure Call

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.