Tasks changedextensions/tasks/overview
Upstream edited this page at 2 Aug 2026 17:25 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 20 Oct 2026 20:07 UTC.
Upstream edited
Recorded here
Lines+92added
Lines−96removed
From line
4
where the diff opens
First seen
14 Aug 2026
this site's first read of the page
Recorded edits3to this page, all time
The whole hunk
from line 4, old and new numbered
/
from line 4
44
55The [ext-tasks repository](https://github.com/modelcontextprotocol/ext-tasks) contains the full specification and documentation for MCP Tasks.
66
7<Card title="modelcontextprotocol/ext-tasks" icon="github" href="https://github.com/modelcontextprotocol/ext-tasks">
8 Full specification and documentation for MCP Tasks.
9</Card>
7> **[modelcontextprotocol/ext-tasks](https://github.com/modelcontextprotocol/ext-tasks)**
8>
9> Full specification and documentation for MCP Tasks.
1010
1111Not every tool call returns instantly. Some operations — CI pipelines, batch
1212processing, human approvals — take seconds, minutes, or longer. MCP Tasks let
from line 144
144144
145145To consume task-augmented responses, your client must:
146146
147<Steps>
148 <Step title="Declare support">
149 Include the extension in its per-request capabilities:
147**1. Declare support**
150148
151 ```jsonc theme={null}
152 {
153 "jsonrpc": "2.0",
154 "id": 1,
155 "method": "...",
156 "params": {
157 // Other fields...
158 "_meta": {
159 // Other fields...
160 "io.modelcontextprotocol/clientCapabilities": {
161 "extensions": {
162 "io.modelcontextprotocol/tasks": {},
163 },
164 },
149Include the extension in its per-request capabilities:
150
151```jsonc theme={null}
152{
153 "jsonrpc": "2.0",
154 "id": 1,
155 "method": "...",
156 "params": {
157 // Other fields...
158 "_meta": {
159 // Other fields...
160 "io.modelcontextprotocol/clientCapabilities": {
161 "extensions": {
162 "io.modelcontextprotocol/tasks": {},
165163 },
166164 },
167 }
168 ```
169 </Step>
165 },
166 },
167}
168```
170169
171 <Step title="Handle polymorphic results">
172 When issuing a supported request (e.g., `tools/call`), be prepared to receive
173 either the standard result or a `CreateTaskResult` with `resultType: "task"`.
174 </Step>
170**2. Handle polymorphic results**
175171
176 <Step title="Poll for completion">
177 Call `tasks/get` with the returned `taskId`, respecting the `pollIntervalMs`
178 value. Continue polling until the task reaches a terminal status (`completed`,
179 `failed`, or `cancelled`).
180 </Step>
172When issuing a supported request (e.g., `tools/call`), be prepared to receive
173either the standard result or a `CreateTaskResult` with `resultType: "task"`.
181174
182 <Step title="Handle input requests">
183 If the task status is `input_required`, read the `inputRequests` map, present
184 the requests to the user or model, and submit responses via `tasks/update`.
185 </Step>
175**3. Poll for completion**
186176
187 <Step title="Persist task IDs">
188 Store task IDs durably so polling can resume after a client crash or restart.
189 </Step>
190</Steps>
177Call `tasks/get` with the returned `taskId`, respecting the `pollIntervalMs`
178value. Continue polling until the task reaches a terminal status (`completed`,
179`failed`, or `cancelled`).
191180
181**4. Handle input requests**
182
183If the task status is `input_required`, read the `inputRequests` map, present
184the requests to the user or model, and submit responses via `tasks/update`.
185
186**5. Persist task IDs**
187
188Store task IDs durably so polling can resume after a client crash or restart.
189
192190### For MCP servers
193191
194192To return tasks from your server:
195193
196<Steps>
197 <Step title="Advertise support">
198 Include the extension in your `server/discover` capabilities:
194**1. Advertise support**
199195
200 ```jsonc theme={null}
201 {
202 "jsonrpc": "2.0",
203 "id": 1,
204 "result": {
205 // Other fields...
206 "capabilities": {
207 "extensions": {
208 "io.modelcontextprotocol/tasks": {},
209 },
210 },
196Include the extension in your `server/discover` capabilities:
197
198```jsonc theme={null}
199{
200 "jsonrpc": "2.0",
201 "id": 1,
202 "result": {
203 // Other fields...
204 "capabilities": {
205 "extensions": {
206 "io.modelcontextprotocol/tasks": {},
211207 },
212 }
213 ```
214 </Step>
208 },
209 },
210}
211```
215212
216 <Step title="Check client capabilities">
217 Before returning a `CreateTaskResult`, verify that the client included the
218 extension in its per-request capabilities. Never return a task to a client that
219 did not declare support.
220 </Step>
213**2. Check client capabilities**
221214
222 <Step title="Return CreateTaskResult">
223 When a request will be long-running, respond with `resultType: "task"` and a
224 `Task` object containing a unique `taskId`, initial status, `ttlMs`, and
225 `pollIntervalMs`. The task must be durably created before sending the response.
226 </Step>
215Before returning a `CreateTaskResult`, verify that the client included the
216extension in its per-request capabilities. Never return a task to a client that
217did not declare support.
227218
228 <Step title="Serve tasks/get">
229 Return the current task state on each poll. For terminal states, include the
230 `result` (on `completed`) or `error` (on `failed`) field.
231 </Step>
219**3. Return CreateTaskResult**
232220
233 <Step title="Handle tasks/update">
234 Accept `inputResponses` keyed to outstanding `inputRequests`. Acknowledge with
235 an empty result. Ignore responses for unknown or already-satisfied keys.
236 </Step>
221When a request will be long-running, respond with `resultType: "task"` and a
222`Task` object containing a unique `taskId`, initial status, `ttlMs`, and
223`pollIntervalMs`. The task must be durably created before sending the response.
237224
238 <Step title="Handle tasks/cancel">
239 Acknowledge cancellation requests with an empty result. Honor them when
240 possible, but cancellation is cooperative — the task may still reach a
241 non-`cancelled` terminal status.
242 </Step>
243</Steps>
225**4. Serve tasks/get**
244226
227Return the current task state on each poll. For terminal states, include the
228`result` (on `completed`) or `error` (on `failed`) field.
229
230**5. Handle tasks/update**
231
232Accept `inputResponses` keyed to outstanding `inputRequests`. Acknowledge with
233an empty result. Ignore responses for unknown or already-satisfied keys.
234
235**6. Handle tasks/cancel**
236
237Acknowledge cancellation requests with an empty result. Honor them when
238possible, but cancellation is cooperative — the task may still reach a
239non-`cancelled` terminal status.
240
245241## Client support
246242
247<Note>
248 MCP Tasks is an extension to the [core MCP specification](/specification/latest). Host
249 support varies by client.
250</Note>
243> [!NOTE]
244>
245> MCP Tasks is an extension to the [core MCP specification](/specification/latest). Host
246> support varies by client.
251247
252248See the [client matrix](/extensions/client-matrix) for extension support across
253249clients. Task support requires explicit opt-in from both client and server.
No line in this hunk matches that.