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!

相关推荐
虾条_花吹雪12 分钟前
5、Spring AI(MCPServer+MCPClient+Ollama)开发环境搭建_第一篇
数据库·人工智能·学习·spring·ai
知舟不叙1 小时前
基于OpenCV实现实时颜色检测
人工智能·opencv·计算机视觉·颜色检测
蓑雨春归2 小时前
探索Agent的发展潜力:大模型与具身智能的融合
人工智能
每日新鲜事3 小时前
Lavazza拉瓦萨再度牵手兰博基尼汽车 百年咖啡注入超跑速度
人工智能
说私域3 小时前
传统企业数字化转型:以定制开发开源 AI 智能名片 S2B2C 商城小程序源码为核心的销售环节突破
大数据·人工智能·开源
geneculture4 小时前
社会应用融智学的人力资源模式:潜能开发评估;认知基建资产
人工智能·课程设计·融智学的重要应用·三级潜能开发系统·人力资源升维·认知基建·认知银行
仙人掌_lz6 小时前
Qwen-3 微调实战:用 Python 和 Unsloth 打造专属 AI 模型
人工智能·python·ai·lora·llm·微调·qwen3
美林数据Tempodata7 小时前
大模型驱动数据分析革新:美林数据智能问数解决方案破局传统 BI 痛点
数据库·人工智能·数据分析·大模型·智能问数
硅谷秋水8 小时前
NORA:一个用于具身任务的小型开源通才视觉-语言-动作模型
人工智能·深度学习·机器学习·计算机视觉·语言模型·机器人
正儿八经的数字经8 小时前
人工智能100问☞第46问:AI是如何“学习”的?
人工智能·学习