跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

基于 FastAPI 自动构建 SSE MCP 服务器

综述由AI生成利用 FastAPI 结合 fastapi-mcp 库,实现将 API 端点自动转换为 MCP 工具。通过 SSE 协议支持大模型与外部系统的实时交互,演示了天气查询服务的集成流程。介绍使用 mcp inspector 调试及 mcp-proxy 桥接方案,解决客户端不支持 SSE 问题。保留类型安全异步接口优势,便于企业能力快速转化为大模型可调用的标准化服务。

内存管理发布于 2025/12/7更新于 2026/6/1334 浏览
基于 FastAPI 自动构建 SSE MCP 服务器

在构建大模型应用时,Anthropic 推出的 MCP 协议能让 AI 代理与应用程序之间的对话更顺畅。FastAPI 基于 Starlette 和 Uvicorn,采用异步编程模型,处理高并发请求的能力很强,尤其适合大模型与外部系统的实时交互场景,性能接近 Node.js 和 Go。

文章配图

FastAPI 基础准备

先安装核心依赖:

pip install uvicorn fastapi

写一个简单的服务代码:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"data": "Hello MCP!"}

启动服务:

uvicorn server:app --reload

这里 server 指的是你的 Python 文件名(例如 server.py),app 是实例名。

开发 MCP Server

为了简化开发,可以使用 fastapi-mcp 库。它能把 FastAPI 端点直接暴露为 MCP 工具,无需手动编写转换逻辑。

特点:

  • 零配置集成:直接挂载到 FastAPI 应用中。
  • 自动转换:端点自动变为 MCP 工具。
  • 灵活扩展:支持自定义工具与自动生成工具混用。
  • 文档友好:保留原有的 API 文档结构。
安装依赖
pip install fastapi-mcp
编写服务代码

下面是一个调用天气 API 的示例,展示了如何将业务逻辑封装为 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 服务器
mcp_server = add_mcp_server(
    app,
    mount_path="/mcp",
    name="Weather MCP Server",
    describe_all_responses=True,      # 包含所有可能的响应模式
    describe_full_response_schema=True # 包含完整的 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)
启动服务
uvicorn server:app --host 0.0.0.0 --port 8001 --reload

文章配图

调试与连接

运行起来后,可以用支持 SSE 的 MCP 客户端连接。推荐使用 mcp inspector 进行调试:

CLIENT_PORT=8081 SERVER_PORT=8082 npx -y @modelcontextprotocol/inspector

文章配图

文章配图

注意:SSE 是一种单向通信模式,配合 HTTP Post 实现伪双工通信。如果客户端不支持 SSE,可以使用 mcp-proxy 桥接。

文章配图

mcp-proxy 支持两种模式:stdio to SSE 和 SSE to stdio。本质是本地通过 stdio 连接到 proxy,再由 proxy 通过 SSE 连接到 Server。

安装 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 base_url 将 API 挂载至 mcp_server,实现更灵活的架构。

总结

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

目录

  1. FastAPI 基础准备
  2. 开发 MCP Server
  3. 安装依赖
  4. 编写服务代码
  5. 常量定义
  6. 初始化 MCP 服务器
  7. 启动服务
  8. 调试与连接
  9. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 群智能算法:灰狼优化算法(GWO)原理与实现
  • Mac 电脑安装 ADB 环境完整指南
  • OpenClaw iOS/Android 端部署教程:语音唤醒与随身 AI 助手
  • StableDiffusion-webui 本地部署与使用指南
  • Python 深度学习:融合选择性卷积与残差结构的 SKResNet 架构详解
  • PyCharm 安装通义灵码插件及使用指南
  • Dify 平台 Webhook 机制配置与使用场景
  • Flutter 三方库 webrtc_interface 的鸿蒙化适配指南
  • VSCode Copilot 接入智谱 GLM-4.6 实战指南
  • C++ 基础语法与算法初步:从循环到递归
  • Java 后端 Web API 开发实战:从架构到部署
  • 基于 Canal 实现 MySQL 到 Elasticsearch 的增量数据同步
  • 具身智能与视觉:机器人如何“看懂”世界?
  • 从零构建天气提醒机器人:Claude Code 如何重塑开发工作流
  • 多模态大语言模型核心论文精选与解析
  • 基于 Termux+Ubuntu 在安卓手机本地部署 OpenClaw 与 Llama 模型教程
  • DeepSeek-R1-Distill-Llama-70B 蒸馏模型推理能力与技术分析
  • 知网 AIGC 检测不通过:降低 AI 率的三步方法
  • n8n 集成飞书机器人:Webhook 签名与 Crypto 节点配置实战
  • React 实战:从零构建井字棋游戏

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online