掘金 人工智能 21小时前
MCP 服务器与 FastAPI 的集成
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文探讨了模型上下文协议(MCP)作为AI代理与API通信的标准方式,它允许AI代理(如Claude或GPT)理解并交互外部API,简化了API的集成。文章详细介绍了如何在现有服务中集成MCP服务器,包括使用FastAPI、Python项目和Docker容器的示例。此外,文章还提供了在Claude桌面代理上配置MCP服务器的端到端指南,帮助开发者构建可被AI代理无缝利用的智能应用。

💡 **MCP的核心作用:** MCP是一种标准化的通信层,它使得AI代理能够理解并与外部API交互,简化了API的集成过程,消除了手动集成API或浏览复杂API文档的需要。

🛠️ **集成方式的多样性:** 文章提供了多种在服务中集成MCP服务器的选项,包括与FastAPI应用程序集成、与Python项目集成以及与Docker容器集成,为开发者提供了灵活的选择。

⚙️ **MCP配置文件的关键:** MCP配置文件是MCP客户端(如Claude Desktop Agent)的操作手册,它描述了如何启动并与MCP服务器通信,包括执行命令和API端点等信息。

🚀 **端到端示例:** 提供了在Claude桌面代理上创建MCP服务器的完整示例,包括设置FastAPI服务器、配置Claude桌面代理以及在Claude中与MCP工具交互的步骤,帮助开发者快速上手。

什么是 MCP? AI 与 API 的通信

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

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

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

服务中的 MCP 服务器

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

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

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

示例应用程序服务器:

pip install fastapi-mcp
from fastapi import FastAPIfrom fastapi_mcp import FastApiMCPapp = 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 配置(用于消费你服务器的环境):

{  "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
#my_script.pyfrom mcp.server.fastmcp import FastMCPmcp = FastMCP("My MCP Server")@mcp.tool()def add(x: int, y: int) -> int:    return x + yif __name__ == "__main__":    mcp.run()

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

{  "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 配置:

{    "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 客户端:

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

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

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

步骤 1: 设置 FastAPI MCP 服务器

    创建项目目录: 打开终端并为项目创建新目录:
mkdir sample-mcp-servercd sample-mcp-server

2. 创建虚拟环境: 建议使用虚拟环境来管理项目依赖项.

python -m venv venvsource venv/bin/activate  # On macOS/Linux# venv\Scripts\activate  # On Windows

3. 安装依赖项: 安装所需库: 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

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

from fastapi import FastAPIfrom pydantic import BaseModelfrom fastapi_mcp import FastApiMCPimport pandas as pdfrom dotenv import load_dotenvimport osload_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()

5. 运行 FastAPI MCP 服务器: 在 sample-mcp-server 目录中打开终端并运行服务器:

uvicorn main:app --reload --host 127.0.0.1 --port 8000 --log-level debug

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

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

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

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

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

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

{  "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    }  }}

4. 重新启动 Claude 桌面代理: 关闭并重新打开 Claude 桌面代理应用程序. 你应该能够在以下位置看到正在运行的 MCP 服务器: Claude 设置 > 开发者

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

    打开 Claude: 启动 Claude 桌面代理.与 Claude 互动: 你现在可以让 Claude 执行“添加两个数字”操作. 尝试以下提示:

    Claude 应识别你的addition-tool-mcp工具, 根据 fastapi-mcp 提供的 MCP 描述理解其功能, 并通过 mcp-proxy 调用你 FastAPI 应用程序的 /add 端点. 你应在 Claude 的响应中看到加法结果.

总结一下

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

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

一家之言, 欢迎拍砖!

Happy coding! Stay GOLDEN!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MCP AI API FastAPI Claude
相关文章