Python 使用 FastAPI 挂载多个 MCP 服务

半兽人 发表于: 2025-07-11   最后更新时间: 2025-12-02 13:57:33  
{{totalSubscript}} 订阅, 105 游览

Streamable HTTP 传输

注意:在生产部署中,Streamable HTTP 传输将取代 SSE 传输。

from mcp.server.fastmcp import FastMCP

# 有状态服务器(保持会话状态)
mcp = FastMCP("StatefulServer")

# 无状态服务器(无会话持久性)
mcp = FastMCP("StatelessServer", stateless_http=True)

# 无状态服务器(无会话持久性,无支持客户端的 sse 流)
mcp = FastMCP("StatelessServer", stateless_http=True, json_response=True)

# 使用 streamable_http 运行服务器
mcp.run(transport="streamable-http")

可以在 FastAPI 应用程序中挂载多个 MCP 服务:

# echo.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP(name="EchoServer", stateless_http=True)


@mcp.tool()
def echo(message: str) -> str:
    """A simple echo tool"""
    return f"Echo: {message}"
# math.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP(name="MathServer", stateless_http=True)


@mcp.tool()
def add_two(n: int) -> int:
    """Tool to add two to the input"""
    return n + 2
# main.py
import contextlib
from fastapi import FastAPI
from mcp.echo import echo
from mcp.math import math


# Create a combined lifespan to manage both session managers
@contextlib.asynccontextmanager
async def lifespan(app: FastAPI):
    async with contextlib.AsyncExitStack() as stack:
        await stack.enter_async_context(echo.mcp.session_manager.run())
        await stack.enter_async_context(math.mcp.session_manager.run())
        yield


app = FastAPI(lifespan=lifespan)
app.mount("/echo", echo.mcp.streamable_http_app())
app.mount("/math", math.mcp.streamable_http_app())

// 运行
import uvicorn
uvicorn.run(app)

基于你自身参数调整:

Type:Streamable HTTP
URL:http://127.0.0.1:8000/echo/mcphttp://127.0.0.1:8000/math/mcp

效果如下:

fastAPI mcp

参考来自

https://github.com/modelcontextprotocol/python-sdk?tab=readme-ov-file#streamable-http-transport

MCP
更新于 2025-12-02

查看MCP更多相关的文章或提一个关于MCP的问题,也可以与我们一起分享文章