dify-mcp-client

dify-mcp-client

MCP 客户端作为一个代理策略插件。Dify 不是 MCP 服务器,而是 MCP 主机。

3dify-project

研究与数据
访问服务器

README

dify-mcp-client

MCP Client 作为 Agent 策略插件。

[!IMPORTANT] Dify 不是 MCP Server 而是 MCP Host

showcase1

工作原理

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

  1. ToolResourcePrompt 列表被转换为 Dify 工具。
  2. 您选择的 LLM 可以看到它们的 namedescriptionargument type
  3. LLM 基于 ReAct 循环(Reason → Act → Observe)调用工具。

[!NOTE] 此存储库中的大多数代码包含以下文件。

Dify 官方插件 / Agent 策略

https://github.com/langgenius/dify-official-plugins/tree/main/agent-strategies/cot_agent

✅ 我做了什么

  • 复制 ReAct.py 并将文件重命名为 mcpReAct.py
  • 通过编辑 mcpReAct.yamlclass mcpReActParams() 添加 config_json GUI 输入字段

在 mcpReAct.py 中,我添加了

  • 用于 MCP 的 12 个新函数
  • 用于初始化 AsyncExitStackevent loop__init__()
  • _handle_invoke_action() 中的一些代码用于 MCP
  • _invoke() 中的 MCP 设置和清理
  • 添加 SSE MCP 客户端 (v0.0.2)
  • 支持多个 SSE 服务器 (v0.0.3)

[!IMPORTANT] ReAct while 循环保持不变

⚠️ 注意事项和限制

[!CAUTION] 默认情况下,此插件实现人机回路机制,因此仅连接可靠的 mcp server。<br> 为避免这种情况,请将 max itereations(默认值:3)减少到 1,并在 Chatflow 中重复使用此 Agent 节点。<br> 但是,agent 内存会在 Workflow 结束时重置。<br> 使用 Conversaton Variable 保存历史记录并将其传递给 QUERY。<br> 不要忘记在 INSTRUCTION 中添加诸如 "调用工具时请求用户许可" 之类的短语。

[!WARNING]

  • Tools 字段不应留空。 因此选择 Dify 工具,例如“当前时间”。

如何使用此插件

🛜从 GitHub 安装插件

  • 输入以下 GitHub 存储库名称
https://github.com/3dify-project/dify-mcp-client/
  • Dify > PLUGINS > + Install plugin > INSTALL FROM > GitHub difyUI1

⬇️从 .difypkg 文件安装插件

  • 转到 Releases https://github.com/3dify-project/dify-mcp-client/releases
  • 选择合适的 .difypkg 版本
  • Dify > PLUGINS > + Install plugin > INSTALL FROM > Local Package File difyUI2

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

问题:如果遇到错误消息:plugin verification has been enabled, and the plugin you want to install has a bad signature,如何处理该问题?<br> 解决方案:将以下行添加到 /docker/.env 配置文件的末尾:

FORCE_VERIFYING_SIGNATURE=false

运行以下命令以重新启动 Dify 服务:

cd docker
docker compose down
docker compose up -d

添加此字段后,Dify 平台将允许安装所有未在 Dify Marketplace 中列出(因此未经验证)的插件。

[!TIP] Marketplace 需要审批。 如果星星⭐达到 100,我会考虑为它们制作 PR。

源代码插件部署

步骤如下。 how-to-develop-and-deploy-plugin

此插件在哪里显示?

  • 安装需要几分钟
  • 安装完成后,您可以在任何工作流程中将其用作 Agent 节点
  • 选择 "mcpReAct" 策略(否则没有 MCP) asAgentStrategiesNode

配置

MCP Agent 插件节点需要像这样的 config_json 来命令或 URL 以连接 MCP 服务器

{
    "mcpServers":{
        "name_of_server1":{
            "url": "http://host.docker.internal:8080/sse"
        },
        "name_of_server2":{
            "url": "http://host.docker.internal:8008/sse"
        }
    }
}

[!WARNING]

  • 每个服务器的端口号应该不同,例如 8080、8008 等。

Chatflow 示例

showcase2

我提供此 Dify ChatFlow 作为 .yml 用于测试 dify mcp 插件。

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 服务器转换为 SSE MCP 服务器

option1️⃣: 编辑 MCP 服务器的代码

如果是 fastMCP 服务器,请像这样更改

if __name__ == "__main__":
-    mcp.run(transport="stdio")
+    mcp.run(transport="sse")

option2️⃣: 通过 mcp-proxy

\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。 以下是将 stdio "everything MCP server" 通过 mcp-proxy 转换为 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

[!Warning] mcp-proxy 的附加参数。 使用时要小心。 可能存在安全风险,例如 XSS、CSRF。(默认:不允许 CORS)

--allow-origin='*'

以下是 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 11),需要下载 dify-plugin-windows-amd64.exe (v0.0.3)<br> 在此处选择与您的操作系统兼容的版本:<br> https://github.com/langgenius/dify-plugin-daemon/releases <br> 将其重命名为 dify.exe

参考

https://docs.dify.ai/plugins/quick-start/develop-plugins/initialize-development-tools

[!NOTE] 如果您拉取或下载此存储库的代码,则可以跳过此阶段

dify plugin init

初始设置如下 InitialDifyPluginSetting

安装 python 模块

Python3.12+ 兼容。 Dify 插件官方安装指南使用 pip,但我使用了 uv。

uv init --python=python3.12
.venv\Scripts\activate

安装用于插件开发的 python 模块

uv add werkzeug==3.0.3
uv add flask
uv add dify_plugin

复制 env.example 并将其重命名为 .env

我将 REMOTE_INSTALL_HOSTdebug.dify.ai 更改为 localhost (Docker Compose 环境) 单击 bug 图标按钮以查看这些信息

更改目录

cd mcp_client

执行一次

pip install -r requirements.txt

激活 Dify 插件

python -m main

(ctrl+C 停止)

[!TIP] .env 的 REMOTE_INSTALL_KEY 经常更改。 如果您遇到类似 handshake failed, invalid key 的错误消息,请更新它。

打包成 .difypkg

./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 <br>

[!TIP] 以下 MCP 客户端示例特别有用<br> https://github.com/modelcontextprotocol/python-sdk/blob/main/examples/clients/simple-chatbot/mcp_simple_chatbot/main.py<br>

[!NOTE] Dify 插件具有 requirements.txt,它会自动安装 python 模块。<br> 我在其中包含 mcp,因此您无需单独下载 MCP SDK。

推荐服务器

Crypto Price & Market Analysis MCP Server

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。

本地
Python