MCP的logging和progress功能具体是如何实现的?

摘要:除了基础的Prompt、Resource和Tool概念,FastMCP还提供了以下功能:Sampling、Elicitation、Logging、Progress、Proxy、Middleware、Composition和Authentic
前言 截至目前(2025年9月19日),除了基础的Prompt、Resource和Tool概念,FastMCP还提供了以下功能:Sampling、Elicitation、Roots、Logging、Progress、Proxy、Middleware、Composition和Authentication等功能 Sampling,采样,在server端调用client的llm,实现功能解耦 Elicition,征询,实现人工介入 Roots,Client告知Server可访问的资源 Logging,将Server日志发送给Client Progress,Server端将进度发送给Client Proxy,代理其它MCP Server Middleware,拦截MCP通信中的请求和响应 Composition,Server端将多个servers组合成一个server对外提供 Authentication,Client和Server之间安全认证 其中Sampling和Elicitation在我的实际开发中用到的比较多,所以我在前面章节中单独拎出来介绍了。FastMCP官方文档也说了Authentication还在迅速迭代中,虽然已经有了相关文档,但本文暂时就不涉及了,等这个功能稳定了再具体细说。剩下的功能会在本文中一次性全部介绍完,篇幅较长,可以根据章节名跳转到自己需要关注的内容。本文大部分参考自官方文档。 Roots Roots 是客户端向服务器告知其可访问资源的一种机制。服务器可利用此信息调整行为或提供更相关的响应。 静态Roots from fastmcp import Client client = Client( "my_mcp_server.py", roots=["/path/to/root1", "/path/to/root2"] ) 动态Roots from fastmcp import Client from fastmcp.client.roots import RequestContext async def roots_callback(context: RequestContext) -> list[str]: print(f"Server requested roots (Request ID: {context.request_id})") return ["/path/to/root1", "/path/to/root2"] client = Client( "my_mcp_server.py", roots=roots_callback ) Logging Logging,从服务器向 MCP 客户端发送消息。FastMCP提供了一个logger(fastmcp.utilities.logging.get_logger()),也可以用python标准库的logging。 服务器日志功能允许 MCP 工具向客户端发送调试(debug)、信息(info)、警告(warning)和错误(error)级别的消息。这有助于用户了解函数执行过程,在开发和运行阶段辅助调试。一般用于以下场景: 调试:发送详细的执行信息,帮助诊断问题 进度可见性:让用户了解工具当前正在执行的操作 错误报告:向客户端传达问题及其上下文 审计追踪:为合规或分析目的生成工具执行记录 与标准 Python 日志不同,MCP 服务器 Logging 会直接将消息发送至客户端,使其在客户端界面或日志中可见。 Server 示例 在任意tool函数中使用Context提供的日志方法: from fastmcp import FastMCP, Context mcp = FastMCP("custom") @mcp.tool async def analyze_data(data: list[float], ctx: Context) -> dict: """通过全面日志记录分析数值数据。
阅读全文