掘金 人工智能 07月25日 12:28
超实用!Dify快速接入本地MCP服务
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了 Dify 如何通过插件实现 MCP(Model Context Protocol)服务调用,并深入解析了 MCP 的概念、重要性、组成及执行流程。MCP 作为一种开放协议,旨在解决大模型时代的数据孤岛、开发低效和生态碎片化等问题,使得大模型能够像“插 USB”一样直接调用外部工具和数据源,从而打破数据壁垒,降低开发成本,提升安全性和互操作性,并推动 AI Agent 的进化。文章还提供了使用 Spring AI 编写本地 MCP 服务以及 Dify 调用 MCP 服务的具体步骤和配置示例,为开发者提供了实践指导。

💡 MCP 协议:MCP(Model Context Protocol)是由 Anthropic 提出的开放协议,用于大模型连接外部“数据源”,其作用类似于 Java 领域的 Spring Cloud Openfeign,但专注于大模型与外部数据之间的通信,旨在解决大模型在访问实时数据和本地资源时遇到的挑战。

🚀 MCP 的价值:MCP 的核心价值在于打破数据孤岛,实现 AI“连接万物”;降低开发成本,实现一次适配多场景;提升安全性和互操作性,促进生态统一;并推动 AI Agent 从“被动应答”向“主动调用工具”进化,为 AI 世界构建“通用语言”。

⚙️ MCP 架构与流程:MCP 架构包含客户端(大模型应用)和服务器端(响应请求并处理业务),其执行流程为:用户提问 -> LLM 查询 MCP 服务 -> 调用 MCP 服务器端 -> MCP 服务器端执行工具 -> 返回结果给 LLM。

💻 本地 MCP 服务实现:文章以 Spring AI 为例,展示了编写本地 MCP 服务器端的步骤,包括添加依赖、配置信息、编写服务代码(如天气查询示例)以及将服务暴露出去,并提供了不同类型的 MCP Server 依赖选项。

🔌 Dify 调用 MCP 服务:Dify 调用 MCP 服务主要通过安装 MCP 插件,配置 MCP 服务的 HTTP 地址(支持 SSE 和 streamable_http 传输),然后在 Agent 中配置相关信息(如策略、LLM、MCP 工具和 HTTP 地址),最后进行测试验证,整个过程打通了大模型与外部服务的连接。

Dify 可以通过插件实现 MCP 服务调用,而被调用的 MCP 服务基本可以分为以下两类:

    通用 MCP 服务(非本地 MCP 服务)。本地 MCP 服务。

本地 MCP 服务指的是本地通过 Java 或其他语言实现的 MCP 服务器端。

当你会用 Dify 调用本地 MCP 服务,也就意味着你会使用 Dify 调用通用 MCP 服务了,因为实现步骤和原理基本都是一样。

1.什么是MCP?

MCP 是 Model Context Protocol,模型上下文协议,它是由 Anthropic(Claude 大模型母公司)提出的开放协议,用于大模型连接外部“数据源”的一种协议。

它可以通俗的理解为 Java 界的 Spring Cloud Openfeign,只不过 Openfeign 是用于微服务通讯的,而 MCP 用于大模型通讯的,但它们都是为了通讯获取某项数据的一种机制,如下图所示:

2.为什么需要MCP?

MCP 存在的意义是它解决了大模型时代最关键的三个问题:数据孤岛 、开发低效和生态碎片化等问题。

1.打破数据孤岛,让AI“连接万物”

大模型本身无法直接访问实时数据或本地资源(如数据库、文件系统),传统方式需要手动复制粘贴或定制接口。MCP 通过标准化协议,让大模型像“插USB”一样直接调用外部工具和数据源,例如:

2.降低开发成本,一次适配所有场景

在之前每个大模型(如 DeepSeek、ChatGPT)需要为每个工具单独开发接口(Function Calling),导致重复劳动,MCP 通过统一协议:

3.提升安全性与互操作性

4.推动AIAgent的进化

MCP 让大模型从“被动应答”变为“主动调用工具”,例如:

MCP 的诞生,相当于为AI世界建立了“通用语言”,让模型、数据和工具能高效协作,最终释放大模型的全部潜力。

3.MCP组成和执行流程

MCP 架构分为以下 3 部分:

运行流程

    用户提问 LLM。LLM 查询 MCP 服务列表。找到需要调用 MCP 服务,调用 MCP 服务器端。MCP 服务器接收到指令。调用对应工具(如数据库)执行。返回结果给 LLM。

4.编写本地MCP服务

接下来,我们使用 Spring AI 来实现本地 MCP 服务器端,它的主要实现步骤如下:

    添加 MCP Server 依赖。设置 MCP 配置信息。编写 MCP Server 服务代码。将 MCP Server 进行暴露设置。

关键实现代码如下。

4.1 添加 MCP Server 依赖

<dependencies>  <dependency>    <groupId>org.springframework.ai</groupId>    <artifactId>spring-ai-starter-mcp-server-webflux</artifactId>  </dependency></dependencies><repositories>  <repository>    <name>Central Portal Snapshots</name>    <id>central-portal-snapshots</id>    <url>https://central.sonatype.com/repository/maven-snapshots/</url>    <releases>      <enabled>false</enabled>    </releases>    <snapshots>      <enabled>true</enabled>    </snapshots>  </repository>  <repository>    <id>spring-milestones</id>    <name>Spring Milestones</name>    <url>https://repo.spring.io/milestone</url>    <snapshots>      <enabled>false</enabled>    </snapshots>  </repository>  <repository>    <id>spring-snapshots</id>    <name>Spring Snapshots</name>    <url>https://repo.spring.io/snapshot</url>    <releases>      <enabled>false</enabled>    </releases>  </repository></repositories>

MCP Server 依赖有三种类型:

4.2 设置 MCP 配置信息

MCP Server 包含以下配置信息:

配置项描述默认值
enabled启用/禁用 MCP 服务器TRUE
stdio启用/禁用 stdio 传输FALSE
name用于标识的服务器名称mcp-server
version服务器版本1.0.0
type服务器类型 (SYNC/ASYNC)SYNC
resource-change-notification启用资源更改通知TRUE
prompt-change-notification启用提示更改通知TRUE
tool-change-notification启用工具更改通知TRUE
tool-response-mime-type(可选)每个工具名称的响应 MIME 类型。例如,将 mime 类型与工具名称相关联spring.ai.mcp.server.tool-response-mime-type.generateImage=image/pngimage/pnggenerateImage()-
sse-message-endpointWeb 传输的 SSE 终端节点路径/mcp/message

其中 MCP Server 又分为以下两种类型。

服务器类型

4.3 编写MCPServer服务代码

编写天气预报查询伪代码:

import org.springframework.ai.tool.annotation.Tool;import org.springframework.stereotype.Service;import java.util.Map;@Servicepublic class WeatherService {    @Tool(description = "根据城市名称获取天气预报")    public String getWeatherByCity(String city) {        Map<String, String> mockData = Map.of(            "西安", "晴天",            "北京", "小雨",            "上海", "大雨"        );        return mockData.getOrDefault(city, "抱歉:未查询到对应城市!");    }}

4.4 将服务暴露出去

@Beanpublic ToolCallbackProvider weatherTools(WeatherService weatherService) {return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();}

这样 MCP Server 就编写完成了。

5.Dify调用本地MCP

Dify 调用 MCP 主要步骤如下:

    安装 MCP 插件。配置 MCP 服务 HTTP 地址。配置 Agent 相关信息。运行测试。

具体配置如下。

5.1 安装 MCP 插件

安装 Agent 策略(支持 MCP 工具)如下图所示:

MCP SSE 选装,非必须,可以为后续 Agent 提供 MCP 工具列表,方便 LLM 正确理解和调用工具。

5.2 配置 MCP 服务地址

Dify 只支持 HTTP 协议的 MCP 服务调用,它的配置格式如下:

{  "server_name1": {    "transport": "sse",    "url": "http://127.0.0.1:8000/sse",    "headers": {},    "timeout": 50,    "sse_read_timeout": 50  },  "server_name2": {    "transport": "sse",    "url": "http://127.0.0.1:8001/sse"  },  "server_name3": {    "transport": "streamable_http",    "url": "http://127.0.0.1:8002/mcp",    "headers": {},    "timeout": 50  },  "server_name4": {    "transport": "streamable_http",    "url": "http://127.0.0.1:8003/mcp"  }}

支持配置多个 MCP 服务,或者是以下 JSON 格式也支持:

{  "mcpServers": {      "server_name1": {        "transport": "sse",        "url": "http://127.0.0.1:8000/sse",        "headers": {},        "timeout": 50,        "sse_read_timeout": 50      },      "server_name2": {        "transport": "sse",        "url": "http://127.0.0.1:8001/sse"      },      "server_name3": {        "transport": "streamable_http",        "url": "http://127.0.0.1:8002/mcp",        "headers": {},        "timeout": 50      },      "server_name4": {        "transport": "streamable_http",        "url": "http://127.0.0.1:8003/mcp"      }    }}

5.3 配置 Agent

Agent 需要配置的项目比较多,首先是 Agent 策略:

然后是 LLM,选择合适的大模型即可,之后配置 MCP 工具和 HTTP 地址,如下图所示:

之后配置指令和查询问题:

5.4 测试 MCP 调用

我们创建的是一个 ChatFlow,执行效果如下:

执行符合预期。

小结

Dify 调用 MCP 服务主要依靠的是 HTTP 地址和 MCP 协议,对于用户来说他面向的是大模型,对于程序来说是大模型调用了 MCP 服务,所以大模型端也就是 MCP 的客户端。我们会调用本地 MCP 服务了,那么问题来了,如何调用通用的 MCP 服务呢?

 Dify 可以通过插件实现 MCP 服务调用,而被调用的 MCP 服务基本可以分为以下两类:

    通用 MCP 服务(非本地 MCP 服务)。本地 MCP 服务。

本地 MCP 服务指的是本地通过 Java 或其他语言实现的 MCP 服务器端。

当你会用 Dify 调用本地 MCP 服务,也就意味着你会使用 Dify 调用通用 MCP 服务了,因为实现步骤和原理基本都是一样。

1.什么是MCP?

MCP 是 Model Context Protocol,模型上下文协议,它是由 Anthropic(Claude 大模型母公司)提出的开放协议,用于大模型连接外部“数据源”的一种协议。

它可以通俗的理解为 Java 界的 Spring Cloud Openfeign,只不过 Openfeign 是用于微服务通讯的,而 MCP 用于大模型通讯的,但它们都是为了通讯获取某项数据的一种机制,如下图所示:

2.为什么需要MCP?

MCP 存在的意义是它解决了大模型时代最关键的三个问题:数据孤岛 、开发低效和生态碎片化等问题。

1.打破数据孤岛,让AI“连接万物”

大模型本身无法直接访问实时数据或本地资源(如数据库、文件系统),传统方式需要手动复制粘贴或定制接口。MCP 通过标准化协议,让大模型像“插USB”一样直接调用外部工具和数据源,例如:

2.降低开发成本,一次适配所有场景

在之前每个大模型(如 DeepSeek、ChatGPT)需要为每个工具单独开发接口(Function Calling),导致重复劳动,MCP 通过统一协议:

3.提升安全性与互操作性

4.推动AIAgent的进化

MCP 让大模型从“被动应答”变为“主动调用工具”,例如:

MCP 的诞生,相当于为AI世界建立了“通用语言”,让模型、数据和工具能高效协作,最终释放大模型的全部潜力。

3.MCP组成和执行流程

MCP 架构分为以下 3 部分:

运行流程

    用户提问 LLM。LLM 查询 MCP 服务列表。找到需要调用 MCP 服务,调用 MCP 服务器端。MCP 服务器接收到指令。调用对应工具(如数据库)执行。返回结果给 LLM。

4.编写本地MCP服务

接下来,我们使用 Spring AI 来实现本地 MCP 服务器端,它的主要实现步骤如下:

    添加 MCP Server 依赖。设置 MCP 配置信息。编写 MCP Server 服务代码。将 MCP Server 进行暴露设置。

关键实现代码如下。

4.1 添加 MCP Server 依赖

<dependencies>  <dependency>    <groupId>org.springframework.ai</groupId>    <artifactId>spring-ai-starter-mcp-server-webflux</artifactId>  </dependency></dependencies><repositories>  <repository>    <name>Central Portal Snapshots</name>    <id>central-portal-snapshots</id>    <url>https://central.sonatype.com/repository/maven-snapshots/</url>    <releases>      <enabled>false</enabled>    </releases>    <snapshots>      <enabled>true</enabled>    </snapshots>  </repository>  <repository>    <id>spring-milestones</id>    <name>Spring Milestones</name>    <url>https://repo.spring.io/milestone</url>    <snapshots>      <enabled>false</enabled>    </snapshots>  </repository>  <repository>    <id>spring-snapshots</id>    <name>Spring Snapshots</name>    <url>https://repo.spring.io/snapshot</url>    <releases>      <enabled>false</enabled>    </releases>  </repository></repositories>

MCP Server 依赖有三种类型:

4.2 设置 MCP 配置信息

MCP Server 包含以下配置信息:

配置项描述默认值
enabled启用/禁用 MCP 服务器TRUE
stdio启用/禁用 stdio 传输FALSE
name用于标识的服务器名称mcp-server
version服务器版本1.0.0
type服务器类型 (SYNC/ASYNC)SYNC
resource-change-notification启用资源更改通知TRUE
prompt-change-notification启用提示更改通知TRUE
tool-change-notification启用工具更改通知TRUE
tool-response-mime-type(可选)每个工具名称的响应 MIME 类型。例如,将 mime 类型与工具名称相关联spring.ai.mcp.server.tool-response-mime-type.generateImage=image/pngimage/pnggenerateImage()-
sse-message-endpointWeb 传输的 SSE 终端节点路径/mcp/message

其中 MCP Server 又分为以下两种类型。

服务器类型

4.3 编写MCPServer服务代码

编写天气预报查询伪代码:

import org.springframework.ai.tool.annotation.Tool;import org.springframework.stereotype.Service;import java.util.Map;@Servicepublic class WeatherService {    @Tool(description = "根据城市名称获取天气预报")    public String getWeatherByCity(String city) {        Map<String, String> mockData = Map.of(            "西安", "晴天",            "北京", "小雨",            "上海", "大雨"        );        return mockData.getOrDefault(city, "抱歉:未查询到对应城市!");    }}

4.4 将服务暴露出去

@Beanpublic ToolCallbackProvider weatherTools(WeatherService weatherService) {return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();}

这样 MCP Server 就编写完成了。

5.Dify调用本地MCP

Dify 调用 MCP 主要步骤如下:

    安装 MCP 插件。配置 MCP 服务 HTTP 地址。配置 Agent 相关信息。运行测试。

具体配置如下。

5.1 安装 MCP 插件

安装 Agent 策略(支持 MCP 工具)如下图所示:

MCP SSE 选装,非必须,可以为后续 Agent 提供 MCP 工具列表,方便 LLM 正确理解和调用工具。

5.2 配置 MCP 服务地址

Dify 只支持 HTTP 协议的 MCP 服务调用,它的配置格式如下:

{  "server_name1": {    "transport": "sse",    "url": "http://127.0.0.1:8000/sse",    "headers": {},    "timeout": 50,    "sse_read_timeout": 50  },  "server_name2": {    "transport": "sse",    "url": "http://127.0.0.1:8001/sse"  },  "server_name3": {    "transport": "streamable_http",    "url": "http://127.0.0.1:8002/mcp",    "headers": {},    "timeout": 50  },  "server_name4": {    "transport": "streamable_http",    "url": "http://127.0.0.1:8003/mcp"  }}

支持配置多个 MCP 服务,或者是以下 JSON 格式也支持:

{  "mcpServers": {      "server_name1": {        "transport": "sse",        "url": "http://127.0.0.1:8000/sse",        "headers": {},        "timeout": 50,        "sse_read_timeout": 50      },      "server_name2": {        "transport": "sse",        "url": "http://127.0.0.1:8001/sse"      },      "server_name3": {        "transport": "streamable_http",        "url": "http://127.0.0.1:8002/mcp",        "headers": {},        "timeout": 50      },      "server_name4": {        "transport": "streamable_http",        "url": "http://127.0.0.1:8003/mcp"      }    }}

5.3 配置 Agent

Agent 需要配置的项目比较多,首先是 Agent 策略:

然后是 LLM,选择合适的大模型即可,之后配置 MCP 工具和 HTTP 地址,如下图所示:

之后配置指令和查询问题:

5.4 测试 MCP 调用

我们创建的是一个 ChatFlow,执行效果如下:

执行符合预期。

小结

Dify 调用 MCP 服务主要依靠的是 HTTP 地址和 MCP 协议,对于用户来说他面向的是大模型,对于程序来说是大模型调用了 MCP 服务,所以大模型端也就是 MCP 的客户端。我们会调用本地 MCP 服务了,那么问题来了,如何调用通用的 MCP 服务呢?

我们该怎样系统的去转行学习大模型 ?

很多想入行大模型的人苦于现在网上的大模型老课程老教材,学也不是不学也不是, 基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近100余次后,终于把整个AI大模型的学习门槛,降到了最低!

在这个版本当中:

第一您不需要具备任何算法和数学的基础
第二不要求准备高配置的电脑
第三不必懂Python等任何编程语言

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料 拿出来: 😝有需要的小伙伴,可以 在这🆓↓↓↓

一、大模型经典书籍(免费分享)

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

二、640套大模型报告(免费分享)

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

三、大模型系列视频教程(免费分享)

四、2025最新大模型学习路线(免费分享)

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1阶段:启航篇丨极速破界AI新时代

L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理、关键技术以及大模型应用场景。

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体。

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调。

L5阶段:专题集丨特训篇 【录播课】

现在将这份 LLM大模型资料 拿出来: 😝有需要的小伙伴,可以 在这🆓↓↓↓

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Dify MCP 大模型 插件 AI Agent
相关文章