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/resultsautasks/listdin 2025-11-25. În extensia actuală nu mai există; foloseștetasks/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.