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!

相关推荐
风象南7 小时前
普通人用AI加持赚到的第一个100块
人工智能·后端
牛奶7 小时前
2026年大模型怎么选?前端人实用对比
前端·人工智能·ai编程
牛奶7 小时前
前端人为什么要学AI?
前端·人工智能·ai编程
罗西的思考10 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
冬奇Lab11 小时前
OpenClaw 源码精读(2):Channel & Routing——一条消息如何找到它的 Agent?
人工智能·开源·源码阅读
冬奇Lab11 小时前
一天一个开源项目(第38篇):Claude Code Telegram - 用 Telegram 远程用 Claude Code,随时随地聊项目
人工智能·开源·资讯
格砸12 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
可观测性用观测云12 小时前
可观测性 4.0:教系统如何思考
人工智能
sunny86512 小时前
Claude Code 跨会话上下文恢复:从 8 次纠正到 0 次的工程实践
人工智能·开源·github
小笼包包仔13 小时前
OpenClaw 多Agent软件开发最佳实践指南
人工智能