30 秒快速回答
MCP Tasks(SEP-2663)是 MCP 协议 2026-07-28 版本正式落地的官方扩展:当一次工具调用需要跑几分钟甚至几小时(渲染视频、深度调研、部署上线),服务器不再让客户端傻等,而是立刻返回一个「任务句柄」,客户端轮询 tasks/get 就能拿到最终结果。 它让 AI Agent 的长时操作从「同步阻塞」升级为「异步可管理」,是 Agent 走向生产环境的关键拼图。
核心价值一句话:Tasks = 把「长时间跑的工具调用」变成「一个可以查询、补充输入、随时取消的任务」,连接断了也不丢结果。
一、为什么需要 Tasks?同步调用的三个痛点
在经典 MCP 里,tools/call 是同步的:客户端发请求,然后阻塞等待服务器返回结果。查天气没问题,但遇到「渲染视频」「跑深度调研」「执行多小时的 Agent 工作流」就非常脆弱:
| 痛点 | 表现 |
|---|---|
| 连接脆弱 | 代理、负载均衡或客户端超时一旦掐断连接,长任务的进度全部丢失 |
| 无法中途交互 | 任务跑到一半需要用户确认参数,同步模型下没法优雅地「暂停询问」 |
| 水平扩容困难 | 长连接占用服务器资源,也无法支持「发出多个任务并行执行」的 Agent 编排 |
2026-07-28 版把 MCP 核心改造成无状态协议后,长连接方案更不可行——Tasks 扩展正是为这个场景设计的官方答案。
二、核心机制:任务句柄 + 三个新方法
Tasks 的设计很克制:服务器决定是否把一次调用转成任务(server-directed),客户端只需在请求的 _meta 里声明支持 io.modelcontextprotocol/tasks 扩展。整个扩展只有三个方法:
| 方法 | 作用 |
|---|---|
tasks/get |
轮询任务状态,直到进入终态并取回结果 |
tasks/update |
提交服务器中途索要的输入(如确认参数) |
tasks/cancel |
协作式取消,任务可能在下一个安全点才真正停止 |
任务状态是一个五值状态机,轮询逻辑全靠它分支:
working ──→ input_required ──→ completed(终态,含结果)
│ │ failed(终态,执行出错)
└──────────────┴─────────────→ cancelled(终态,被取消)
对比旧版实验性 Tasks:阻塞式的 tasks/result 被移除,改为纯轮询的 tasks/get;作用域无法定义的 tasks/list 也被删除——无状态协议下没有 session 可作边界,任务 ID 成了唯一的访问凭证。
三、实战示例:一次完整的异步任务交互
假设服务器有一个 render_video 工具,一次渲染要 2 分钟。客户端调用它:
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": { "name": "render_video", "arguments": { "scene": "intro" },
"_meta": { "extensions": { "io.modelcontextprotocol/tasks": {} } } } }
服务器不返回视频,而是立刻返回一个任务句柄:
{ "jsonrpc": "2.0", "id": 1,
"result": { "resultType": "task",
"taskId": "b3f1c9a2", "status": "working",
"pollIntervalMs": 2000, "ttlMs": 600000 } }
客户端按 pollIntervalMs 轮询,直到状态变为 completed 并取回结果:
{ "jsonrpc": "2.0", "id": 2, "method": "tasks/get",
"params": { "taskId": "b3f1c9a2" } }
中途服务器需要确认渲染分辨率,会把状态置为 input_required 并附带 inputRequests;客户端用 tasks/update 回填答案,任务继续。若用户改变主意,tasks/cancel 即可发起协作式取消。
在 SDK 侧,C# 的用法最直观,注册一个任务存储即可自动把长工具转成后台任务:
builder.Services.AddMcpServer()
.WithTools()
.WithTasks(new InMemoryMcpTaskStore());
四、同步调用 vs Tasks:一张表看清差异
| 维度 | 同步 tools/call | Tasks 扩展 |
|---|---|---|
| 响应方式 | 阻塞到最终结果 | 立刻返回任务句柄 |
| 连接要求 | 全程保持连接 | 只需轮询,断线可恢复 |
| 中途交互 | 不支持 | tasks/update 补充输入 |
| 取消机制 | 无协议级方案 | tasks/cancel 协作式取消 |
| 适用场景 | 毫秒级查询 | 分钟级以上的长任务 |
迁移提醒:如果你在 2025-11-25 实验版上用过旧 Tasks API(tasks/result、tasks/list),必须迁移到新生命周期;而只跑本地 stdio 服务器、没有长任务的场景,则完全不需要为 Tasks 改动。
五、总结
- Tasks 是什么:让
tools/call返回异步任务句柄的官方 MCP 扩展,替代同步阻塞; - 三个方法:
tasks/get轮询、tasks/update补输入、tasks/cancel取消; - 适用对象:渲染、调研、部署等分钟级以上工具调用,让 Agent 可以并行发任务、断线不丢进度;
- 趋势:Tasks 已被列入 MCP 新路线图,预计从扩展晋升为核心协议——现在是学习的最佳时机。
延伸阅读:想搞懂 Tasks 依赖的无状态核心,可以读本站《MCP 协议 2026 版有什么新变化?一文读懂史上最大修订》;想了解 Agent 长任务不中断的通用机制,可看《什么是 Agent 持久化执行?AI Agent 长时任务不中断的核心技术》。