[ PROMPT_NODE_24734 ]
background-tasks
[ SKILL_DOCUMENTATION ]
# 后台任务
> 使用进度跟踪功能异步运行长时间操作
> **提示:** 后台任务需要 `tasks` 可选扩展。请参阅下方的 [安装说明](#enabling-background-tasks)。
FastMCP 实现了 MCP 后台任务协议 ([SEP-1686](https://modelcontextprotocol.io/specification/2025-11-25/basic/utilities/tasks)),只需更改一个装饰器,即可为您的服务器提供生产就绪的分布式任务调度器。
> **提示:** **什么是 Docket?** FastMCP 的任务系统由 [Docket](https://github.com/chrisguidry/docket) 提供支持,该系统最初由 [Prefect](https://prefect.io) 构建,用于驱动 [Prefect Cloud](https://www.prefect.io/prefect/cloud) 的托管任务调度和执行服务,每天处理数百万个并发任务。Docket 现已向社区开源。
## 什么是 MCP 后台任务?
在 MCP 中,所有组件交互默认都是阻塞的。当客户端调用工具、读取资源或获取提示词时,它会发送请求并等待响应。对于耗时几秒或几分钟的操作,这会导致糟糕的用户体验。
MCP 后台任务协议通过以下方式解决了这个问题,允许客户端:
1. **启动** 一个操作并立即接收任务 ID
2. **跟踪** 操作运行时的进度
3. **检索** 完成后的结果
FastMCP 为您处理了所有这些工作。只需在装饰器中添加 `task=True`,您的函数即可获得完整的后台执行能力,包括进度报告、分布式处理和水平扩展。
### MCP 后台任务与 Python 并发
您始终可以在 FastMCP 服务器中使用 Python 的并发原语(asyncio、线程、多进程)或外部任务队列。FastMCP 只是 Python——您可以随心所欲地运行代码。
MCP 后台任务则不同:它们是 **协议原生** 的。这意味着支持任务协议的 MCP 客户端可以通过标准 MCP 接口启动操作、接收进度更新并检索结果。协调工作发生在协议层面,而不是您的应用程序代码内部。
## 启用后台任务
后台任务需要 `tasks` 扩展:
bash
pip install "fastmcp[tasks]>=3.0.0rc1"
在任何工具、资源、资源模板或提示词装饰器中添加 `task=True`。这会将该组件标记为支持后台执行。
python}
import asyncio
from fastmcp import FastMCP
mcp = FastMCP("MyServer")
@mcp.tool(task=True)
async def slow_computation(duration: i