SpringAI开发SSE传输协议的MCP Server

SpringAI 访问地址:Spring AI

‌ Spring AI‌是一个面向人工智能工程的应用框架,由Spring团队推出,旨在将AI能力集成到Java应用中。Spring AI的核心是解决AI集成的根本挑战,即将企业数据和API与AI模型连接起来‌。

MCP( Model Context Protocol,MCP******)******

模型上下文协议(即 Model Context Protocol,MCP)是一个开放协议,它规范了应用程序如何向大型语言模型(LLM)提供上下文。MCP 提供了一种统一的方式将 AI 模型连接到不同的数据源和工具,它定义了统一的集成方式。在开发智能体(Agent)的过程中,我们经常需要将将智能体与数据和工具集成,MCP 以标准的方式规范了智能体与数据及工具的集成方式,可以帮助您在 LLM 之上构建智能体(Agent)和复杂的工作流。目前已经有大量的服务接入并提供了 MCP server 实现,当前这个生态正在以非常快的速度不断的丰富中。给Java开发人员深度拥抱AI提供了可能。

传输协议

1、STDIO传输协议

STDIO方式是基于进程间通信,MCP Client和MCP Server运行在同一主机,主要用于本地集成、命令行工具等场景。

**优点:**简单可靠,无需网络配置;适合本地部署场景;进程隔离,安全性好。

**缺点:**仅支持单机部署;不支持跨网络访问;每个客户端需要独立启动服务器进程。

2、SSE传输协议

SSE(Server-Sent Events)传输层是基于HTTP的单向通信机制,专门用于服务器向客户端推送数据。MCP Client远程调用MCP Server提供的SSE服务。实现客户端和服务端远程通信。

**优点:**支持分布式部署;可跨网络访问;支持多客户端连接;轻量级,使用标准HTTP协议。

**缺点:**需要额外的网络配置;相比stdio实现略微复杂;需要考虑网络安全性。

开发案例实现

本例演示创建SSE通信协议的MCP Server。

1、环境配置要求

  • JDK 17
  • SpringBoot 3.4.2

2、创建SpringBoot项目配置pom.xml

XML 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.2</version>
        <relativePath/>
    </parent>
     <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-ai.version>1.0.0-M6</spring-ai.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
            <version>1.0.0-M6</version>
        </dependency>

 </dependencies>

3、创建Tool类

本例演示创建SSE通信协议的MCP Server。

以下参考网络资料分别创建MathTool、WeatherTool两个工具类,分别提供两个Long数值的加法和算法功能,提供城市天气查询功能。

MathTool.java

java 复制代码
@Slf4j
@Service
public class MathTool {

    @Tool(name = "add", description = "两个Long数值执行加法运算")
    public Long add(@ToolParam Long a, @ToolParam Long b){
        log.info("{},执行{} + {}操作。", new Date().toLocaleString(), a, b);
        return a + b;
    }


    @Tool(name = "multiply", description = "两个Long数值执行乘法运算")
    public Long multiply(@ToolParam Long a, @ToolParam Long b){
        log.info("{},执行{} * {}操作。", new Date().toLocaleString(), a, b);
        return a * b;
    }
}

WeatherTool.java

java 复制代码
@Slf4j
@Service
public class WeatherTool {

    @Tool(name = "getWeatherByCityName",description = "根据城市名称获取天气预报")
    public String getWeatherByCityName(String city) {
        log.info("getWeatherByCity方法被调用, 查询的城市为:{}",city);
        Map<String, String> mockData = Map.of(
                "西安", "天气炎热",
                "北京", "晴空万里",
                "上海", "阴雨绵绵",
                "郑州", "多云转晴"
        );
        log.info("{},天气如何: {}", mockData.getOrDefault(city, "抱歉:未查询到您关注的城市天气!"));
        return mockData.getOrDefault(city, "抱歉:未查询到您关注的城市!");
    }
}

4、注册MCP工具

注册mathTool(数学工具),weatherTool(天气工具)

java 复制代码
@Configuration
public class ToolsPublisher {

    @Bean
    ToolCallbackProvider tools(MathTool mathTool, WeatherTool weatherTool) {
        // mathTool     数学工具
        // weatherTool  天气工具
        return MethodToolCallbackProvider
                .builder()
                .toolObjects(mathTool,weatherTool)
                .build();
    }
}

5、配置application.yml

bash 复制代码
server:
  port: 8080
spring:
  application:
    name: mcp-server-sse
  ai:
    mcp:
      server:
        name: mcp-server-sse
        version: 1.0.0
        type: ASYNC
        stdio: false
        sse-message-endpoint: /mcp/messages
        sse-endpoint: /sse

5、测试MCP Server

下载Cherry Studio工具,使用工具测试本地开发的MCP Server

左侧选择MCP Server,按照上图顺序依次完成第一步、第二步、第三部,成功连上MCP Server后端,底部就会出现我们定义的工具反方。

相关推荐
视觉&物联智能6 分钟前
【杂谈】-智领安全新篇:人工智能驱动现代物理安全防护体系
人工智能·深度学习·安全·aigc·agi
IT古董7 分钟前
【漫话机器学习系列】265.普拉托变换的相关问题(Issues With Platt Scaling)
人工智能·机器学习·issue
jndingxin14 分钟前
OpenCV CUDA模块图像特征检测与描述------图像中快速检测特征点类cv::cuda::FastFeatureDetector
人工智能·opencv·计算机视觉
大模型铲屎官27 分钟前
【Python-Day 16】代码复用基石:详解 Python 函数的定义与调用
开发语言·人工智能·pytorch·python·深度学习·大模型·函数
love530love39 分钟前
【笔记】PyCharm 中创建Poetry解释器
运维·人工智能·windows·笔记·python·pycharm·conda
Blossom.1181 小时前
量子通信技术:原理、应用与未来展望
大数据·人工智能·深度学习·安全·机器学习·计算机视觉·量子计算
Lilith的AI学习日记1 小时前
【AI面试秘籍】| 第17期:MoE并行策略面试全攻略:从理论到调参的降维打击指南
人工智能·python·面试·职场和发展·llama
lucky_lyovo2 小时前
机器学习-KNN算法
人工智能·算法·机器学习
Tiny番茄2 小时前
对抗学习(AL),生成对抗网络(GAN),强化学习,RLHF
人工智能·学习·生成对抗网络
跨境卫士情报站2 小时前
亚马逊第四个机器人中心将如何降低30%配送成本?
大数据·人工智能·经验分享·机器人