MCP 服务器与 FastAPI 的集成

什么是 MCP? AI 与 API 的通信

MCP(模型上下文协议) 作为一个标准化的通信层, 使 AI 代理(如 Claude 或 GPT, 即 MCP 客户端)能够理解并交互外部 API(MCP 服务器). 它为 API 提供了一种结构化的方式来描述其:

  • 功能(工具)
  • 输入模式
  • 执行方法

核心而言, MCP 将你的代码转换为 AI 代理(如 Claude)可无缝交互的自描述接口------消除了手动集成 API 或浏览复杂 API 文档的必要性.

  • 你可为自有应用创建 MCP 配置, 使其易于其他开发者集成, 或
  • 你可使用其他开发者创建的公开配置文件连接外部工具. 例如, Razorpay 已发布其 MCP 服务器, 使开发者能以极低成本快速将 LLM 应用与 Razorpay 的 API 集成.

本文将重点探讨第一个要点.

服务中的 MCP 服务器

在你的服务中集成 MCP 服务器可将其以 MCP 格式暴露, 使 AI 代理能够智能地发现并利用这些服务. 具体实现方式取决于你现有的服务架构.

选项 1: 将 MCP 与现有 FastAPI 应用程序集成

fastapi-mcp 库简化了将 FastAPI 应用程序的路由暴露为 MCP 工具的过程. 它会根据你的 FastAPI 路由定义自动生成必要的 MCP 模式, 并挂载一个专用的 /mcp 端点, AI 代理可通过该端点查询以了解你的 API 功能.

示例应用程序服务器:

复制代码
pip install fastapi-mcp
python 复制代码
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP

app = FastAPI()

@app.get("/bmi", operation_id="calculate_bmi", summary="this tool is used to calculate bmi based on weigth and height"))
def calculate_bmi(weight_kg: float, height_m: float):
    return {"bmi": weight_kg / (height_m ** 2)}

mcp = FastApiMCP(app, name="BMI MCP", description="Simple application to calculate BMI")
mcp.mount()

示例 MCP 配置(用于消费你服务器的环境):

json 复制代码
{
  "mcpServers": {
    "bmi_mcp_server": {
      "command": "mcp-proxy",
      "args": ["http://127.0.0.1:8000/mcp"]
    }
  }
}

我在本博客的后文中对此进行了详细讨论.

选项 2: 将 MCP 与你的 Python 项目集成

mcp 库提供了一种更直接的方式, 可在 Python 脚本中定义 MCP 工具. 它提供了如 @mcp.tool() 等装饰器, 可轻松将函数标记为可调用工具, 抽象掉 MCP 规范的底层细节.

示例 Python 项目:

复制代码
pip install mcp
python 复制代码
#my_script.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("My MCP Server")

@mcp.tool()
def add(x: int, y: int) -> int:
    return x + y

if __name__ == "__main__":
    mcp.run()

示例 MCP 配置(用于消费你服务器的环境):

json 复制代码
{
  "mcpServers": {
    "my-python-mcp-server": {
      "command": "uv",
      "args": [
        "run",
        "--with",
        "mcp[cli]",
        "mcp",
        "run",
        "my_script.py"
      ],
      "description": "Runs the Python MCP server using the 'mcp' CLI provided by the 'mcp' library, executed with the 'uv' runner."
    }
  }
}

这里有一个快速的 YouTube 视频, 可以帮助你设置这个.

选项 3: 将 MCP 与 Docker 容器集成

使用 Docker 可以将你的应用程序, MCP 服务器及其依赖项打包到一个便携且隔离的环境中. 你的 MCP 服务器在 Docker 容器中运行并暴露端口.

示例 Razorpay 的 MCP 配置:

json 复制代码
{
    "mcpServers": {
        "razorpay-mcp-server": {
            "command": "docker",
            "args": [
                "run",
                "--rm",
                "-i",
                "-e",
                "RAZORPAY_KEY_ID",
                "-e",
                "RAZORPAY_KEY_SECRET",
                "razorpay-mcp-server:latest"
            ],
            "env": {
                "RAZORPAY_KEY_ID": "your_razorpay_key_id",
                "RAZORPAY_KEY_SECRET": "your_razorpay_key_secret"
            }
        }
    }
}

理解 MCP 配置

MCP 配置文件(通常为 JSON 格式)相当于 MCP 客户端(如 Claude Desktop Agent)的操作手册, 用于描述如何启动并与你的 MCP 服务器进行通信.

连接到 MCP 服务器(消费者): 赋能 AI 使用你的工具

为了让 AI 代理和开发工具能够使用你暴露的工具, 它们需要知道如何启动并与你的 MCP 服务器进行通信. 这就是 MCP 配置文件的作用, 它提供了必要的详细信息, 如执行命令和 API 端点.

常见的 MCP 客户端:

  1. Claude Desktop Agent : 通过将 MCP 服务器的配置添加到 claude_desktop_config.json 文件中来配置你的 MCP 服务器. Claude 将读取这些配置并使描述的工具可供交互.
  2. 开发 IDE(Cursor, VS Code): 这些 IDE 可以配置为在本地运行 MCP 服务器, 使你能够直接在开发环境中测试和交互你的工具.

端到端: 在 Claude 桌面代理上创建 MCP 服务器以支持加法工具 API

让我们通过一个完整示例, 演示如何创建一个简单的 FastAPI 应用程序, 将其 add 功能作为 MCP 工具暴露出来, 并将其连接到 Claude 桌面代理.

步骤 1: 设置 FastAPI MCP 服务器

  1. 创建项目目录: 打开终端并为项目创建新目录:
bash 复制代码
mkdir sample-mcp-server
cd sample-mcp-server
  1. 创建虚拟环境: 建议使用虚拟环境来管理项目依赖项.
bash 复制代码
python -m venv venv
source venv/bin/activate  # On macOS/Linux
# venv\Scripts\activate  # On Windows
  1. 安装依赖项 : 安装所需库: FastAPI , fastapi-mcp , uvicorn (用于运行 FastAPI 的 ASGI 服务器), pandas (示例中使用), mcp_proxypython-dotenv . mcp-proxy 通过 SSE 传输将请求代理到远程 MCP 服务器. 例如, mcp-proxy 包裹你的真实服务器, 将 Claude 的 SSE 基于请求转换为 FastAPI 应用程序可理解的常规 HTTP 请求------反之亦然.

    pip install fastapi fastapi-mcp uvicorn pandas mcp_proxy python-dotenv

  2. 创建 main.py 文件 : 在你的 sample-mcp-server 目录中创建一个名为 main.py 的文件, 并将以下代码粘贴到其中:

python 复制代码
from fastapi import FastAPI
from pydantic import BaseModel
from fastapi_mcp import FastApiMCP
import pandas as pd
from dotenv import load_dotenv
import os

load_dotenv()
app = FastAPI()

@app.get("/add", operation_id="add_two_numbers")
async def add(a: int, b: int):
    """Add two numbers and return the sum."""
    summ = pd.DataFrame({"a": [a], "b": [b], "sum": [a+b]})
    result = int(summ.loc[0, "sum"])
    return {"sum": result}

mcp = FastApiMCP(
    app,
    name="Addition MCP",
    description="Simple API exposing adding operation",
)

mcp.mount()
  1. 运行 FastAPI MCP 服务器 : 在 sample-mcp-server 目录中打开终端并运行服务器:
c 复制代码
uvicorn main:app --reload --host 127.0.0.1 --port 8000 --log-level debug

你应看到服务器启动, 通常在 http://127.0.0.1:8000

步骤 2: 配置 Claude 桌面代理以连接到你的 MCP 服务器

  1. 定位 Claude 桌面配置文件 : claude_desktop_config.json 的位置可能因操作系统和 Claude 桌面代理版本而略有不同. MacOS 位置包括: ~Library/Application Support/Claude/claude_desktop_config.json

注意: 如果你没有安装 Claude 桌面应用程序, 你需要先安装它.

  1. 使用文本编辑器打开此文件. 如果 mcpServers 键不存在, 你需要添加它.

  2. 将你的 MCP 服务器配置添加到 claude_desktop_config.json : 修改 claude_desktop_config.json 文件以包含你的服务器详细信息. 确保命令, 参数和工作目录正确指向 mcp-proxy 可执行文件和你的项目目录.

sql 复制代码
{
  "mcpServers": {
    "addition-tool-mcp": {
      "command": "/Users/{user_name}/sample-mcp-server/venv/bin/mcp-proxy",
      "args": ["http://127.0.0.1:8000/mcp"],
      "cwd": "/Users/{user_name}/sample-mcp-server", 
      "env": {} #add if any
    }
  }
}
  1. 重新启动 Claude 桌面代理 : 关闭并重新打开 Claude 桌面代理应用程序. 你应该能够在以下位置看到正在运行的 MCP 服务器: Claude 设置 > 开发者

步骤 3: 在 Claude 中与你的 MCP 工具交互

  1. 打开 Claude: 启动 Claude 桌面代理.
  2. 与 Claude 互动: 你现在可以让 Claude 执行"添加两个数字"操作. 尝试以下提示:
  • "添加 5 和 10"
  • "23 和 42 的和是多少"
  1. Claude 应识别你的addition-tool-mcp工具, 根据 fastapi-mcp 提供的 MCP 描述理解其功能, 并通过 mcp-proxy 调用你 FastAPI 应用程序的 /add 端点. 你应在 Claude 的响应中看到加法结果.

总结一下

将 MCP 与 FastAPI 集成, 为构建可被 AI 代理无缝利用的智能应用程序开辟了令人兴奋的可能性. 随着 MCP 生态系统的持续发展, 掌握这一集成将成为开发者构建下一代 AI 驱动解决方案的关键技能.

好吧, 今天的内容就分享到这里啦!

一家之言, 欢迎拍砖!

Happy coding! Stay GOLDEN!

相关推荐
程序员陆通1 小时前
独立开发A/B测试实用教程
人工智能·ai编程
knowfoot1 小时前
硬核拆解!跟着公式“走”一遍,你也能彻底看懂神经网络
人工智能·神经网络
FF-Studio1 小时前
大语言模型(LLM)课程学习(Curriculum Learning)、数据课程(data curriculum)指南:从原理到实践
人工智能·python·深度学习·神经网络·机器学习·语言模型·自然语言处理
DDDDDouble1 小时前
<二>Sping-AI alibaba 入门-记忆聊天及持久化
java·人工智能
PyAIExplorer1 小时前
图像处理中的插值方法:原理与实践
图像处理·人工智能
狗头大军之江苏分军1 小时前
疑似华为盘古AI大模型翻车造假风波【实时记录篇】
人工智能·机器学习·程序员
Mr.Winter`1 小时前
轨迹优化 | 基于激光雷达的欧氏距离场ESDF地图构建(附ROS C++仿真)
c++·人工智能·机器人·自动驾驶·ros·ros2·具身智能
MMJC62 小时前
Playwright MCP Batch:革命性的批量自动化工具,让 Web 操作一气呵成
前端·后端·mcp
机器之心2 小时前
刚刚,苹果基础模型团队负责人庞若鸣被Meta挖走!加入超级智能团队、年薪千万美元
人工智能