首页 > 教程攻略 > ai教程 >Dify Agent 调用 Fastapi MCP Server实战

Dify Agent 调用 Fastapi MCP Server实战

来源:互联网 时间:2026-06-27 07:20:51

先说核心结论: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。等项目顺利投产后,再整理一篇生产环境中的实战总结。