Ce face Metodele și notificările MCP (referință 2026-07-28)
Specificația MCP 2026-07-28 este revizia curentă (/specification/latest). Protocolul a devenit fără stare: nu mai există handshake initialize, iar fiecare cerere își poartă în _meta versiunea de protocol și capabilitățile clientului. Orice interacțiune pornește de la client: clientul trimite cereri și notificări, serverul răspunde cu un rezultat sau o eroare, eventual precedate de notificări legate de acea cerere.
Serverele nu mai trimit cereri JSON-RPC proprii. Când un server are nevoie de ceva de la client (o întrebare către utilizator, o completare LLM, lista de rădăcini), întoarce un InputRequiredResult cu cererile elicitation/create, sampling/createMessage sau roots/list în câmpul inputRequests, iar clientul reîncearcă cererea originală cu răspunsurile. Notificările de schimbare (liste, resurse) circulă pe stream-ul unei cereri subscriptions/listen.
Tabelul de mai jos este lista din schema oficială: 10 cereri client → server, 3 cereri de input purtate în rezultate și 8 notificări. Sampling, Roots și Logging sunt depreciate din 2026-07-28 (rămân cel puțin 12 luni). Extensiile oficiale, cum este Tasks (io.modelcontextprotocol/tasks), adaugă metode proprii în afara nucleului.
Sintaxă și opțiuni
| Opțiune / Parametru | Descriere |
|---|---|
server/discover |
Client → server. Versiunile suportate, capabilitățile și identitatea serverului. Serverele trebuie s-o implementeze. |
tools/list |
Client → server. Lista uneltelor; suportă paginare și cache. |
tools/call |
Client → server. Apelează o unealtă; poate primi InputRequiredResult. |
resources/list |
Client → server. Lista resurselor; paginare și cache. |
resources/templates/list |
Client → server. Șabloanele de resurse (URI templates); paginare și cache. |
resources/read |
Client → server. Conținutul unei resurse; cache; poate primi InputRequiredResult. |
prompts/list |
Client → server. Lista prompturilor; paginare și cache. |
prompts/get |
Client → server. Mesajele unui prompt cu argumentele date; poate primi InputRequiredResult. |
completion/complete |
Client → server. Sugestii de autocompletare pentru argumentele prompturilor și șabloanelor de resurse. |
subscriptions/listen |
Client → server. Deschide un stream de lungă durată pentru notificările de schimbare alese. |
elicitation/create |
Cerere de input în inputRequests: serverul cere date utilizatorului (mod form sau url). |
sampling/createMessage |
Cerere de input în inputRequests: serverul cere o completare LLM. Depreciată. |
roots/list |
Cerere de input în inputRequests: serverul cere rădăcinile clientului. Depreciată. |
notifications/tools/list_changed |
Server → client, pe subscriptions/listen cu toolsListChanged. |
notifications/prompts/list_changed |
Server → client, pe subscriptions/listen cu promptsListChanged. |
notifications/resources/list_changed |
Server → client, pe subscriptions/listen cu resourcesListChanged. |
notifications/resources/updated |
Server → client, pentru URI-urile din resourceSubscriptions. |
notifications/subscriptions/acknowledged |
Server → client, primul mesaj al unui stream subscriptions/listen. |
notifications/progress |
Server → client, legată de o cerere care a trimis progressToken. |
notifications/message |
Server → client, mesaj de log legat de o cerere cu logLevel. Depreciată. |
notifications/cancelled |
Client → server pe stdio, pentru a anula o cerere. Serverul o trimite doar ca să închidă un stream subscriptions/listen. |
Exemple practice
Exemplul 1: O cerere completă cu metadatele obligatorii
Exemplul CallToolRequest din schema oficială. Fără protocolVersion și clientCapabilities în _meta, serverul respinge cererea cu -32602.
{
"jsonrpc": "2.0",
"id": "call-tool-example",
"method": "tools/call",
"params": {
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {
"name": "ExampleClient",
"version": "1.0.0"
},
"io.modelcontextprotocol/clientCapabilities": {}
},
"name": "get_weather",
"arguments": {
"location": "New York"
}
}
}
Greșeli frecvente și bune practici
- Cauți
initialize,ping,logging/setLevelsauresources/subscribeîn revizia curentă. Au fost eliminate în 2026-07-28; vezi pagina despre metodele eliminate. - Tratezi
sampling/createMessage,elicitation/createșiroots/listca cereri trimise direct de server. Din 2026-07-28 ele călătoresc doar îninputRequests, în interiorul unui rezultat. - Implementezi Sampling, Roots sau Logging într-un proiect nou. Specificația le-a depreciat și recomandă alternative: API-ul furnizorului LLM, parametri de unealtă sau configurare,
stderrori OpenTelemetry.