找回密码
 立即注册
首页 业界区 业界 超实用!Dify快速接入本地MCP服务

超实用!Dify快速接入本地MCP服务

米嘉怡 2025-6-3 09:55:13
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 用于大模型通讯的,但它们都是为了通讯获取某项数据的一种机制,如下图所示:
1.png

2.为什么需要MCP?

MCP 存在的意义是它解决了大模型时代最关键的三个问题:数据孤岛、开发低效和生态碎片化等问题。
1.打破数据孤岛,让AI“连接万物”

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

  • 查天气时自动调用气象 API,无需手动输入数据。
  • 分析企业数据时直接连接内部数据库,避免信息割裂。
2.降低开发成本,一次适配所有场景

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

  • 开发者只需写一次 MCP 服务端,所有兼容 MCP 的模型都能调用。
  • 用户无需关心技术细节,大模型可直接操作本地文件、设计软件等。
3.提升安全性与互操作性


  • 安全性:MCP 内置权限控制和加密机制,比直接开放数据库更安全。
  • 生态统一:类似 USB 接口,MCP 让不同厂商的工具能“即插即用”,避免生态分裂。
4.推动AIAgent的进化

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

  • 自动抓取网页新闻补充实时知识。
  • 打开 Idea 编写一个“Hello World”的代码。
MCP 的诞生,相当于为AI世界建立了“通用语言”,让模型、数据和工具能高效协作,最终释放大模型的全部潜力。
3.MCP组成和执行流程

MCP 架构分为以下 3 部分:

  • 客户端:大模型应用(如 DeepSeek、ChatGPT)发起 MCP 协议请求。
  • 服务器端:服务器端响应客户端的请求,并查询自己的业务实现请求处理和结果返回。
运行流程

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

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

  • 添加 MCP Server 依赖。
  • 设置 MCP 配置信息。
  • 编写 MCP Server 服务代码。
  • 将 MCP Server 进行暴露设置。
关键实现代码如下。
4.1 添加 MCP Server 依赖
  1. <dependencies>
  2.   <dependency>
  3.     <groupId>org.springframework.ai</groupId>
  4.     spring-ai-starter-mcp-server-webflux</artifactId>
  5.   </dependency>
  6. </dependencies>
  7. <repositories>
  8.   <repository>
  9.     <name>Central Portal Snapshots</name>
  10.     <id>central-portal-snapshots</id>
  11.     <url>https://central.sonatype.com/repository/maven-snapshots/</url>
  12.     <releases>
  13.       <enabled>false</enabled>
  14.     </releases>
  15.     <snapshots>
  16.       <enabled>true</enabled>
  17.     </snapshots>
  18.   </repository>
  19.   <repository>
  20.     <id>spring-milestones</id>
  21.     <name>Spring Milestones</name>
  22.     <url>https://repo.spring.io/milestone</url>
  23.     <snapshots>
  24.       <enabled>false</enabled>
  25.     </snapshots>
  26.   </repository>
  27.   <repository>
  28.     <id>spring-snapshots</id>
  29.     <name>Spring Snapshots</name>
  30.     <url>https://repo.spring.io/snapshot</url>
  31.     <releases>
  32.       <enabled>false</enabled>
  33.     </releases>
  34.   </repository>
  35. </repositories>
复制代码
MCP Server 依赖有三种类型:

  • 标准输入/输出 (STDIO):spring-ai-starter-mcp-server
  • Spring MVC****(服务器发送的事件):spring-ai-starter-mcp-server-webmvc
  • Spring WebFlux(响应式 SSE):spring-ai-starter-mcp-server-webflux
4.2 设置 MCP 配置信息

MCP Server 包含以下配置信息:
配置项描述默认值enabled启用/禁用 MCP 服务器TRUEstdio启用/禁用 stdio 传输FALSEname用于标识的服务器名称mcp-serverversion服务器版本1.0.0type服务器类型 (SYNC/ASYNC)SYNCresource-change-notification启用资源更改通知TRUEprompt-change-notification启用提示更改通知TRUEtool-change-notification启用工具更改通知TRUEtool-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 又分为以下两种类型。
服务器类型


  • 同步服务器:默认服务器类型,它专为应用程序中的简单请求-响应模式而设计。要启用此服务器类型,请在您的配置中设置。 激活后,它会自动处理同步工具规格的配置,spring.ai.mcp.server.type=SYNC。
  • 异步服务器:异步服务器实现使用非阻塞作并针对非阻塞作进行了优化。要启用此服务器类型,请使用配置您的应用程序。此服务器类型会自动设置具有内置 Project Reactor 支持的异步工具规范,spring.ai.mcp.server.type=ASYNC。
4.3 编写MCPServer服务代码

编写天气预报查询伪代码:
  1. import org.springframework.ai.tool.annotation.Tool;
  2. import org.springframework.stereotype.Service;
  3. import java.util.Map;
  4. @Service
  5. public class WeatherService {
  6.     @Tool(description = "根据城市名称获取天气预报")
  7.     public String getWeatherByCity(String city) {
  8.         Map<String, String> mockData = Map.of(
  9.             "西安", "晴天",
  10.             "北京", "小雨",
  11.             "上海", "大雨"
  12.         );
  13.         return mockData.getOrDefault(city, "抱歉:未查询到对应城市!");
  14.     }
  15. }
复制代码
4.4 将服务暴露出去
  1. @Bean
  2. public ToolCallbackProvider weatherTools(WeatherService weatherService) {
  3. return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
  4. }
复制代码
这样 MCP Server 就编写完成了。
5.Dify调用本地MCP

Dify 调用 MCP 主要步骤如下:

  • 安装 MCP 插件。
  • 配置 MCP 服务 HTTP 地址。
  • 配置 Agent 相关信息。
  • 运行测试。
具体配置如下。
5.1 安装 MCP 插件

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

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

Dify 只支持 HTTP 协议的 MCP 服务调用,它的配置格式如下:
  1. {
  2.   "server_name1": {
  3.     "transport": "sse",
  4.     "url": "http://127.0.0.1:8000/sse",
  5.     "headers": {},
  6.     "timeout": 50,
  7.     "sse_read_timeout": 50
  8.   },
  9.   "server_name2": {
  10.     "transport": "sse",
  11.     "url": "http://127.0.0.1:8001/sse"
  12.   },
  13.   "server_name3": {
  14.     "transport": "streamable_http",
  15.     "url": "http://127.0.0.1:8002/mcp",
  16.     "headers": {},
  17.     "timeout": 50
  18.   },
  19.   "server_name4": {
  20.     "transport": "streamable_http",
  21.     "url": "http://127.0.0.1:8003/mcp"
  22.   }
  23. }
复制代码
支持配置多个 MCP 服务,或者是以下 JSON 格式也支持:
  1. {
  2.   "mcpServers": {
  3.       "server_name1": {
  4.         "transport": "sse",
  5.         "url": "http://127.0.0.1:8000/sse",
  6.         "headers": {},
  7.         "timeout": 50,
  8.         "sse_read_timeout": 50
  9.       },
  10.       "server_name2": {
  11.         "transport": "sse",
  12.         "url": "http://127.0.0.1:8001/sse"
  13.       },
  14.       "server_name3": {
  15.         "transport": "streamable_http",
  16.         "url": "http://127.0.0.1:8002/mcp",
  17.         "headers": {},
  18.         "timeout": 50
  19.       },
  20.       "server_name4": {
  21.         "transport": "streamable_http",
  22.         "url": "http://127.0.0.1:8003/mcp"
  23.       }
  24.     }
  25. }
复制代码
5.3 配置 Agent

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

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

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

5.4 测试 MCP 调用

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

执行符合预期。
小结

Dify 调用 MCP 服务主要依靠的是 HTTP 地址和 MCP 协议,对于用户来说他面向的是大模型,对于程序来说是大模型调用了 MCP 服务,所以大模型端也就是 MCP 的客户端。我们会调用本地 MCP 服务了,那么问题来了,如何调用通用的 MCP 服务呢?
本文已收录到我的技术小站 www.javacn.site,其中包含的内容有:Spring AI、LangChain4j、Dify、AI Agent、MCP、Function Call、RAG、向量数据库、Prompt、多模态、向量数据库、嵌入模型等内容。
   

关注公众号(加好友):

            
作者:        王磊的博客        
出处:        http://vipstone.cnblogs.com/        
   

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册