Mesaje JSON-RPC, _meta și coduri de eroare MCP în Model Context Protocol (MCP)

Protocol și Arhitectură Specificația MCP 2026-07-28

Formatul cererilor, răspunsurilor și notificărilor MCP, câmpurile rezervate din _meta, resultType și codurile de eroare definite de specificație.

Specificație & cod MCP
{"jsonrpc": "2.0", "id": 1, "method": "...", "params": {"_meta": {...}}}

Ce face Mesaje JSON-RPC, _meta și coduri de eroare MCP

Toate mesajele MCP urmează JSON-RPC 2.0 și sunt codificate UTF-8. Cererile au un id string sau întreg, care nu poate fi null și nu poate repeta id-ul unei alte cereri aflate încă în așteptare. Răspunsurile au același id și conțin fie result, fie error (cu code întreg și message). Notificările nu au id și nu primesc răspuns. În 2026-07-28 serverele nu inițiază cereri, iar clienții nu trimit răspunsuri.

Orice result conține câmpul resultType: complete pentru rezultatul final și input_required pentru rezultatul intermediar al unei cereri în mai mulți pași (MRTR). Extensiile pot adăuga valori proprii. Un rezultat fără resultType, venit de la un server cu o revizie mai veche, se tratează ca complete; o valoare necunoscută clientului este invalidă.

Câmpul _meta poartă metadatele de protocol. Fiecare cerere include obligatoriu io.modelcontextprotocol/protocolVersion și io.modelcontextprotocol/clientCapabilities; lipsa lor duce la eroarea -32602 (pe HTTP cu 400). Dacă o cerere are nevoie de o capabilitate pe care clientul n-a declarat-o, serverul întoarce MissingRequiredClientCapabilityError (-32021) cu data.requiredCapabilities. Prefixele de cheie a căror a doua etichetă este modelcontextprotocol sau mcp (de exemplu io.modelcontextprotocol/, dev.mcp/) sunt rezervate protocolului.

Sintaxă și opțiuni

Opțiune / Parametru Descriere
io.modelcontextprotocol/protocolVersion Obligatoriu în fiecare cerere, de exemplu "2026-07-28".
io.modelcontextprotocol/clientCapabilities Obligatoriu în fiecare cerere: capabilitățile clientului relevante pentru cerere.
io.modelcontextprotocol/clientInfo Opțional, dar recomandat în fiecare cerere: numele și versiunea clientului.
io.modelcontextprotocol/logLevel Opțional: nivelul minim de log pentru această cerere (Logging, depreciat).
progressToken Cere notificări notifications/progress pentru cerere.
io.modelcontextprotocol/subscriptionId Pe notificările unui stream subscriptions/listen: id-ul cererii care l-a deschis.
io.modelcontextprotocol/serverInfo În _meta-ul rezultatelor (recomandat): numele și versiunea serverului.
traceparent, tracestate, baggage Propagarea contextului OpenTelemetry, în formatele W3C Trace Context și W3C Baggage.
-32700, -32600 … -32603 Codurile standard JSON-RPC (parse error, invalid request, method not found, invalid params, internal error).
-32020 HeaderMismatch Antetele HTTP nu corespund corpului cererii sau lipsesc.
-32021 MissingRequiredClientCapability Cererea cere o capabilitate nedeclarată de client.
-32022 UnsupportedProtocolVersion Versiunea cerută nu este implementată de server.
-32000 … -32019 Interval legacy: nu se alocă coduri noi aici. Intervalul -32020 … -32099 este rezervat specificației.

Exemple practice

Exemplul 1: Context OpenTelemetry în _meta

Exemplul neformativ din specificație; restul câmpurilor _meta obligatorii sunt omise pentru scurtime.

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_weather",
    "arguments": {
      "location": "New York"
    },
    "_meta": {
      "traceparent": "00-0af7651916cd43dd8448eb211c80319c-00f067aa0ba902b7-01"
    }
  }
}

Exemplul 2: Forma generală a unui rezultat

{
  jsonrpc: "2.0";
  id: string | number;
  result: {
    resultType: string;
    [key: string]: unknown;
  };
}

Greșeli frecvente și bune practici

  • Trimiți capabilitățile o singură dată și te bazezi pe conexiune. Serverul nu are voie să deducă context din cererile anterioare; fiecare cerere își poartă propriile metadate.
  • Emiți coduri din intervalul -32020 … -32099 care nu sunt definite de specificație. Codurile proprii se alocă în afara intervalului rezervat JSON-RPC (-32768 … -32000).
  • Folosești clientInfo ca identitate verificată. Este auto-raportat; identitatea vine din autorizare.

Comenzi înrudite