Dify:一站式 AI 应用平台 - MCP 工具调用
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
最近的代码合并事件玩的挺大,让 Dify 也破圈了一把。在这里我们倒不讨论开不开源的问题,在这篇教程里,我们讲讲怎么让 Dify 调用 MCP 工具。
在开始之前
本文将会涉及...
本文更偏向于实战,我会讲解如何通过 Dify 调用 1Panel 的 MCP Server,至于 MCP 的具体组成、MCP 各部分的含义本文将不会涉及或只在必要的地方予以说明。
本文选择 1Panel MCP Server 作为示例单纯是因为其操作简单、易于使用,同时我个人管理服务器使用的也是 1Panel。但是这不影响示例的普适性,只要支持 sse 的 MCP Server 都可以使用本文所述方式进行调用,即使是 stdio 模式的 MCP Server 也可以使用诸如 mcp-proxy 的工具来实现 sse 支持。
你需要...
此指引写作时使用 Dify v1.2.0
目前所有较为先进的技术文档基本为英文,所以你至少要有基本的英语阅读能力。此外,由于我们会使用 Docker 来部署 MCP Server,你还需要有 Docker 部署和运维能力。
部署 MCP Server
MCP 的模式
在上文有提到,MCP Server 存在两种调用方式,一个是 stdio(Standard Input/Output / 标准输入输出),一个是 sse(Server-Sent Events / 服务器发送事件)。这两种调用方式可以简单理解为一个是命令行一个是网络请求。一般情况下 MCP Client 比如 Cursor 或者 Windsurf 都是同时支持这两种调用方式的,但是在 Dify 中,目前只支持 sse 调用方式,而且还是通过第三方插件拓展实现。
如果你要使用的 MCP Server 不支持 sse,你也可以通过 mcp-proxy 工具来实现将 stdio 转换为 sse 实现,再继续调用即可。
如何部署 1Panel MCP Server
官方仓库:1Panel MCP Server
在官方仓库中,提到了如何启用 sse 模式:
于是我们只需要简单的通过如下 docker-compose.yaml
即可启动 1Panel MCP Server:
services:
core:
command: ./mcp-1panel -transport sse -addr "http://localhost:8000"
environment:
- PANEL_HOST=http://<1Panel-Access-Address>:<Port>
- PANEL_ACCESS_TOKEN=<1Panel-Access-Token>
- TZ=Asia/Shanghai
image: 1panel/1panel-mcp-server:latest
ports:
- 8000:8000
restart: unless-stopped
运行编排,若容器日志输出 2025/04/10 03:00:23 SSE server listening on :8000
的字样则代表 1Panel MCP Server 部署完成。
在 Dify 中调用
首先,在 Dify 插件市场安装 Agent 策略(支持 MCP 工具)插件。
在 Dify 工作室中,新建 Chatflow
类型的工作流应用,之后在其中添加一个 Agent
节点,Agent 策略
选择 Function Calling
。
此处由于插件限制,需要在工具列表中指定至少一个工具进去,这里随便指派了一个获取当前时间的工具。然后,设定 MCP 服务配置如下:
{
"mcp-1panel-anything-you-want": {
"url": "http://<Your-MCP-Server-Addr>:<Port>/sse"
}
}
如果你有多个 MCP Server,可以在此处配置多个,比如:
{
"mcp-1panel-1": {
"url": "http://<Your-MCP-Server-Addr>:<Port>/sse"
},
"mcp-1panel-2": {
"url": "http://<Your-MCP-Server-Addr>:<Port>/sse"
}
}
但是请注意,此处的例子是不恰当的,因为两个 MCP Server 是相同的操作指令,在调用时可能会出现混乱。更推荐的方式是将单一功能重新封装为 Dify 工作流,再通过工作流工具的方式给其他应用调用。
在 指令
部分,Agent 策略(支持 MCP 工具)插件会通过 sse 自发现 MCP 指令,所以这里随便填个 .
避免 Dify 报错即可。
在 查询
部分,填写系统用户输入变量 {sys.query}
,如果你需要在后续通过 Workflow 进行封装的话,则可以直接设定为具体调用指令如:“获取1Panel服务器概览页状态”。
偶尔会出现报 “最大迭代次数”不能为空
的错误,此时重新输入一下最大迭代次数即可。
之后就可以进行测试了:
我这里确实没有安装任何应用,所以回答完全没有问题。
拓展内容
1Panel MCP Server 调用报错?
检查你 docker-compose.yaml 的 PANEL_HOST=http://<1Panel-Access-Address>:<Port>
有没有正确设置,一定要注意 = 后面的内容不能用双引号括起来,同时 1Panel API 白名单设置允许 MCP Server 访问。如果你不确定,可以先将白名单设为 0.0.0.0/0 来暂时允许全部 IP 访问 API 来进行测试,切记测试完毕后禁用掉 0.0.0.0/0 白名单。
Dify 没有回复内容?
检查你最后的“直接回复”节点是不是设置为 Agent 节点的输出文本。