通知演练
交互式练习:对照下面这个示例项目,逐步查看日志与进度通知在服务器端(通过 Context 发出)和客户端(通过回调接收)各自是如何实现的。点击"下一步"会自动打开对应文件并高亮相关代码。
教程步骤
让我们通过一个示例项目来更好地了解如何实现此功能。
工具函数会自动接收 'Context' 作为其最后一个参数。这个对象具有用于向客户端记录日志和报告进度的方法。
在您的工具函数中,调用 info()、warning()、debug() 或 error() 方法来为客户端记录不同类型的消息。还要调用 report_progress() 方法来估计工具调用剩余工作量。
客户端需要定义日志记录和进度回调,这些回调将在服务器发出日志或进度消息时自动被调用。这些回调应尝试向用户显示提供的日志记录和进度数据。
确保您将日志记录回调提供给 ClientSession,并将进度回调提供给 call_tool() 函数。
from mcp.server.fastmcp import FastMCP, Contextimport asynciomcp = FastMCP(name="Demo Server")@mcp.tool()async def add(a: int, b: int, ctx: Context) -> int:await ctx.info("Preparing to add...")await ctx.report_progress(20, 100)await asyncio.sleep(2)await ctx.info("OK, adding...")await ctx.report_progress(80, 100)return a + bif __name__ == "__main__":mcp.run(transport="stdio")