当前位置: 首页 > news >正文

MCP 中间件机制正式发布:FastMCP 的「责任链」进化

大家好,这里是 CodeAgent

为了让Agent Service具备更强的扩展性与可维护性,FastMCP 在 2.9.0 版本中正式引入了 MCP Middleware(中间件)机制。

MCP middleware is a powerful concept that allows you to add cross-cutting functionality to your FastMCP server. Unlike traditional web middleware, MCP middleware is designed specifically for the Model Context Protocol, providing hooks for different types of MCP operations like tool calls, resource reads, and prompt requests.

────── Start ──────

📌 1. 全新中间件系统

FastMCP 现在支持构建中间件流水线,能够 统一拦截、处理、修改 MCP 协议中的所有关键请求与响应,例如:

  • 工具调用(Tool Calls)
  • 资源读取(Resource Reads)
  • Prompt 请求(Prompt Requests)

📌 2. 专为 MCP 协议设计

与传统 Web 中间件不同,MCP 中间件是为 Model Context Protocol (MCP) 量身打造的,支持标准的 JSON-RPC 通信模型,并适配多种传输方式(如 HTTP, stdio 等).

请注意哈: 它不是 MCP 官方协议规范的一部分,而是 FastMCP 的专属增强机制.

📌 3. 钩子支持 (Hook)

MCP Middleware 提供了多个扩展钩子(Hook),可以在请求生命周期的不同阶段介入逻辑处理,如下例子:

  • on_call_tool:在工具调用前拦截
  • on_read_resource:在资源读取前处理
  • on_get_prompt:在Prompt 请求时注入逻辑
  • on_request, on_response, on_message 等

📌 4. 嵌套挂载

中间件支持挂载在父子服务器的不同层级,形成清晰的上下文处理链,非常适合构建插件式服务架构, 提供了灵活的能力.

# Parent server with middleware
parent = FastMCP("Parent")
parent.add_middleware(AuthenticationMiddleware("token"))# Child server with its own middleware  
child = FastMCP("Child")
child.add_middleware(LoggingMiddleware())@child.tool
def child_tool() -> str:return "from child"# Mount the child server
parent.mount(child, prefix="child")

📌 5. 内置和自定义中间件能力

官方提供了一系列常用中间件示例, 包括:

  • 日志记录(Logging)
  • 耗时统计(Timing)
  • 速率限制(Rate Limiting)
  • 统一错误处理(Error Handling)

同时我们也可以通过 RawMiddleware 抽象类,实现完全自定义的中间件逻辑.


 

好处是什么 ?

架构更清晰:实现关注点分离

原本分散在各处的逻辑(如权限控制、日志追踪等),现在可以统一抽象为中间件模块,提高系统的模块化与可维护性.

安全性与稳定性提升

可用于统一处理:

  • 权限控制以及鉴权
  • 接口限流
  • 错误兜底与日志记录

快速构建通用能力

例如:

  • 自动上下文注入(如 token、userId)
  • 请求日志追踪
  • A/B 测试参数插入

支持构建复杂服务网络

结合挂载机制,支持构建 "父中间件 + 子服务" 的分层逻辑,适用于构建插件式架构.

────── End ──────

总的来说, MCP 中间件机制为 FastMCP 带来了"责任链式"的扩展架构能力,这是挺重要的一步, 期待接下来的更新.

原文直达

https://gofastmcp.com/servers/middleware

欢迎关注 CodeAgent, 周末愉快.

http://www.lqws.cn/news/564697.html

相关文章:

  • rollupOptions 详细讲解,如何优化性能
  • ali PaddleNLP docker
  • MATLAB GUI界面设计 第七章——高级应用
  • 机器学习8——神经网络下
  • 手机流量监控App(GlassWire)使用指南
  • WPF两种绑定方式的分析
  • ACE之ACE_Dev_Poll_Reactor
  • 高性能 List 转 Map 解决方案(10,000 元素)
  • 阿里云-接入SLS日志
  • HarmonyOS NEXT仓颉开发语言实战案例:健身App
  • HarmonyOS NEXT仓颉开发语言实战案例:小而美的旅行App
  • [分布式并行] 流水线并行 PP(NaivePP/GPipe/F-then-B/PipeDream/1F1B)
  • MCPA2APPT 智能化演示文稿系统:A2A、MCP、ADK 三大架构全流程自动化
  • 区块链技术: 稳定币USDC的工作原理
  • 【八股消消乐】消息队列优化—消息丢失
  • python pyecharts 数据分析及可视化(2)
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(三)- 职位数据统计分析
  • MAC 地址在 TCP 网络中的全面解析:从基础概念到高级应用
  • 【Redis原理】Redis事务与线程模型
  • StarRocks 3.5 新特性解读:Snapshot 快照恢复、大导入性能全面升级、分区管理更智能
  • opensuse/debian grub启动界面太模糊?
  • Wpf布局之WrapPanel面板!
  • 3.1.1、CAN总线单个设备环回测试
  • Git常见使用
  • WPF学习笔记(11)数据模板DataTemplate与数据模板选择器DataTemplateSelector
  • Mybatis学习总结
  • 鸿蒙5:自定义构建函数
  • 力扣第84题-柱状图中最大的矩形
  • Leetcode 3600. Maximize Spanning Tree Stability with Upgrades
  • Docker安装的gitlab配置ssl证书