在ASGI应用中集成FastMCP
将FastMCP服务器集成到现有的Starlette、FastAPI或其他ASGI应用程序中
虽然FastMCP提供独立的服务器功能,您也可以将FastMCP服务器集成到现有的Web应用程序中。这种方法适用于:
- 向现有网站或API添加MCP功能
- 将MCP服务器挂载到特定URL路径下
- 在单个应用中集成多个服务
- 利用现有的身份验证和中间件
请注意,所有FastMCP服务器都有一个run()方法可用于启动服务器。本指南主要关注与更广泛的ASGI框架的集成。
ASGI服务器
FastMCP服务器可以作为Starlette ASGI应用程序创建,便于直接托管或集成到现有应用中。
第一步是使用http_app()方法从您的FastMCP服务器获取一个Starlette应用实例:
http_app() 方法是 FastMCP 2.3.2 中新增的。在旧版本中,使用 sse_app() 进行 SSE 传输或使用 streamable_http_app() 进行 Streamable HTTP 传输。
两种方法都会返回一个可与其它ASGI兼容的Web框架集成的Starlette应用。
MCP服务器的端点挂载在根路径/mcp用于可流式HTTP传输,以及/sse用于SSE传输,不过您可以通过向http_app()方法传递path参数来更改这些路径:
运行服务器
要运行FastMCP服务器,您可以使用uvicorn ASGI服务器:
或者,从命令行:
自定义中间件
New in version: 2.3.2
您可以通过向应用创建方法传递中间件实例列表,为FastMCP ASGI应用添加自定义Starlette中间件:
Starlette 集成
New in version: 2.3.1
您可以将FastMCP服务器挂载到另一个Starlette应用程序中:
MCP端点将在生成的Starlette应用的/mcp-server/mcp路径下可用。
对于可流式传输的HTTP传输,您必须将生命周期上下文从FastMCP应用传递到生成的Starlette应用,因为嵌套的生命周期不会被识别。否则,FastMCP服务器的会话管理器将无法正确初始化。
嵌套挂载
您可以通过嵌套挂载创建复杂的路由结构:
在此设置中,MCP服务器可通过生成的Starlette应用程序的/outer/inner/mcp路径访问。
对于可流式传输的HTTP传输,您必须将生命周期上下文从FastMCP应用传递到外部Starlette应用,因为嵌套的生命周期不会被识别。否则,FastMCP服务器的会话管理器将无法正确初始化。
FastAPI集成
New in version: 2.3.1
FastAPI基于Starlette构建,因此您可以用类似的方式挂载FastMCP服务器:
MCP端点将在生成的FastAPI应用的/mcp-server/mcp路径下可用。
对于可流式传输的HTTP传输,您必须将生命周期上下文从FastMCP应用传递到生成的FastAPI应用,因为嵌套的生命周期不会被识别。否则,FastMCP服务器的会话管理器将无法正确初始化。
自定义路由
除了将您的FastMCP服务器添加到现有的ASGI应用程序中,您还可以向FastMCP服务器添加自定义Web路由,这些路由将与MCP端点一起公开。为此,请使用@custom_route装饰器。请注意,这比使用完整的ASGI框架灵活性较低,但对于向独立服务器添加健康检查等简单端点非常有用。
当FastMCP应用被挂载到您的Web应用程序中时,这些路由将被包含在内。