[ PROMPT_NODE_24754 ]
progress-reporting
[ SKILL_DOCUMENTATION ]
# 进度报告
> 通过 MCP 上下文向客户端更新长时间运行操作的进度。
进度报告允许 MCP 工具通知客户端有关长时间运行操作的进度。客户端可以显示进度指示器,并在耗时任务期间提供更好的用户体验。
## 基本用法
使用 `ctx.report_progress()` 向客户端发送进度更新。该方法接受一个 `progress` 值(表示已完成的工作量)和一个可选的 `total`(表示工作的总范围)。
python
from fastmcp import FastMCP, Context
import asyncio
mcp = FastMCP("ProgressDemo")
@mcp.tool
async def process_items(items: list[str], ctx: Context) -> dict:
"""处理项目列表并提供进度更新。"""
total = len(items)
results = []
for i, item in enumerate(items):
await ctx.report_progress(progress=i, total=total)
await asyncio.sleep(0.1)
results.append(item.upper())
await ctx.report_progress(progress=total, total=total)
return {"processed": len(results), "results": results}
## 进度模式
| 模式 | 描述 | 示例 |
| ------------- | -------------------------------- | --------------------------------- |
| 百分比 | 0-100 的进度百分比 | `progress=75, total=100` |
| 绝对值 | 已知总数下的已完成项数 | `progress=3, total=10` |
| 不确定 | 无已知终点的进度 | `progress=files_found` (无 total) |
对于多阶段操作,将每个阶段映射到总进度范围的一部分。一个四阶段操作可以将 0-25% 分配给验证,25-60% 给导出,60-80% 给转换,80-100% 给导入。
## 客户端要求
进度报告要求客户端支持进度处理。客户端必须在初始请求中发送 `progressToken` 才能接收进度更新。如果未提供进度令牌,进度调用将无效(不会报错)。
有关实现客户端进度处理的详细信息,请参阅客户端进度(Client Progress)。
> ## 文档索引
> 获取完整文档索引:https://gofastmcp.com/llms.txt
> 在进一步探索之前,请使用此文件发现所有可用页面。