You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is a tracking issue for implementation of SEP-1686.
Summary
This SEP introduces a general-purpose Tasks capability for managing long-running operations in MCP, generalizing task management to all JSON-RPC requests. The Python SDK needs to implement support for servers to initiate operations and return immediately with task identifiers, enable clients to check back periodically for results or subscribe to task completion notifications, handle disconnections and reconnections gracefully, and provide APIs for managing multiple concurrent long-running tasks across all MCP operations to enable more resilient handling of asynchronous operations.
There doesn't seem to be a central ticket for all SDK implementations of a particular change, so sharing this here for SEP-1686 -- the following revisions have been merged on top of the base specification PR for tasks:
Remove an incorrectly-added field from notifications/cancelled: PR
Adjust schema to better-communicate where tasks are valid: PR
Rename/move annotations.taskHint to execution.taskSupport, tweak its enum values, and change a SHOULD to a MUST for the behavior when this is declared:
The actual functional changes should be limited to taskHint, but the rest should help clarify some details around polling.
To save the trouble of going through each of the above PRs one by one, you can also go to the file on the "Files changed" tab here, searching for docs/specification/draft/basic/utilities/tasks.mdx, and then using the "Display the rich diff" button, as shown:
The Tasks implementation from #1645 is solid, but I found a spec compliance gap: the high-level API (MCPServer.add_tool(), ToolManager.add_tool(), Tool.from_function()) doesn't expose the execution parameter, so there's no way to declare execution.taskSupport per tool.
Per the MCP spec (2025-11-25), tools must declare task support via execution.taskSupport in tools/list. Without this, tools default to taskSupport: "forbidden" even when enable_tasks() is called — clients like MCP Inspector won't show the "Run as task" option.
Activity
felixweinberger commentedon Nov 20, 2025
Hi @LucaButBoring looks like you have a Draft PR for this you're planning to update?
Mind if I assign this one to you?
LucaButBoring commentedon Nov 21, 2025
Relaying here from
#general-sdk-dev:LucaButBoring commentedon Nov 24, 2025
One very last change (we're doing a hard cutoff on additional changes here): adding a
lastUpdatedAtto theTaskobject: modelcontextprotocol/modelcontextprotocol#1875jief123 commentedon Feb 28, 2026
The Tasks implementation from #1645 is solid, but I found a spec compliance gap: the high-level API (
MCPServer.add_tool(),ToolManager.add_tool(),Tool.from_function()) doesn't expose theexecutionparameter, so there's no way to declareexecution.taskSupportper tool.Per the MCP spec (2025-11-25), tools must declare task support via
execution.taskSupportintools/list. Without this, tools default totaskSupport: "forbidden"even whenenable_tasks()is called — clients like MCP Inspector won't show the "Run as task" option.Details in #2156, fix in #2157.