mcpField
D
dify-mcp-client

dify-mcp-client

本地服务
github.com/3dify-project开发工具17269 周前更新

关于 dify-mcp-client

dify-mcp-client 是一个 Dify 插件,将 MCP 客户端实现为 Agent 策略,使 Dify 工作流中的 ReAct Agent 节点可以连接 MCP 服务。该插件还集成了 UI-TARS SDK 以支持 GUI 自动化。

主要功能

  1. 01将 MCP 工具、资源与提示词转换为 Dify 工具
  2. 02支持 SSE 与 Streamable HTTP 连接
  3. 03可通过 config_json 配置多个 MCP 服务
  4. 04集成 UI-TARS SDK 实现 GUI 自动化
  5. 05可设置 GUI 操作的最大循环次数

适用场景

  1. 01在 Dify 工作流中调用外部 MCP 服务
  2. 02在 Chatflow 中为 Agent 节点添加工具能力
  3. 03通过 UI-TARS 执行本地桌面的图形界面操作

MCP 相关

该项目是 MCP 客户端,作为 Dify 的 Agent 策略插件连接 MCP 服务,并将服务的工具、资源和提示词交由 LLM 按 ReAct 循环调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"dify-mcp-client": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
启动命令docker run -i --rm build

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocibuild

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

dify-mcp-client

将 MCP Client 作为 Agent 策略插件,并支持 Computer Using Agent(UI-TARS-SDK)。

重要

Dify 不是 MCP Server,而是 MCP Host。

showcase1

工作原理

每个 MCP client(ReAct Agent)节点都可以连接 MCP servers。

  1. Tool、Resource、Prompt 列表会转换为 Dify 工具。
  2. 你选择的 LLM 可以查看它们的 name、description、argument type
  3. 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_json GUI 输入字段
在 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 difyUI1

⬇️从 .difypkg 文件安装插件

安装插件时如何处理错误?

问题:如果遇到错误消息: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) asAgentStrategiesNode

配置

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"
        }
    }
}

警告

Chatflow 示例

showcase2

警告

  • 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

  1. 将其重命名为 dify.exe,以便使用
  2. mkdir "C\User\user\.local\bin"(Windows),并将其注册为系统路径。
  3. 将 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

初始设置如下 InitialDifyPluginSetting

切换目录
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

提示

MCP 客户端示例
https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/clients/simple-chatbot/mcp_simple_chatbot/main.py

说明

Dify 插件包含 requirements.txt,可自动安装 Python 模块。
我在其中加入了最新版本的 mcp,因此你无需单独下载 MCP SDK。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。