Dify 连接本地 SpringAI MCP Server

发布于:2025-07-13 ⋅ 阅读:(29) ⋅ 点赞:(0)

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 聊天测试~请添加图片描述
如果对你有帮助,麻烦点个赞~~
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到