server/discover și negocierea versiunii în Model Context Protocol (MCP)

Cererea prin care clientul află versiunile de protocol, capabilitățile și identitatea unui server MCP, în locul fostului handshake initialize.

Specificație & cod MCP
server/discover → supportedVersions, capabilities, instructions, ttlMs, cacheScope

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 initialize unui server care suportă doar 2026-07-28. Pentru el este o metodă necunoscută, iar cererea nu are nici câmpurile _meta obligatorii, deci este respinsă.
  • Legi revenirea la initialize de un singur cod de eroare. Specificația interzice asta: serverele legacy răspund cu coduri definite de implementare (des -32601 sau -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.

Comenzi înrudite

Învață AI • Comunitate & Q&A

Întrebări & Exemple practice: server/discover și negocierea versiunii

Ai 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.

Comunitate AI Adaugă o întrebare sau distribuie un cod / prompt

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.