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后端,底部就会出现我们定义的工具反方。

相关推荐
NAGNIP9 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab10 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab10 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP13 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年14 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼14 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS14 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区15 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈15 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang16 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx