Extensia Tasks (tasks/get, tasks/update, tasks/cancel) în Model Context Protocol (MCP)

Protocol și Arhitectură Extensie oficială io.modelcontextprotocol/tasks (MCP 2026-07-28)

Extensia oficială prin care un server MCP întoarce un identificator de sarcină pentru operații lungi, iar clientul face polling până la rezultat.

Specificație & cod MCP
result: {"resultType": "task", ...}  →  tasks/get | tasks/update | tasks/cancel

Ce face Extensia Tasks (tasks/get, tasks/update, tasks/cancel)

În revizia 2026-07-28, Tasks a ieșit din nucleul protocolului și a devenit extensia oficială io.modelcontextprotocol/tasks (SEP-2663). Varianta reproiectată înlocuiește metoda blocantă tasks/result cu polling prin tasks/get, adaugă tasks/update pentru input trimis de client, elimină tasks/list și permite serverului să întoarcă o sarcină fără ca cererea să o ceară explicit. Specificația completă se află în repository-ul modelcontextprotocol/ext-tasks.

Clientul declară extensia în extensions din clientCapabilities, iar serverul în capabilitățile din server/discover. La o cerere suportată (de exemplu tools/call), serverul poate răspunde cu un CreateTaskResult (resultType: "task") care conține taskId, starea inițială, ttlMs și pollIntervalMs. Clientul apelează tasks/get până la o stare terminală; la completed, câmpul result conține ce ar fi întors cererea sincron, iar la failed, câmpul error conține eroarea JSON-RPC.

Dacă sarcina ajunge în input_required, răspunsul tasks/get include inputRequests, iar clientul răspunde prin tasks/update. tasks/cancel este cooperativ: serverul confirmă intenția, dar sarcina poate ajunge totuși în altă stare terminală. Serverul poate trimite actualizări prin notifications/tasks, la care clientul se abonează cu subscriptions/listen; polling-ul rămâne modul implicit. Serverul nu întoarce sarcini unui client care n-a declarat extensia.

Sintaxă și opțiuni

Opțiune / Parametru Descriere
tasks/get Starea curentă a sarcinii; la stări terminale, rezultatul sau eroarea.
tasks/update Trimite inputResponses pentru inputRequests în așteptare; serverul confirmă cu un rezultat gol.
tasks/cancel Cere anularea; serverul confirmă cu un rezultat gol, fără obligația de a opri lucrul.
working Operația este în curs.
input_required Serverul are nevoie de input de la client (vezi inputRequests).
completed / failed / cancelled Stări terminale; după ele starea sarcinii nu se mai schimbă.
pollIntervalMs Intervalul de polling sugerat de server.

Exemple practice

Exemplul 1: Clientul declară suportul pentru Tasks

Fragment din _meta-ul unei cereri.

"_meta": {
  "io.modelcontextprotocol/clientCapabilities": {
    "extensions": {
      "io.modelcontextprotocol/tasks": {}
    }
  }
}

Exemplul 2: Serverul anunță extensia în server/discover

"capabilities": {
  "extensions": {
    "io.modelcontextprotocol/tasks": {}
  }
}

Greșeli frecvente și bune practici

  • Folosești tasks/result sau tasks/list din 2025-11-25. În extensia actuală nu mai există; folosește tasks/get.
  • Nu salvezi taskId. Documentația recomandă păstrarea lui durabilă, ca polling-ul să continue după o repornire a clientului.
  • Ignori pollIntervalMs și interoghezi continuu serverul.

Comenzi înrudite