Dify 可以通过插件实现 MCP 服务调用,而被调用的 MCP 服务基本可以分为以下两类:
本地 MCP 服务指的是本地通过 Java 或其他语言实现的 MCP 服务器端。
当你会用 Dify 调用本地 MCP 服务,也就意味着你会使用 Dify 调用通用 MCP 服务了,因为实现步骤和原理基本都是一样。
MCP 是 Model Context Protocol,模型上下文协议,它是由 Anthropic(Claude 大模型母公司)提出的开放协议,用于大模型连接外部“数据源”的一种协议。
它可以通俗的理解为 Java 界的 Spring Cloud Openfeign,只不过 Openfeign 是用于微服务通讯的,而 MCP 用于大模型通讯的,但它们都是为了通讯获取某项数据的一种机制,如下图所示:
MCP 存在的意义是它解决了大模型时代最关键的三个问题:数据孤岛、开发低效和生态碎片化等问题。
大模型本身无法直接访问实时数据或本地资源(如数据库、文件系统),传统方式需要手动复制粘贴或定制接口。MCP 通过标准化协议,让大模型像“插USB”一样直接调用外部工具和数据源,例如:
在之前每个大模型(如 DeepSeek、ChatGPT)需要为每个工具单独开发接口(Function Calling),导致重复劳动,MCP 通过统一协议:
MCP 让大模型从“被动应答”变为“主动调用工具”,例如:
MCP 的诞生,相当于为AI世界建立了“通用语言”,让模型、数据和工具能高效协作,最终释放大模型的全部潜力。
MCP 架构分为以下 3 部分:
运行流程:
接下来,我们使用 Spring AI 来实现本地 MCP 服务器端,它的主要实现步骤如下:
关键实现代码如下。
<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 依赖有三种类型:
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-endpoint | Web 传输的 SSE 终端节点路径 | /mcp/message |
其中 MCP Server 又分为以下两种类型。
编写天气预报查询伪代码:
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class WeatherService {
@Tool(description = "根据城市名称获取天气预报")
public String getWeatherByCity(String city) {
Map<String, String> mockData = Map.of(
"西安", "晴天",
"北京", "小雨",
"上海", "大雨"
);
return mockData.getOrDefault(city, "抱歉:未查询到对应城市!");
}
}
@Bean
public ToolCallbackProvider weatherTools(WeatherService weatherService) {
return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
}
这样 MCP Server 就编写完成了。
Dify 调用 MCP 主要步骤如下:
具体配置如下。
安装 Agent 策略(支持 MCP 工具)如下图所示:
MCP SSE 选装,非必须,可以为后续 Agent 提供 MCP 工具列表,方便 LLM 正确理解和调用工具。
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"
}
}
}
Agent 需要配置的项目比较多,首先是 Agent 策略:
然后是 LLM,选择合适的大模型即可,之后配置 MCP 工具和 HTTP 地址,如下图所示:
之后配置指令和查询问题:
我们创建的是一个 ChatFlow,执行效果如下:
执行符合预期。
Dify 调用 MCP 服务主要依靠的是 HTTP 地址和 MCP 协议,对于用户来说他面向的是大模型,对于程序来说是大模型调用了 MCP 服务,所以大模型端也就是 MCP 的客户端。我们会调用本地 MCP 服务了,那么问题来了,如何调用通用的 MCP 服务呢?
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有