写在前面

本文执行的流程参考了https://github.com/tangyoha写的教程,很感谢UP主写的教程,真的帮助了我很多。同时我也查阅了MCP官方的文档https://mcp-docs.cn/。截至目前,MCP虽然已经支持公网(Remote)访问MCP Server(Dify插件库里的Agent策略也支持调用MCP工具),但我真的不太清楚怎么使用,感觉文档还不是很健全。我实现MCP Server的调用实际上还是在本地的,换句话说是Docker部署的Dify平台内部运行了MCP Server(这也是插件里的功能),然后通过MCP Client来调用MCP Server。

MCP Client实现

实现MCP Client主要有两个操作:构建镜像以及安装MCP Client插件

1.构建镜像并应用

因为官方镜像不带相关环境,所以需要构建有Node.js环境和npm包管理器的Docker镜像

首先创建Dockerfile:

# 使用指定的基础镜像
FROM langgenius/dify-plugin-daemon:0.0.7-local

# 安装 Node.js 环境(这里选择 Node.js 22 版本)
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
RUN apt-get install nodejs -y

# 安装 npm 包管理器
RUN curl -qL https://www.npmjs.com/install.sh | sh

在终端中执行命令进行构建:

docker build -t dify-plugin .

修改docker-compose.yaml文件:

修改plugin_daemon 服务的配置部分的镜像为刚刚构建的新镜像

plugin_daemon:
  image: dify-plugin:latest

2.安装MCP Client插件

插件下载地址:https://github.com/3dify-project/dify-mcp-client

然后在Dify里安装就行,如果报了未签名错误就修改Dify项目根目录下的 .env 文件,并修改 FORCE_VERIFYING_SIGNATURE 参数为 false

编辑Chatflow

像图片里这样设置就可以了。Agent策略选择mcpReAct(支持所有模型的一种调用方式)

mcpserver的代码如下:

{
  "mcpServers": {
    "amap-maps": {
      "command": "npx",
      "args": [
        "-y",
        "@amap/amap-maps-mcp-server"
      ],
      "env": {
        "AMAP_MAPS_API_KEY": "你在高德官网上申请的key"
      }
    },
    "github": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-github"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

当然你也可以添加别的MCP Server我这里添加的是高德地图和Github的MCP Server