notifications/progress și notifications/cancelled în Model Context Protocol (MCP)

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

Raportarea progresului pentru operații lungi și anularea unei cereri în curs, pe stdio și pe Streamable HTTP.

Specificație & cod MCP
_meta: {"progressToken": "..."}  →  notifications/progress {progressToken, progress, total?, message?}

Ce face notifications/progress și notifications/cancelled

Progres. Clientul care vrea actualizări pune progressToken (string sau întreg, unic între cererile active) în _meta-ul cererii. Serverul poate trimite apoi notifications/progress cu tokenul, valoarea progress (care trebuie să crească la fiecare notificare), total opțional și message opțional; valorile pot fi zecimale. Serverul poate alege să nu trimită nimic, frecvența îi aparține, iar notificările se opresc după încheierea operației.

Anulare. Pe stdio, clientul trimite notifications/cancelled cu requestId și un reason opțional. Pe Streamable HTTP, închiderea stream-ului SSE al răspunsului este semnalul de anulare și nu se așteaptă nicio notificare. Serverul care primește anularea ar trebui să oprească lucrul, să elibereze resursele și să nu mai trimită răspuns. Serverul trimite el însuși notifications/cancelled doar ca să închidă un stream subscriptions/listen.

Implementările ar trebui să aibă timeout pentru toate cererile trimise; la expirare, expeditorul anulează cererea. Ceasul se poate reseta la o notificare de progres, dar specificația recomandă oricum un timeout maxim. Anularea poate ajunge după ce răspunsul a fost trimis; ambele părți tratează această cursă fără erori, iar notificările invalide se ignoră.

Sintaxă și opțiuni

Opțiune / Parametru Descriere
progressToken În _meta-ul cererii și în notificare. String sau întreg, unic între cererile active.
progress Valoarea curentă; crește la fiecare notificare, chiar dacă totalul este necunoscut.
total Opțional: valoarea finală, dacă se cunoaște.
message Opțional: text lizibil despre progres.
requestId În notifications/cancelled: id-ul cererii anulate.
reason Opțional: motivul anulării, pentru jurnal sau afișare.

Exemple practice

Exemplul 1: Cerere cu token de progres

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "some_method",
  "params": {
    "_meta": {
      "progressToken": "abc123"
    }
  }
}

Exemplul 2: Notificare de progres

{
  "jsonrpc": "2.0",
  "method": "notifications/progress",
  "params": {
    "progressToken": "abc123",
    "progress": 50,
    "total": 100,
    "message": "Reticulating splines..."
  }
}

Exemplul 3: Anulare pe stdio

{
  "jsonrpc": "2.0",
  "method": "notifications/cancelled",
  "params": {
    "requestId": "123",
    "reason": "User requested cancellation"
  }
}

Greșeli frecvente și bune practici

  • Trimiți notifications/cancelled pe Streamable HTTP. Acolo anularea înseamnă închiderea stream-ului răspunsului.
  • Reutilizezi același progressToken pentru două cereri active. Tokenul trebuie să fie unic.
  • Prelungești la nesfârșit timeout-ul la fiecare notificare de progres. Păstrează un timeout maxim pentru servere care se comportă greșit.

Comenzi înrudite