[ PROMPT_NODE_24748 ]
中间件 (Middleware)
[ SKILL_DOCUMENTATION ]
# 中间件 (Middleware)
> 使用中间件拦截和修改请求与响应,为你的 MCP 服务器添加横切功能。
中间件添加了适用于多个操作的行为——如身份验证、日志记录、速率限制或请求转换——而无需修改单个工具或资源。
> **提示:** MCP 中间件是 FastMCP 特有的概念,不属于官方 MCP 协议规范的一部分。
## 概述
MCP 中间件在服务器的操作周围形成了一个管道。当请求到达时,它会按顺序流经每个中间件——每个中间件都可以在传递请求之前检查、修改或拒绝它。操作完成后,响应会以相反的顺序流回相同的中间件。
请求 → 中间件 A → 中间件 B → 处理程序 → 中间件 B → 中间件 A → 响应
这种双向流意味着中间件可以:
* **预处理**:验证身份、记录传入请求、检查速率限制
* **后处理**:转换响应、记录计时指标、一致性地处理错误
关键决策点是 `call_next(context)`。调用它会继续链条;不调用它则会完全停止处理。
python
from fastmcp import FastMCP
from fastmcp.server.middleware import Middleware, MiddlewareContext
class LoggingMiddleware(Middleware):
async def on_message(self, context: MiddlewareContext, call_next):
print(f"→ {context.method}")
result = await call_next(context)
print(f"← {context.method}")
return result
mcp = FastMCP("MyServer")
mcp.add_middleware(LoggingMiddleware())
### 执行顺序
中间件按照添加到服务器的顺序执行。第一个中间件在进入时最先运行,在退出时最后运行:
python
from fastmcp import FastMCP
from fastmcp.server.middleware.error_handling import ErrorHandlingMiddleware
from fastmcp.server.middleware.rate_limiting import RateLimitingMiddleware
from fastmcp.server.middleware.logging import LoggingMiddleware
mcp = FastMCP("MyServer")
mcp.add_middleware(ErrorHandlingMiddleware()) # 先进,后出
mcp.add_middleware(RateLimitingMiddleware()) # 第二进,第二出
mcp.add_middleware(LoggingMiddleware()) # 第三进,先出
这种顺序很重要。将错误处理放在前面,以便捕获后续所有中间件的异常。将日志记录放在后面,以便在其他中间件处理完请求后记录实际的执行情况。
### 服务器组合
当