Dify:一站式 AI 应用平台 - MCP 工具调用

此指引写作时使用 Dify v1.2.0

最近的代码合并事件玩的挺大,让 Dify 也破圈了一把。在这里我们倒不讨论开不开源的问题,在这篇教程里,我们讲讲怎么让 Dify 调用 MCP 工具。

在开始之前

本文更偏向于实战,我会讲解如何通过 Dify 调用 1Panel MCP Server,至于 MCP 的具体组成、MCP 各部分的含义本文将不会涉及或只在必要的地方予以说明。

本文选择 1Panel MCP Server 作为示例单纯是因为其操作简单、易于使用,同时我个人管理服务器使用的也是 1Panel。但是这不影响示例的普适性。

目前所有较为先进的技术文档基本为英文,所以你至少要有基本的英语阅读能力。此外,由于我们会使用 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 实现,再继续调用即可。

部署 MCP Server

1Panel MCP Server 仓库中,提到了如何启用 sse 模式:

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 中调用 MCP

首先,在 Dify 插件市场安装 Agent 策略(支持 MCP 工具)插件。

Dify MCP 插件

在 Dify 工作室中,新建 Chatflow 类型的工作流应用,之后在其中添加一个 Agent 节点,Agent 策略 选择 Function Calling

MCP Agent 配置

此处由于插件限制,需要在工具列表中指定至少一个工具进去,这里随便指派了一个获取当前时间的工具。然后,设定 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服务器概览页状态”。

偶尔会出现报 “最大迭代次数”不能为空 的错误,此时重新输入一下最大迭代次数即可。

之后就可以进行测试了:

测试 MCP 调用

我这里没有安装任何应用,所以回答完全没有问题。

拓展内容

1Panel MCP Server 调用报错?

检查你 docker-compose.yamlPANEL_HOST=http://<1Panel-Access-Address>:<Port> 有没有正确设置,一定要注意“=”后面的内容不能用双引号括起来,同时 1Panel API 白名单设置允许 MCP Server 访问。如果你不确定,可以先将白名单设为 0.0.0.0/0 来暂时允许全部 IP 访问 API 来进行测试,切记测试完毕后禁用掉 0.0.0.0/0 白名单

Dify 没有回复内容?

检查你最后的“直接回复”节点是不是设置为 Agent 节点的输出文本。


Dify:一站式 AI 应用平台 - MCP 工具调用
https://blog.tihus.com/archives/f7aed7f0-c465-4425-9e84-c940b19964d2
作者
Yuki
发布于
2025年04月10日
许可协议