Repository navigation
feat: Add 2026-07-28 Tasks extension support #1120
Description
Problem
The server supports two protocol paths:
- the 2025-11-25 legacy adapter supports the experimental Tasks API through
@modelcontextprotocol/sdk1.29.0 - the 2026-07-28 stateless adapter uses
@modelcontextprotocol/server2.0.0 and does not support Tasks
The stateless adapter currently returns method-not-found for task methods. This is valid core-protocol behavior, but 2026 clients cannot use Apify's long-running task execution.
The 2026 Tasks extension is not compatible with the legacy experimental API:
- task creation is server-directed
- clients opt in through the
io.modelcontextprotocol/tasksextension - clients poll with
tasks/get - clients provide requested input through
tasks/update - clients cancel with
tasks/cancel tasks/listdoes not exist
References:
- https://modelcontextprotocol.io/extensions/tasks/overview
- https://tasks.extensions.modelcontextprotocol.io/specification/draft/tasks
- https://tasks.extensions.modelcontextprotocol.io/seps/2663-tasks-extension
Decision required
Confirm that the server should preserve long-running task support for 2026 clients.
If Tasks support is not required, close this issue. The stateless core implementation is already complete.
Before implementation, verify whether the TypeScript SDK provides an official Tasks-extension package or server integration. The currently installed v2 server package does not expose the required implementation. Do not implement the extension protocol manually without an explicit decision.
Scope
If Tasks support is required:
- Add
io.modelcontextprotocol/tasksextension negotiation to the stateless adapter. - Return task handles only when the client advertises the extension.
- Define when the server chooses asynchronous execution for tools that currently support legacy tasks.
- Implement
tasks/get,tasks/update, andtasks/cancel. - Store terminal results or errors in the new extension shape.
- Bind task access to the request's authenticated identity.
- Preserve task durability across stateless requests.
- Coordinate the task-store interface and Redis implementation with
apify-mcp-server-internal. - Add the new protocol path without changing legacy task behavior.
Design questions
- Which tools may be converted to Tasks when the client supports the extension?
- When should an optional task-capable tool return a task instead of completing synchronously?
- Does the official TypeScript implementation provide the required store and lifecycle hooks?
- How are task IDs bound to authenticated users and payment context?
- Do any current tools need the
input_requiredstate andtasks/updateimmediately? - Which clients currently support the extension?
Non-goals
- Do not remove or change legacy
tasks/list. - Do not make synchronous calls write to a task store.
- Do not collapse the synchronous and task execution paths.
- Do not modify the 2026 core adapter when the client has not advertised Tasks support.
Activity
[-][spec] Migrate the task path to the 2026-07-28 tasks extension (stateless core, drop tasks/list)[/-][+]feat: Add 2026-07-28 Tasks extension support[/+]vystrcild commentedon Oct 26, 2026
Product decision: yes, we want Tasks on the 2026-07-28 path.
What changed since July: Claude Code CLI supports the Tasks extension since 2.1.304, in beta (docs), and more Claude surfaces are announced. On the SDK side, 2.3.0 serves
tasks/getandtasks/cancel, and full server support is in review (typescript-sdk#2782, typescript-sdk#2820).Proposal: start when typescript-sdk#2782 is released, not by hand. Scope as discussed internally on 24 Oct: long Actor runs first (apify-mcp-server#1119), durable results, cancel, no duplicate paid runs on retry. The store and idempotency part does not depend on the SDK and could start earlier.