大家好,我是何三,80后老猿,独立开发者

今天我要分享一个令人兴奋的技术突破——如何让你的FastAPI应用摇身一变成为MCP服务器,为大型语言模型(LLM)提供访问私有数据和执行特定操作的能力。这项技术由Anthropic公司设计,堪称大模型领域的"USB接口",将彻底改变我们与AI交互的方式。

什么是MCP?为什么它如此重要?

MCP(Model Context Protocol)是Anthropic公司设计的一项标准协议,用于规范大模型与外部系统的对接方式。简单来说,它就像硬件领域的USB或Type-C接口,为AI大脑提供了连接"手脚"的标准方式。

当前大模型面临的最大限制是什么?它们拥有强大的"大脑",但缺乏"手脚"——无法直接访问企业内部或个人私有数据,也无法执行具体操作。比如,大模型连发邮件这样简单的任务都完成不了,因为它无法获取你的邮箱账号和密码。

MCP协议的出现完美解决了这个问题。通过MCP,大模型可以: - 访问浏览器 - 操作数据库 - 控制鼠标键盘 - 与机器人交互 - 执行各种原本无法完成的任务

FastAPI与MCP的完美结合

FastAPI作为Python生态中最受欢迎的现代Web框架之一,以其高性能、易用性和强大的类型提示系统著称。现在,我们可以将FastAPI应用轻松转换为MCP服务器,为大模型提供丰富的API服务。

FastAPI的核心优势

在深入MCP集成前,让我们快速回顾FastAPI的主要特性: 1. 高性能:基于Starlette和Pydantic,性能媲美NodeJS和Go 2. 异步支持:原生支持async/await,轻松处理高并发 3. 自动文档:自动生成Swagger UI和ReDoc文档 4. 数据验证:利用Pydantic进行强大的输入数据验证 5. 依赖注入:灵活处理认证、数据库连接等依赖项 6. 类型提示:提高代码可读性和开发效率

这些特性使FastAPI成为构建MCP服务器的理想选择。

实战:将FastAPI应用转为MCP服务器

下面我将通过一个完整示例,展示如何将FastAPI应用改造为MCP服务器。这个示例将允许大模型查询服务器上的桌面文件列表。

环境准备

首先安装必要的依赖:

pip install fastapi uvicorn mcp

创建FastAPI-MCP服务器

新建一个file_server.py文件,添加以下代码:

import os
from fastapi import FastAPI
from mcp.server.fastmcp import FastMCP

app = FastAPI()
mcp = FastMCP(app)  # 将FastAPI应用包装为MCP服务器

@mcp.tool()
def get_desktop_files():
    """获取桌面上的文件列表"""
    return os.listdir(os.path.expanduser("~/Desktop"))

@app.get("/")
async def root():
    return {"message": "FastAPI-MCP Server is running!"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

这段代码做了几件重要的事情: 1. 创建标准的FastAPI应用 2. 使用FastMCP包装器将应用转为MCP服务器 3. 通过@mcp.tool()装饰器暴露get_desktop_files函数给MCP客户端 4. 保留了FastAPI原有的路由功能

配置MCP客户端

在Cursor等支持MCP的客户端中,我们需要配置MCP服务器连接。编辑MCP配置文件(通常是mcp.json):

{
  "mcpServers": {
    "desktopfiles": {
      "command": "python file_server.py"
    }
  }
}

测试MCP功能

启动服务器后,在支持MCP的客户端(如Cursor)中,你可以直接询问: "我的桌面上有哪些文件?"

客户端会自动发现MCP服务器提供的get_desktop_files工具,并调用它获取结果。

进阶:构建更强大的MCP服务

上面的例子展示了基础功能,现在我们来看一个更复杂的示例,结合FastAPI的异步特性和MCP的强大能力。

异步数据库查询示例

from fastapi import FastAPI
from mcp.server.fastmcp import FastMCP
from typing import List
from pydantic import BaseModel
import asyncpg

app = FastAPI()
mcp = FastMCP(app)

class User(BaseModel):
    id: int
    name: str
    email: str

# 模拟数据库连接池
async def get_db_pool():
    return await asyncpg.create_pool(
        user="your_user",
        password="your_password",
        database="your_db",
        host="localhost"
    )

@mcp.tool()
async def query_users_by_department(department: str) -> List[User]:
    """根据部门查询用户列表

    Args:
        department: 部门名称,如'技术部'、'市场部'
    """
    pool = await get_db_pool()
    async with pool.acquire() as conn:
        rows = await conn.fetch(
            "SELECT id, name, email FROM users WHERE department = $1", 
            department
        )
        return [User(**row) for row in rows]

@app.get("/users/{department}")
async def get_users(department: str):
    users = await query_users_by_department(department)
    return {"users": users}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

这个示例展示了: 1. 使用FastAPI的异步特性执行数据库查询 2. 通过Pydantic模型确保数据格式 3. 同时提供MCP接口和传统REST API 4. 详细的文档字符串帮助大模型理解接口用途

MCP开发最佳实践

根据我的经验,开发MCP服务时应注意以下几点:

  1. 详尽的文档字符串:MCP服务的备注是给大模型看的,它通过备注理解接口功能。未来程序员写备注将成为重要工作。

  2. 清晰的类型提示:充分利用Python的类型提示和Pydantic模型,帮助MCP客户端理解数据结构。

  3. 错误处理:为MCP工具提供友好的错误消息,帮助大模型理解问题所在。

  4. 安全性:特别注意权限控制,确保MCP接口不会暴露敏感数据或执行危险操作。

  5. 性能优化:对于耗时操作,考虑使用FastAPI的BackgroundTasks或异步执行。

应用场景展望

FastAPI-MCP组合的应用场景极为广泛:

  1. 企业知识库访问:让大模型安全查询企业内部文档
  2. 个人数据助理:管理日程、邮件、笔记等个人数据
  3. 开发助手:直接与开发环境交互,执行代码、调试等任务
  4. 自动化办公:处理Excel、Word等办公文档
  5. 物联网控制:通过MCP控制智能家居设备

总结

将FastAPI应用转为MCP服务器是一个简单而强大的技术方案,它能够:

  1. 利用现有FastAPI基础设施快速构建MCP服务
  2. 同时支持传统API和MCP接口
  3. 充分发挥FastAPI的高性能和异步优势
  4. 通过类型提示和Pydantic确保数据一致性
  5. 为大型语言模型提供安全可控的私有数据访问能力

随着MCP标准的普及,我们正站在一个新时代的门槛上——AI将不再是被隔离的"大脑",而是能够与现实世界深度交互的智能助手。而FastAPI-MCP的组合,无疑将成为这一变革中的重要技术栈。

如果你对FastAPI-MCP集成有更多问题,或者想分享你的使用经验,欢迎在评论区留言讨论!

🔥 福利时间:关注公众号【何三笔记】,后台回复关键词「20250217」,即可免费领取《清华大学出品DeepSeek使用精髓》系列资料:

  • 【清华大学第一版】DeepSeek从入门到精通.pdf
  • 【清华大学第二版】DeepSeek赋能职场.pdf
  • 【清华大学第三版】普通人如何抓住DeepSeek红利.pdf
  • 【清华大学第四版】DeepSeek+DeepResearch:让科研像聊天一样简单.pdf
  • 【清华大学第五版】DeepSeek与AI幻觉.pdf

公众号二维码