dify mcp客户端
MCP Client 作为支持计算机使用代理(UI-TARS-SDK)的代理策略插件。
\[!重要\] Dify不是MCP Server但是MCP Host.
运作原理
每 MCP client (ReAct Agent)节点可以连接 MCP servers.
Tool,Resource,Prompt列表转换为Dify工具。- 您选择的法学硕士可以查看他们的
name,description,argument type - LLM基于ReAct循环调用工具(原因→ Act → 观察)。
\[!注意\] 此存储库中的大多数代码包含以下文件。 #### Dify官方插件/代理策略 https://github.com/langgenius/dify-official-plugins/tree/main/agent-strategies/cot_agent
✅ 我所做的
- 已复制
ReAct.py并将文件重命名为mcpReAct.py - 添加
config_json通过编辑GUI输入字段mcpReAct.yaml和class mcpReActParams()
在mcpReAct.py中,我添加了
- MCP新增12项功能
__init__()用于初始化AsyncExitStack和event loop- 中的一些代码
_handle_invoke_action()对于MCP - MCP设置和清理
_invoke()
\[!重要\] 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)
- 支持流式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#-如何开发和部署插件 正常的difypkg安装不起作用。因为UI-TARS需要操作系统本机API,而Dify-plugin-env是Linux docker容器。 我正在考虑通过Streamable HTTP MCP提供替代解决方案。
主要特点
- 按需GUI自动化:UI-TARS仅在需要时调用,减少代币消耗
- 寿命控制:设置每个任务的最大循环计数,以防止自动化失控
已知限制
- 单显示器支持: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镜像
This pulldown guide is for TypeScript stdio MCP server user
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桌面部署指南.
该插件自动将UI-TARS配置为ReAct循环中的工具。您需要提供:
- 拥抱人脸推断端点URL
- API类密钥(hf_xxxxx)
- (可选)调整
ui_tars_max_life_time_count代理参数
⚠️ 注意和限制
\[!小心\] 此插件可以 不 实施a 人在循环 默认情况下为机制,因此连接 仅限可靠的mcp服务器.
为了避免这种情况,请减少max itereations(默认值:3)to1,并在Chatflow中重复使用此Agent节点。
但是,代理内存将在工作流结束时重置。
使用 Conversaton Variable 保存历史记录并将其传递给QUERY。\ 别忘了添加一个短语,比如 *“调用工具时请求用户的许可”* 在说明中。如何使用此插件
🛜从GitHub安装插件
- 输入以下GitHub存储库名称
https://github.com/3dify-project/dify-mcp-client/- Dify>插件>+安装插件>从GitHub安装
⬇️从.difypkg文件安装插件
- 转到发布https://github.com/3dify-project/dify-mcp-client/releases
- 选择合适的版本
.difypkg - Dify>插件>+安装插件>安装来源>本地包文件
安装插件时如何处理错误?
问题:如果您遇到错误消息: 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平台将允许安装Dify Marketplace中未列出(因此未验证)的所有插件。
这个插件在哪里显示?
- 安装只需几分钟
- 安装后,您可以将其用作任何工作流的代理节点
- 选择“mcpReAct”策略(否则无MCP)
配置
MCP代理插件节点需要像这样的config.json命令或URL来连接MCP服务器
{
"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服务器,有三种方法。 1. 使用mcp代理将其转换为流式HTTP mcp服务器https://github.com/sparfenyuk/mcp-proxy?tab=readme-ov文件#1-stdio-to-sestreamable http 1. 使用源代码部署(非 通过.difypkg或GitHub存储库名称安装)https://github.com/3dify-project/dify-mcp-client/edit/main/README.md#-如何开发和部署插件 1. 在dify插件docker中预安装Node.js(仅限TypeScript stdio服务器)
聊天流示例
\[!警告\] - “工具”字段不应为空。所以 选择Dify工具 比如“当前时间”。
我提供这个Dify聊天流 .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代理
\[!警告\] 建议使用流式HTTP,而不是弃用的SSE 遵循旧的SSE设置不起作用。阅读https://github.com/sparfenyuk/mcp-proxy相反。
SSE setup (NOT 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代理将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代理设置日志。
(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客户/
\[!提示\] 以下指南很有帮助。 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模块
Python3.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环境) 点击🪲bug图标按钮查看这些信息
激活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。