【大模型通信架构实战】基于 FastAPI 的 SSE MCP 服务自动构建指南

今天我们将使用FastAPI来构建 MCP 服务器,Anthropic 推出的这个MCP 协议,目的是让 AI 代理和你的应用程序之间的对话变得更顺畅、更清晰。FastAPI 基于 Starlette 和 Uvicorn,采用异步编程模型,可轻松处理高并发请求,尤其适合 MCP 场景下大模型与外部系统的实时交互需求,其性能接近 Node.js 和 Go,在数据库查询、文件操作等 I/O 密集型任务中表现卓越。

FastAPI基础知识

安装依赖
pip install uvicorn, fastapi
FastAPI服务代码示例
from fastapi import FastAPI
 
app = FastAPI()
 
@app.get("/")
async def root():
    return {"data": "Hello MCP!"}
uvicorn启动server
uvicorn server:app --reload

接下来,我们将基于FastAPI来开发MCP服务器

FastAPI开发MCP Server

FastAPI-MCP 一个零配置工具,用于自动将FastAPI端点暴露为模型上下文协议(MCP)工具。其特点在于简洁性和高效性,以下是一些主要特点:

  • 直接集成:不需要复杂的设置,直接集成到FastAPI应用中。
  • 自动转换:无需手动编写代码,自动将FastAPI端点转换为MCP工具。
  • 灵活性:支持自定义MCP工具,与自动生成的工具一同使用。
  • 性能:基于Python 3.10+和FastAPI,保证了高性能的API服务。
  • 文档友好:保持了原有的API文档,方便开发者使用和理解。
安装依赖
pip install fastapi-mcp
MCP服务代码示例
from fastapi import FastAPI
from fastapi_mcp import add_mcp_server
from typing import Any
import httpx

# 常量
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"

app = FastAPI()

mcp_server = add_mcp_server(
    app,                                    # FastAPI 应用
    mount_path="/mcp",                      # MCP 服务器挂载的位置
    name="Weather MCP Server",              # MCP 服务器的名字
    describe_all_responses=True,            # 默认是 False。就像打开一个百宝箱,把所有可能的响应模式都包含在工具描述里,而不只是成功的响应。
    describe_full_response_schema=True      # 默认是 False。把完整的 JSON 模式包含在工具描述里,而不只是一个对大语言模型友好的响应示例。
)


async def make_nws_request(url: str) -> dict[str, Any] | None:
    """向 NWS API 发起请求,并进行错误处理。"""
    headers = {
        "User-Agent": USER_AGENT,
        "Accept": "application/geo+json"
    }
    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(url, headers=headers, timeout=30.0)
            response.raise_for_status()
            return response.json()
        except Exception:
            return None


@mcp_server.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
    """获取地点的天气预报。
    参数:
        latitude: 地点的纬度
        longitude: 地点的经度
    """
    points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"
    points_data = await make_nws_request(points_url)

    if not points_data:
        return "Unable to fetch forecast data for this location."

    forecast_url = points_data["properties"]["forecast"]
    forecast_data = await make_nws_request(forecast_url)

    if not forecast_data:
        return "Unable to fetch detailed forecast."

    periods = forecast_data["properties"]["periods"]
    forecasts = []
    for period in periods[:5]:
        forecast = f"""
{period['name']}:
Temperature: {period['temperature']}°{period['temperatureUnit']}
Wind: {period['windSpeed']} {period['windDirection']}
Forecast: {period['detailedForecast']}
"""
        forecasts.append(forecast)
    return "\n---\n".join(forecasts)
启动 mcp server
uvicorn server:app --host 0.0.0.0 --port 8001 --reload

启动 mcp inspector 调试
CLIENT_PORT=8081 SERVER_PORT=8082  npx -y @modelcontextprotocol/inspector

当集成了 MCP 的 FastAPI 应用运行起来后,可以用任何支持 SSE 的 MCP 客户端连接它。我们这里还是使用 mcp inspector 进行调试,通过 SSE 连接 Weather MCP 服务器。

SSE是一种单向通信的模式,所以它需要配合HTTP Post来实现客户端与服务端的双向通信。严格的说,这是一种HTTP Post(客户端->服务端) + HTTP SSE(服务端->客户端)的伪双工通信模式,区别于WebSocket双向通信

如果MCP客户端不支持SSE,可以使用mcp-proxy连接MCP服务器。本质上是本地通过stdio连接到mcp-proxy,再由mcp-proxy通过SSE连接到MCP Server上。

mcp-proxy 支持两种模式,stdio to SSESSE to stdio

安装 mcp-proxy

uv tool install mcp-proxy

配置 claude_desktop_config.json

{
  "mcpServers": {
    "weather-api-mcp-proxy": {
        "command": "mcp-proxy",
        "args": ["http://127.0.0.1:8001/mcp"]
    }
  }
}

FastAPI-MCP目前还有很多功能不完善,我们将持续关注进展。

大模型基建工程总结

FastAPI 构建 MCP 服务器的核心价值在于:通过类型安全的异步接口,将企业现有能力快速转化为大模型可调用的标准化服务。这种架构既保留了 FastAPI 的高效开发体验,又通过 MCP 协议实现了与前沿 AI 技术的无缝对接,同时结合 Docker 和 Kubernetes 实现弹性伸缩部署,可以快速应对大模型调用量的突发增长,是构建下一代智能系统的理想选择。

如何高效转型AI大模型领域?

学习AI 的门槛不高,给大家推荐一个非常优质的 AI 大模型资料,由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。入口直接给放下面了,扫描下方二维码即可领取↓

在这里插入图片描述

AI大模型知识脑图

在这里插入图片描述

AI大模型精选书籍

在这里插入图片描述

AI大模型视频教程

在这里插入图片描述

AI大模型面试场景题

在这里插入图片描述

在这里插入图片描述

智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

在这里插入图片描述

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

在这里插入图片描述

<think>我们正在讨论如何使用FastAPI实现MCP服务。根据引用内容,FastAPI-MCP是一个工具,它可以帮助我们将FastAPI应用转换为MCP服务。具体步骤和实现方法如下: 1. **环境准备与依赖安装**:首先需要安装FastAPIfastapi_mcp库。可以使用pip进行安装。 2. **创建FastAPI应用**:使用FastAPI创建一个基本的应用实例。 3. **挂载MCP服务器**:使用fastapi_mcp库中的`add_mcp_server`函数将MCP服务器挂载到FastAPI应用上,并指定挂载路径和名称。 4. **运行应用**:使用uvicorn或其他ASGI服务器运行应用。 根据引用[3]的代码示例,我们可以这样实现: ```python from fastapi import FastAPI from fastapi_mcp import add_mcp_server # 创建FastAPI应用 app = FastAPI() # 挂载MCP服务器 add_mcp_server( app, # 你的FastAPI应用 mount_path="/mcp", # 挂载MCP服务器的路径 name="MyAPIMCP", # MCP服务器的名称 ) ``` 这样,我们就创建了一个基本的MCP服务。但是,我们可能还需要定义一些工具(tools)以供AI模型调用。引用[4]中提到了一个示例文件(05_reregister_tools_example.py),我们可以参考它来注册工具。 具体步骤: 1. 定义工具函数:这些函数将作为AI模型可以调用的工具。 2. 使用`register_tool`装饰器注册这些函数,以便MCP服务能够识别它们。 例如,假设我们有一个获取天气的工具函数: ```python from fastapi_mcp import register_tool @register_tool def get_weather(city: str) -> str: """ 根据城市名获取天气信息 Args: city (str): 城市名称 Returns: str: 天气信息 """ # 这里实现获取天气的逻辑,例如调用第三方API return f"{city}的天气是晴天" ``` 然后,我们将这个工具注册到MCP服务中。注意,上面的`register_tool`装饰器会自动将工具注册到MCP中。 最后,我们运行应用: ```bash uvicorn main:app --reload ``` 这样,MCP服务就运行在指定的路径(例如:/mcp)下,AI模型可以通过这个端点来调用我们注册的工具。 另外,引用[1]提到,FastAPI的高性能特性(异步支持和优化的请求处理流程)使得构建MCP服务器具有高性能。同时,FastAPI的模块化和插件系统也方便我们扩展MCP服务器。 总结步骤: 1. 安装依赖:fastapi, uvicorn, fastapi_mcp 2. 创建FastAPI应用 3. 使用`add_mcp_server`挂载MCP服务 4. 使用`register_tool`注册工具函数 5. 运行应用 注意:fastapi_mcp的具体用法可能还需要参考其文档(引用[4]提供的链接)。 如果我们需要更复杂的功能,比如跨模态上下文传递,可能需要扩展MCP协议,但根据当前问题,我们只需要实现一个基本的MCP服务即可。 现在,我们根据上述步骤编写一个完整的示例。</think>### 使用 FastAPI 实现 MCP 服务的完整指南 #### 1. **环境准备与依赖安装** ```bash # 创建虚拟环境(可选) python -m venv mcp-env source mcp-env/bin/activate # 安装核心依赖 pip install fastapi uvicorn fastapi-mcp ``` #### 2. **基础服务搭建** ```python from fastapi import FastAPI from fastapi_mcp import add_mcp_server # 初始化 FastAPI 应用 app = FastAPI(title="AI 服务网关") # 挂载 MCP 服务器 add_mcp_server( app=app, # FastAPI 应用实例 mount_path="/mcp", # MCP 服务端点路径 name="AIServiceMCP", # MCP 服务名称 description="AI 模型集成平台" # 服务描述 ) ``` #### 3. **注册自定义功能工具** ```python from fastapi_mcp import register_tool # 注册天气查询工具 @register_tool async def get_weather(location: str) -> dict: """ 获取指定位置的天气信息 参数: - location: 城市名称 (如 "北京") 返回: - 包含温度、天气状况的字典 """ # 这里实现实际的天气API调用 return {"location": location, "temp": 25, "condition": "晴"} # 注册股票查询工具 @register_tool async def get_stock_price(symbol: str) -> float: """ 查询股票实时价格 参数: - symbol: 股票代码 (如 "AAPL") 返回: - 当前股价 """ # 这里实现实际的股票API调用 return 175.43 ``` #### 4. **配置上下文管理** ```python from fastapi_mcp import McpContext # 自定义上下文处理器 @app.middleware("http") async def add_context(request: Request, call_next): # 创建MCP上下文对象 context = McpContext( user_id=request.headers.get("X-User-ID"), session_id=request.cookies.get("session_id") ) # 将上下文附加到请求状态 request.state.mcp_context = context response = await call_next(request) # 更新上下文状态(如保存对话历史) context.save_session_data() return response ``` #### 5. **启动服务** ```bash # 使用 Uvicorn 启动服务 uvicorn main:app --reload --port 8000 ``` #### 6. **服务验证** 访问以下端点验证服务状态: - MCP 服务文档:`http://localhost:8000/mcp/docs` - 工具列表:`http://localhost:8000/mcp/tools` - 服务健康检查:`http://localhost:8000/mcp/health` #### 7. **AI 模型集成示例** ```python # 在 FastAPI 路由中使用 MCP @app.post("/ask-ai") async def ask_ai(question: str, request: Request): # 获取当前上下文 context = request.state.mcp_context # 构建 AI 请求 ai_response = await context.query_ai( prompt=question, model="gpt-4", max_tokens=500 ) # 处理可能的工具调用 if ai_response.tool_calls: results = await execute_tools(ai_response.tool_calls) return {"answer": results} return {"answer": ai_response.content} ``` #### 8. **高级配置选项** ```python # 高级 MCP 配置 add_mcp_server( app=app, mount_path="/mcp", name="AdvancedMCP", # 性能优化配置 max_workers=8, # 最大工作线程数 rate_limit="100/minute", # 请求速率限制 # 安全配置 api_keys=["SECRET_KEY_1", "SECRET_KEY_2"], # 模型集成 default_model="claude-3", fallback_model="gpt-3.5-turbo" ) ``` #### 关键优势与特性 1. **高性能基础**:继承 FastAPI 的异步特性,支持高并发请求处理[^1] 2. **自动文档生成**:内置 OpenAPI 文档,自动展示所有注册工具 3. **上下文管理**:支持跨请求的上下文持久化 4. **工具热注册**:运行时动态添加/移除工具函数 5. **统一错误处理**:标准化错误响应格式 6. **多模型支持**:可同时集成多个AI模型后端 > 实际部署时建议添加: > - API网关层(如 Nginx) > - 监控系统(Prometheus/Grafana) > - 分布式缓存(Redis) > - 消息队列(RabbitMQ/Kafka)用于异步任务处理 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值