什么是 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 容器中运行并暴露端口.
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 客户端:
- 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 服务器
- 创建项目目录: 打开终端并为项目创建新目录:
bash
mkdir sample-mcp-server
cd sample-mcp-server
- 创建虚拟环境: 建议使用虚拟环境来管理项目依赖项.
bash
python -m venv venv
source venv/bin/activate # On macOS/Linux
# venv\Scripts\activate # On Windows
-
安装依赖项 : 安装所需库: 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
-
创建
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()
- 运行 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 服务器
- 定位 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 可执行文件和你的项目目录.
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
}
}
}
- 重新启动 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!