Follow Discord
Sweep 22 Oct 2026 · 04:32Z Build v2.1.308 527 read Stable v2.1.308 Latest v2.1.308 Next v2.1.308 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One change · mcp

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
/
lines
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.
Feedback