先说核心结论:FastAPI 框架能够非常灵活地同时承载 HTTP RESTful 接口与 MCP Server,实现方式极为简洁高效。下面直接提供完整代码与详细配置流程。
FastAPI MCP Server 完整实现
代码部分如下所示,关键环节在于借助fastapi_mcp库将 FastAPI 应用实例挂载为 MCP 服务,并且可以为每个接口指定清晰的operation_id,便于大模型准确理解每个工具的功能与用途。
from datetime import datetime
import uvicorn
from fastapi import FastAPI, Depends, HTTPException, Header
from fastapi_mcp import FastApiMCP
app = FastAPI()
# 授权验证(若无需鉴权可删除该部分)
async def verify_token(authorization: str | None = Header(None)):
valid_tokens = {"123456", "abcdef"}
if authorization not in valid_tokens:
raise HTTPException(status_code=403, detail="Invalid Token")
return True
# 获取当前时间接口
@app.get("/getCurrentTime", operation_id="get_current_time")
async def get_current_time():
return {"current_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
# 获取用户信息接口(需携带 token 验证)
@app.get("/users/{user_id}", operation_id="get_user_info")
async def get_user_info(user_id: int, is_auth: bool = Depends(verify_token)):
data = {
"user_id": user_id,
"name": "wangzy",
"sex": "男",
"birthday": "2000-01-01",
}
return data
# 加法计算接口
@app.post("/add", operation_id="add_two_number")
async def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
# 创建 MCP 服务器实例并挂载(默认路径 /mcp)
mcp = FastApiMCP(app)
mcp.mount()
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
使用 Postman 验证 HTTP 接口,能够正常返回预期数据。

在 Cherry Studio 中配置 MCP Server(如果开启了认证,需在 Headers 中添加对应密钥),配置完成后可在工具列表中看到所有 HTTP RESTful API 已同步作为 MCP 工具对外暴露。


在 Cherry Studio 中调用 MCP Server 的实际效果如下:


需要补充说明的是,FastAPI 的 HTTP 服务与 MCP Server 也支持分离部署,适用于需要物理隔离或不同安全策略的场景。在 Python 生态中,目前比较受推荐的方案是 FastAPI 搭配 FastApiMCP 或 FastMCP。由于需要同时兼顾 HTTP API 和 MCP 服务,选择 FastApiMCP 方案更为合适。

Dify 安装与部署详解
Demo 环境采用 Docker Compose 方式进行部署,具体步骤可参考官方文档(https://legacy-docs.dify.ai/zh-hans/getting-started/install-self-hosted/docker-compose)。

克隆 Dify 仓库代码(当前最新版本为 0.15.3):
git clone https://github.com/langgenius/dify.git --branch 0.15.3

启动 Dify 服务:

访问 Dify 平台:

配置完成后登录 Dify 页面,界面如下:

Dify 中配置大模型及 Agent
配置大模型
在 Dify 主页找到设置选项,选择【模型供应商】进行配置,可以接入公有云大模型,也可以配置本地通过 Ollama 部署的大模型。


配置 Ollama 大模型时,需要先安装相关插件:

注意:当 Ollama 默认监听 127.0.0.1 时,Dify 容器内部无法直接访问本机回环地址。解决办法是在启动 Ollama 前通过环境变量设置OLLAMA_HOST,然后执行ollama serve。

在 Dify 中配置 Ollama 大模型的具体操作如下:

Dify 安装 MCP 相关插件
在插件市场搜索并安装 MCP 相关的插件,安装完成后进入配置页面。


安装完成后的插件列表如下:

配置 API Key 授权信息:


配置内容模板如下:
{
"server_name": {
"url": "https://192.168.43.78:8000/mcp",
"headers": {
"Content-Type": "application/json",
"Authorization": "123456"
},
"timeout": 50,
"sse_read_timeout": 50
}
}
Dify 创建 Chatflow 流程
创建应用时选择 Chatflow 类型,然后输入应用名称和描述信息。


添加 Agent 节点:

Agent 节点的详细配置:



试运行 Agent,可以看到大模型成功调用了之前定义的get_current_time MCP 工具。


Dify Chatflow 中调用 MCP Server 验证
在 Dify 工作区找到之前配置的 Chatflow【test_mcp_server】,在对话框中输入问题,可以看到 Agent 正常调用了 FastAPI 启动的 MCP Server 并返回结果。
注意事项:测试过程中发现大约有一半的概率,Agent 会返回“I am thinking about how to help you”这样的响应,虽然实际已经调用了 MCP 并获取到了数据,但最终回答并未展示出来。推测可能是提示词或 Agent 的回复策略存在问题,后续还需要进一步排查与优化。


总结
本文完整实现了一个 Demo:在 Dify 平台配置 Chatflow 的 Agent,成功调用通过 FastAPI 启动的 MCP Server。后续将基于此 Demo 在公司内部实践故障诊断相关的自主规划 Agent。待项目顺利上线后,再整理一篇生产环境中的实战经验总结。
