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/mcp 或 http://127.0.0.1:8000/math/mcp
效果如下:

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