Dify Agent 调用 Fastapi MCP Server实战
先说核心结论: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": "http://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。等项目顺利投产后,再整理一篇生产环境中的实战总结。