Dify 连接本地 SpringAI MCP server
连接 MCP server 的方式大致有两种,一种是基于 stdio,一种是基于 sse,如果对于稳定和性能好的方案的话,sse 要比 stdio 好的多,所以本文采用的是基于 sse 和 Spring AI 部署本地 MCP server,并通过 Dify 连接本地 MCP Server。
如何使用 SpringAI 搭建一个本地 MCP server
依赖:
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>3.5.3</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
配置文件
spring:
application:
name:
mcp-server-demo
ai:
mcp:
server:
name: webflux-mcp-server # 这里是外部访问 mcp server 的服务器名称
version: 1.0.0
type: ASYNC
sse-message-endpoint: /mcp/messages
server:
port: 8080
Service 模块
可以根据具体的业务操作逻辑进行编写
@Service
public class CheckStudentService {
@Tool(description = "根据传入同学的姓名查看这位同学在班级内的职务")
public String checkStudentPosition(String studentName) {
Map<String, String> mockData = Map.of(
"小明","班长",
"小红","学习委员",
"小帅","卫生委员"
);
return mockData.getOrDefault(studentName, "普通同学,没有职务!");
}
@Tool(description = "根据同学姓名查看这位同学的成绩得分")
public String checkStudentScore(String studentName) {
Map<String, Integer> mockData = Map.of(
"小明",88,
"小红",99,
"小帅",63
);
if (null == mockData.get(studentName)){
return "暂无这位同学的成绩!";
}
return String.valueOf(mockData.get(studentName));
}
}
将实现好的 Service 模块暴露出去
这一步就是把实现好的 Service 注册到方法回调列表中,再通过 sse 获取工具集合的时候可以访问到暴露出去的工具。
SpringAI 的实现方式是将对应的 Service 封装为 ToolBackProvider 后,并把这个对象放入 IoC 中,SprigAI 会自动对其进行打包处理。
@Configuration
public class McpServiceConfig {
@Bean
public ToolCallbackProvider checkStudentTools(CheckStudentService studentService) {
return MethodToolCallbackProvider
.builder()
.toolObjects(studentService)
.build();
}
}
MCP 服务器Demo 配置完毕,直接启动
观察日志,可以看到,SpringAI 把我们自定义的两个工具注册到方法回调集里面了。
Dify 连接本地 MCP Server
首先本地下载这两个插件,这是用于搭建智能体的工具
搭建智能体工作流,配置 Agent 策略工具,注意这里一定要使用智能体策略工具中的 ReAct 工具,使用 FunctionCalling 会报错。
配置 MCP sse 工具,这里的 json 配置如下,还记得在上面 MCP server 中的配置文件吗,这里的 server 名字就是上面 yaml 文件中配置的。这里还要注意一个问题,如果是使用 Docker 部署的 Dify,可能由于 Docker 的配置问题,无法访问宿主机的 localhost,需要把 127.0.0.1
换成host.docker.internal
。
{
"webflux-mcp-server": {
"url": "http://host.docker.internal:8080/sse"
}
}
在服务器配置中把这个 json 的配置,再写一遍。
Dify 聊天测试~
如果对你有帮助,麻烦点个赞~~