Ce face server/discover și negocierea versiunii
Din revizia 2026-07-28, MCP nu mai are handshake initialize / notifications/initialized. Fiecare cerere declară în _meta versiunea de protocol (io.modelcontextprotocol/protocolVersion) și capabilitățile clientului, iar serverul acceptă sau respinge fiecare cerere independent. server/discover întoarce, într-un singur răspuns, versiunile suportate, capabilitățile, identitatea serverului și instrucțiunile opționale pentru LLM. Serverele trebuie s-o implementeze; clienții o pot apela înaintea oricărei alte cereri, dar nu sunt obligați.
Dacă serverul nu implementează versiunea cerută, răspunde cu UnsupportedProtocolVersionError (cod -32022), cu lista supported și valoarea requested în data. Clientul alege o versiune comună și reîncearcă sau afișează o eroare dacă nu există niciuna. Pe Streamable HTTP, acest răspuns vine cu 400 Bad Request. Rezultatul server/discover suportă cache prin ttlMs și cacheScope.
Specificația numește „legacy” reviziile cu initialize (2025-11-25 și mai vechi) și „modern” pe cele cu metadate per cerere. Pe stdio, un client care vorbește ambele variante ar trebui să trimită întâi server/discover: un DiscoverResult înseamnă server modern; o eroare modernă recunoscută (de exemplu -32022) înseamnă server modern cu altă versiune; orice altă eroare sau lipsa răspunsului înseamnă server legacy, iar clientul revine la initialize. Pe HTTP, clientul încearcă o cerere modernă și inspectează corpul unui 400. Rezultatul detecției se poate memora pe durata procesului (stdio) sau a originii (HTTP).
Sintaxă și opțiuni
| Opțiune / Parametru | Descriere |
|---|---|
supportedVersions |
Versiunile de protocol suportate de server. Clientul alege una pentru cererile următoare. |
capabilities |
ServerCapabilities: tools, resources (subscribe, listChanged), prompts, completions, logging (depreciat), experimental, extensions. |
instructions |
Opțional. Ghidaj în limbaj natural despre server, pe care clientul îl poate pune în promptul de sistem. |
_meta["io.modelcontextprotocol/serverInfo"] |
Numele și versiunea serverului (recomandat). Auto-raportat și neverificat; nu se folosește pentru decizii de securitate. |
ttlMs / cacheScope |
Indicații de cache obligatorii pe rezultat (vezi pagina despre paginare și cache). |
-32022 UnsupportedProtocolVersion |
Eroarea pentru o versiune neimplementată; data.supported listează versiunile acceptate. |
Exemple practice
Exemplul 1: Descoperirea unui server
Cererea nu are parametri proprii, doar _meta-ul standard.
{
"jsonrpc": "2.0",
"id": "discover-1",
"method": "server/discover",
"params": {
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientInfo": {
"name": "ExampleClient",
"version": "1.0.0"
},
"io.modelcontextprotocol/clientCapabilities": {}
}
}
}
Rezultat
{
"jsonrpc": "2.0",
"id": "discover-1",
"result": {
"resultType": "complete",
"supportedVersions": ["2026-07-28"],
"capabilities": {
"tools": {},
"resources": {}
},
"_meta": {
"io.modelcontextprotocol/serverInfo": {
"name": "ExampleServer",
"version": "1.0.0"
}
},
"instructions": "This server provides weather and resource utilities.",
"ttlMs": 3600000,
"cacheScope": "public"
}
}
Exemplul 2: Răspunsul pentru o versiune nesuportată
Clientul reîncearcă cu una dintre versiunile din supported.
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32022,
"message": "Unsupported protocol version",
"data": {
"supported": ["2026-07-28", "2025-11-25"],
"requested": "1900-01-01"
}
}
}
Greșeli frecvente și bune practici
- Trimiți
initializeunui server care suportă doar 2026-07-28. Pentru el este o metodă necunoscută, iar cererea nu are nici câmpurile_metaobligatorii, deci este respinsă. - Legi revenirea la
initializede un singur cod de eroare. Specificația interzice asta: serverele legacy răspund cu coduri definite de implementare (des-32601sau-32602) sau nu răspund deloc. - Schimbi comportamentul clientului după
serverInfo. Valoarea este auto-raportată și servește doar la afișare, jurnalizare și depanare.
Întrebări & Exemple practice:
server/discover și negocierea versiuniiAi o întrebare despre server/discover și negocierea versiunii sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!
Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.