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/resulttasks/list),必须迁移到新生命周期;而只跑本地 stdio 服务器、没有长任务的场景,则完全不需要为 Tasks 改动。

五、总结

  • Tasks 是什么:让 tools/call 返回异步任务句柄的官方 MCP 扩展,替代同步阻塞;
  • 三个方法tasks/get 轮询、tasks/update 补输入、tasks/cancel 取消;
  • 适用对象:渲染、调研、部署等分钟级以上工具调用,让 Agent 可以并行发任务、断线不丢进度;
  • 趋势:Tasks 已被列入 MCP 新路线图,预计从扩展晋升为核心协议——现在是学习的最佳时机。

延伸阅读:想搞懂 Tasks 依赖的无状态核心,可以读本站《MCP 协议 2026 版有什么新变化?一文读懂史上最大修订》;想了解 Agent 长任务不中断的通用机制,可看《什么是 Agent 持久化执行?AI Agent 长时任务不中断的核心技术》。