什么是 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
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 容器中运行并暴露端口.
{ "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_proxy 和 python-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 执行“添加两个数字”操作. 尝试以下提示:
- “添加 5 和 10”“23 和 42 的和是多少”
- Claude 应识别你的
addition-tool-mcp
工具, 根据 fastapi-mcp 提供的 MCP 描述理解其功能, 并通过 mcp-proxy 调用你 FastAPI 应用程序的 /add 端点. 你应在 Claude 的响应中看到加法结果.总结一下
将 MCP 与 FastAPI 集成, 为构建可被 AI 代理无缝利用的智能应用程序开辟了令人兴奋的可能性. 随着 MCP 生态系统的持续发展, 掌握这一集成将成为开发者构建下一代 AI 驱动解决方案的关键技能.
好吧, 今天的内容就分享到这里啦!
一家之言, 欢迎拍砖!
Happy coding! Stay GOLDEN!