FastMCP高级特性之Message Handling

消息

前面讲到,服务端可以发送消息。对于发送的消息,可以使用自定义消息处理器处理 MCP 消息、请求和通知。

MCP 客户端可以从服务器接收各种类型的消息,包括需要响应的请求和不需要响应的通知。消息处理器提供了一种统一的方式来处理所有这些消息。

Function-Based Handler

处理消息最简单的方法是使用一个接收所有消息的函数:

python 复制代码
from fastmcp import Client

async def message_handler(message):
    """Handle all MCP messages from the server."""
    if hasattr(message, 'root'):
        method = message.root.method
        print(f"Received: {method}")
        
        # Handle specific notifications
        if method == "notifications/tools/list_changed":
            print("Tools have changed - might want to refresh tool cache")
        elif method == "notifications/resources/list_changed":
            print("Resources have changed")

client = Client(
    "my_mcp_server.py",
    message_handler=message_handler,
)

Message Handler Class

为了实现细粒度的目标定位,FastMCP 提供了一个MessageHandler类,您可以通过子类化该类来利用特定的钩子:

python 复制代码
from fastmcp import Client
from fastmcp.client.messages import MessageHandler
import mcp.types

class MyMessageHandler(MessageHandler):
    async def on_tool_list_changed(
        self, notification: mcp.types.ToolListChangedNotification
    ) -> None:
        """Handle tool list changes specifically."""
        print("Tool list changed - refreshing available tools")

client = Client(
    "my_mcp_server.py",
    message_handler=MyMessageHandler(),
)

Available Handler Methods

python 复制代码
Message Handler Methods
​
on_message(message) -> Any MCP message
Called for ALL messages (requests and notifications)
​
on_request(request) -> mcp.types.ClientRequest
Called for requests that expect responses
​
on_notification(notification) -> mcp.types.ServerNotification
Called for notifications (fire-and-forget)
​
on_tool_list_changed(notification) -> mcp.types.ToolListChangedNotification
Called when the server's tool list changes
​
on_resource_list_changed(notification) -> mcp.types.ResourceListChangedNotification
Called when the server's resource list changes
​
on_prompt_list_changed(notification) -> mcp.types.PromptListChangedNotification
Called when the server's prompt list changes
​
on_progress(notification) -> mcp.types.ProgressNotification
Called for progress updates during long-running operations
​
on_logging_message(notification) -> mcp.types.LoggingMessageNotification
Called for log messages from the server

示例: 处理工具变更消息

python 复制代码
from fastmcp.client.messages import MessageHandler
import mcp.types

class ToolCacheHandler(MessageHandler):
    def __init__(self):
        self.cached_tools = []
    
    async def on_tool_list_changed(
        self, notification: mcp.types.ToolListChangedNotification
    ) -> None:
        """Clear tool cache when tools change."""
        print("Tools changed - clearing cache")
        self.cached_tools = []  # Force refresh on next access

client = Client("server.py", message_handler=ToolCacheHandler())

处理请求

虽然消息处理器会接收服务器发起的请求,但对于大多数用例,你应该改用专用的回调参数:

bash 复制代码
Sampling requests: 使用 sampling_handler
Progress requests: 使用 progress_handler
Log requests: 使用 log_handler

消息处理器主要用于监控和处理通知,而非响应请求。

相关推荐
云智慧AIOps社区2 分钟前
智能巡检机器人应用场景解析:机房巡检、园区安防、管廊巡视与展厅导览
人工智能·机器人·具身智能·智能巡检机器人·企业级智能巡检机器人·机房巡检机器人·导览机器人
EnCi Zheng5 分钟前
Agent 如何进行工具调用:从一次 Function Calling 到生产级工具编排的完整链路
大数据·人工智能·agent·ai编程·工具调用
赛博守夜人7 分钟前
AI安全攻防与治理之十四:AI 安全测试不能脱离传统安全,Web、API、移动端与模型攻击面的组合拳
前端·人工智能·安全
lovingsoft9 分钟前
AI 时代未来软件形态趋势:从固定功能应用,走向意图驱动、智能体原生的柔性系统-浅析
人工智能
GlobalInfo11 分钟前
重磅发布 | 2026年船体清洁机器人行业研究报告:市场规模、发展前景与十五五战略地图
大数据·人工智能·机器人
海宇服务14 分钟前
零信任架构实战:基于海宇全能小微企业报告构建自动化园区商户免押租赁资信核验网关
大数据·人工智能·架构·自动化
云上先途15 分钟前
生成式答案关键点标注,怎么区分核心有效信息和冗余话术?
人工智能
Nuanyt23 分钟前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
吴卫斌26 分钟前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
故七月38 分钟前
AI 搜索排名怎么查?三个层面的自查方法
人工智能