关于 dify-mcp-client
dify-mcp-client 是一个 Dify 插件,将 MCP 客户端实现为 Agent 策略,使 Dify 工作流中的 ReAct Agent 节点可以连接 MCP 服务。该插件还集成了 UI-TARS SDK 以支持 GUI 自动化。
主要功能
- 01将 MCP 工具、资源与提示词转换为 Dify 工具
- 02支持 SSE 与 Streamable HTTP 连接
- 03可通过 config_json 配置多个 MCP 服务
- 04集成 UI-TARS SDK 实现 GUI 自动化
- 05可设置 GUI 操作的最大循环次数
适用场景
- 01在 Dify 工作流中调用外部 MCP 服务
- 02在 Chatflow 中为 Agent 节点添加工具能力
- 03通过 UI-TARS 执行本地桌面的图形界面操作
MCP 相关
该项目是 MCP 客户端,作为 Dify 的 Agent 策略插件连接 MCP 服务,并将服务的工具、资源和提示词交由 LLM 按 ReAct 循环调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
dify-mcp-client
将 MCP Client 作为 Agent 策略插件,并支持 Computer Using Agent(UI-TARS-SDK)。
重要
Dify 不是
MCP Server,而是MCP Host。

工作原理
每个 MCP client(ReAct Agent)节点都可以连接 MCP servers。
Tool、Resource、Prompt列表会转换为 Dify 工具。- 你选择的 LLM 可以查看它们的
name、description、argument type - LLM 基于 ReAct 循环调用工具(推理 → 执行 → 观察)。
说明
此仓库中的大部分代码包含在以下文件中。
Dify 官方插件 / Agent 策略
https://github.com/langgenius/dify-official-plugins/tree/main/agent-strategies/cot_agent
✅ 我做了什么
- 复制
ReAct.py并将文件重命名为mcpReAct.py - 编辑
mcpReAct.yaml和class mcpReActParams(),添加config_jsonGUI 输入字段
在 mcpReAct.py 中,我添加了
- 新增 12 个 MCP 函数
- 用于初始化
AsyncExitStack和event loop的__init__() - 在
_handle_invoke_action()中添加了一些 MCP 代码 - 在
_invoke()中设置和清理 MCP
重要
ReAct 的 while 循环保持不变
🔄 更新历史
- 添加 SSE MCP 客户端(v0.0.2)
- 支持多个 SSE 服务(v0.0.3)
- 更新 Python 模块并简化其依赖项(v0.0.4)
- mcp(v1.1.2→v1.6.0+)
- dify_plugin(0.0.1b72→v0.1.0)
- 添加 UI-TARS SDK 集成,支持 GUI 自动化(v0.0.5)
- 支持 Streamable HTTP MCP 客户端
- 新增 SSE 参数:
/sse?key=value(v0.0.6)
🤖 UI-TARS 集成
此插件集成了 UI-TARS SDK,支持 GUI 自动化。
警告
UI-TARS-SDK 集成仅支持 Dify 插件的本地调试部署。 https://github.com/3dify-project/dify-mcp-client#-how-to-develop-and-deploy-plugin
常规 difypkg 安装无法使用。因为 UI-TARS 需要操作系统原生 API,而 Dify 插件环境是 Linux Docker 容器。
我正在考虑通过 Streamable HTTP MCP 实现替代方案。
主要功能
- 按需执行 GUI 自动化:仅在需要时调用 UI-TARS,减少 token 消耗
- 生命周期控制:为每项任务设置最大循环次数,防止自动化过程失控
已知限制
- 仅支持单显示器:UI-TARS 目前只能识别主显示器,不支持多显示器设置。
- Mac Retina 显示屏问题:在配备 Retina 显示屏的 macOS 上,UI-TARS 要求将显示分辨率设为“默认”,而不是最高画质设置。否则会点击错误的(w,h)坐标点。https://github.com/bytedance/UI-TARS-desktop/issues/591
生命周期参数
life_time 参数用于控制 UI-TARS 可执行的 GUI 操作的最大次数:
- 默认:10 次迭代
- 用户可通过
ui_tars_max_life_time_count配置最大次数 - 你选择的 LLM 可以根据任务复杂度,在用户定义的限制范围内动态调整次数
说明
为了取得最佳性价比,目前已硬编码为使用 UI-TARS-1.5-7B 模型。
🐳 使用预构建的 Node.js 进行 Docker 部署
构建 Docker 镜像
此折叠指南适用于 TypeScript stdio MCP 服务用户
docker build -t dify-mcp-client:latest .
或者使用我们的预构建镜像:
# In your docker-compose.yml
services:
plugin-daemon:
image: memedayo/dify-plugin-daemon:latest # with Pre-built Node.js
# ... rest of configuration
容器中没有 Node.js,就无法使用 TypeScript stdio MCP 支持。
UI-TARS 配置
有关 UI-TARS 设置的详细信息,请参阅 UI-TARS Desktop 部署指南。
插件会自动将 UI-TARS 配置为 ReAct 循环中的工具。你需要提供:
- Hugging Face Inference Endpoint URL
- API Key,例如(hf_xxxxx)
- (可选)在 Agent 参数中调整
ui_tars_max_life_time_count
⚠️ 注意与限制
注意
此插件默认不实现人在回路机制,因此请只连接可靠的 MCP 服务。
为避免此问题,可将max itereations(默认值:3)调低为1,并在 Chatflow 中重复使用此 Agent 节点。
但是,工作流结束时,Agent 记忆会重置。
使用Conversaton Variable保存历史记录,并将其传递给 QUERY。
别忘了在 INSTRUCTION 中添加类似 “调用工具时征求用户许可” 的短语。
如何使用此插件
🛜从 GitHub 安装插件
- 输入以下 GitHub 仓库名称
https://github.com/3dify-project/dify-mcp-client/
- Dify > PLUGINS > + Install plugin > INSTALL FROM > GitHub

⬇️从 .difypkg 文件安装插件
- 前往 Releases https://github.com/3dify-project/dify-mcp-client/releases
- 选择合适版本的
.difypkg - Dify > PLUGINS > + Install plugin > INSTALL FROM > Local Package File

安装插件时如何处理错误?
问题:如果遇到错误消息:plugin verification has been enabled, and the plugin you want to install has a bad signature,该如何处理?
解决方案:打开 /docker/.env,并将 true 改为 false:
FORCE_VERIFYING_SIGNATURE=false
运行以下命令以重启 Dify 服务:
cd docker
docker compose down
docker compose up -d
添加此字段后,Dify 平台将允许安装所有未列出(因此未经过验证)的插件。
此插件会显示在哪里?
- 安装需要几分钟
- 安装完成后,可在任何工作流中将其用作 Agent 节点
- 选择“mcpReAct”策略(否则不会使用 MCP)

配置
MCP Agent 插件节点需要如下格式的 config_json,用于指定连接 MCP 服务的命令或 URL
{
"mcpServers":{
"name_of_server1":{
"url": "http://host.docker.internal:8080/sse"
},
"name_of_server2":{
"url": "http://host.docker.internal:8008/mcp"
}
}
}
警告
- 每个服务的端口号都应不同,例如 8080、8008……
- 如果要使用 stdio MCP 服务,有 3 种方法。
- 使用 mcp-proxy 将其转换为 Streamable HTTP MCP 服务 https://github.com/sparfenyuk/mcp-proxy?tab=readme-ov-file#1-stdio-to-ssestreamablehttp
- 使用源代码部署(不要通过 .difypkg 或 GitHub 仓库名称安装)https://github.com/3dify-project/dify-mcp-client/edit/main/README.md#-how-to-develop-and-deploy-plugin
- 在 dify-plugin docker 中预先安装 Node.js(仅适用于 TypeScript stdio 服务)
Chatflow 示例

警告
- Tools 字段不能为空。因此,请选择 Dify 工具,例如“current time”。
我提供了此 Dify ChatFlow .yml 文件,用于测试此插件。
https://github.com/3dify-project/dify-mcp-client/tree/main/test/chatflow
下载 DSL(yml)文件后,将其导入 Dify,即可使用“Everything MCP server”测试 MCP。
https://github.com/modelcontextprotocol/servers/tree/main/src/everything
如何将 stdio MCP 服务转换为 Stremable HTTP(或 SSE)
选项 1️⃣:编辑 MCP 服务的代码
如果是 fastMCP 服务,请按如下方式更改
if __name__ == "__main__":
- mcp.run(transport="stdio")
+ mcp.run(transport="streamable-http")
选项 2️⃣:通过 mcp-proxy
警告
建议使用 Streamable HTTP,而不是已弃用的 SSE 以下旧版 SSE 配置无法使用。请阅读 https://github.com/sparfenyuk/mcp-proxy。
SSE 配置(不是 Streamable HTTP)
\mcp-proxy>uv venv -p 3.12
.venv\Scripts\activate
uv tool install mcp-proxy
检查是否已安装 Node.js,以及 npx(.cmd) 的路径
(Mac/Linux)
which npx
(Windows)
where npx
结果
C:\Program Files\nodejs\npx
C:\Program Files\nodejs\npx.cmd
C:\Users\USER_NAME\AppData\Roaming\npm\npx
C:\Users\USER_NAME\AppData\Roaming\npm\npx.cmd
如果 claude_desktop_config.json 符合以下架构,
{
"mcpServers": {
"SERVER_NAME": {
"command": CMD_NAME_OR_PATH
"args": {VALUE1, VALUE2}
}
}
}
使用此命令唤醒 stdio MCP 服务
mcp-proxy --sse-port=8080 --pass-environment -- CMD_NAME_OR_PATH --arg1 VALUE1 --arg2 VALUE2 ...
如果你的操作系统是 Windows,请使用 npx.cmd,而不是 npx。以下示例命令通过 mcp-proxy 将 stdio“everything MCP server”转换为 SSE。
mcp-proxy --sse-port=8080 --pass-environment -- C:\Program Files\nodejs\npx.cmd --arg1 -y --arg2 @modelcontextprotocol/server-everything
类似地,在另一个命令行中(如果使用 v0.0.3 的示例 Chatflow)
pip install mcp-simple-arxiv
mcp-proxy --sse-port=8008 --pass-environment -- C:\Users\USER_NAME\AppData\Local\Programs\Python\Python310\python.exe -m -mcp_simple_arxiv
以下是 mcp-proxy 设置日志。
(mcp_proxy) C:\User\USER_NAME\mcp-proxy>mcp-proxy --sse-port=8080 --pass-environment -- C:\Program Files\nodejs\npx.cmd --arg1 -y --arg2 @modelcontextprotocol/server-everything
DEBUG:root:Starting stdio client and SSE server
DEBUG:asyncio:Using proactor: IocpProactor
DEBUG:mcp.server.lowlevel.server:Initializing server 'example-servers/everything'
DEBUG:mcp.server.sse:SseServerTransport initialized with endpoint: /messages/
INFO: Started server process [53104]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8080 (Press CTRL+C to quit)
🔨 如何开发和部署插件
官方插件开发指南
https://github.com/3dify-project/dify-mcp-client/blob/main/GUIDE.md
Dify 插件 SDK 守护进程
如果你的操作系统是 Windows,且 CPU 为 Intel 或 AMD,则需要下载最新的 dify-plugin-windows-amd64.exe
在此处选择与你的操作系统兼容的版本:
https://github.com/langgenius/dify-plugin-daemon/releases
- 将其重命名为 dify.exe,以便使用
- mkdir "C\User\user\.local\bin"(Windows),并将其注册为系统路径。
- 将
dify.exe复制到 dify-mcp-client/ 目录下
提示
以下指南会有所帮助。 https://docs.dify.ai/plugins/quick-start/develop-plugins/initialize-development-tools
参考
https://docs.dify.ai/plugins/quick-start/develop-plugins/initialize-development-tools
说明
如果你拉取或下载了此仓库的代码,可以跳过此阶段
dify plugin init初始设置如下
切换目录
cd dify-mcp-client
安装 Python 模块
兼容 Python 3.12 及更高版本。venv 和 uv 并非必需,但建议使用。
uv venv -p 3.12
.venv\Scripts\activate
安装用于插件开发的 Python 模块
uv pip install -r requirements.txt
仅适用于 UI-TARS-SDK 用户(安装 Node.js v22 LTS 后)
npm install
复制 env.example 并将副本重命名为 .env
我将 REMOTE_INSTALL_HOST 从 debug.dify.ai 改成了 localhost
(Docker Compose 环境)
点击 🪲虫子图标按钮即可查看这些信息
激活 Dify 插件
python -m main
(按 Ctrl+C 停止)
提示
.env 中的 REMOTE_INSTALL_KEY 经常会变化。 如果遇到
handshake failed, invalid key之类的错误消息,请更新它。
打包为 .difypkg
./dify-mcp-client 是我的默认根目录名称
dify plugin package ./ROOT_OF_YOUR_PROJECT
开发者可用的 GitHub 仓库
Dify 插件 SDK
https://github.com/langgenius/dify-plugin-sdks
MCP Python SDK
https://github.com/modelcontextprotocol/python-sdk
提示
说明
Dify 插件包含
requirements.txt,可自动安装 Python 模块。
我在其中加入了最新版本的mcp,因此你无需单独下载 MCP SDK。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
