当前位置: 首页 > news >正文

Spring AI(11)——SSE传输的MCP服务端

WebMVC的服务器传输

支持SSE(Server-Sent Events) 基于 Spring MVC 的服务器传输和可选的STDIO运输

导入jar

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>

 服务类

该类中定义需要对外提供的调用的函数方法,本例仅为测试使用,没有实际意义。

package com.renr.springainew.mcpserver;import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;@Slf4j
@Service
public class NameMcpServer {@Tool(description = "根据孩子的出生日期和性别起名")public String childName(@ToolParam(description = "出生日期") String birth,@ToolParam(description = "性别") String gender) {log.info(birth, gender);return "老任与码";}
}

其中@Tool用与描述方法的作用,@ToolParam用于描述参数的作用。这些内容描述的越详细,大模型选择该工具的可能性越大。

配置类

用于向MCP客户端公开函数工具

package com.renr.springainew.config;import com.renr.springainew.mcpserver.NameMcpServer;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyServerConfig {@Beanpublic ToolCallbackProvider nameTool(NameMcpServer nameMcpServer) {return MethodToolCallbackProvider.builder().toolObjects(nameMcpServer).build();}}

MCP 服务器支持四种主要功能类型,可以单独启用或禁用:

  • 工具 - 启用/禁用工具功能spring.ai.mcp.server.capabilities.tool=true|false
  • 资源 - 启用/禁用资源功能spring.ai.mcp.server.capabilities.resource=true|false
  • 提示 - 启用/禁用提示功能spring.ai.mcp.server.capabilities.prompt=true|false
  • 完成 - 启用/禁用完成功能spring.ai.mcp.server.capabilities.completion=true|false

默认情况下,所有功能均处于启用状态。禁用功能将阻止服务器注册和向客户端公开相应的功能。

本例仅配置了函数工具

yml配置


spring:ai:mcp:server:name: name-mcp-serverversion: 1.0.0type: SYNCserver:port: 8088

启动服务端

MCP客户端连接服务端

MCP客户端的使用,参考Spring AI(9)——MCP客户端-CSDN博客

导入jar

<dependency>--><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>

客户端的yml配置

spring:ai:zhipuai:api-key: XXXXXXXXXchat:options:model: glm-4-flashtemperature: 0.7mcp:client:name: my-mcp-clientversion: 1.0.0request-timeout: 10stype: syncsse:connections:server2:url: http://localhost:8088sse-endpoint: /sse

启动客户端并测试

输出

WebFlux的服务器传输

支持SSE(Server-Sent Events) 基于 Spring WebFlux 的服务器传输和可选的STDIO运输

导入jar

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>

注意:由于使用WebFlux,springboot项目必须删除spring-boot-starter-web的依赖

yml配置


spring:ai:mcp:server:name: name-mcp-serverversion: 1.0.0type: SYNCserver:port: 8088

启动服务端

切记,pom中一定要删除spring-boot-starter-web的依赖

 启动日志中可以看到,webflux使用netty做服务器

MCP客户端连接服务端

导入jar

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client-webflux</artifactId>
</dependency>

yml配置

spring:ai:zhipuai:api-key: XXXXXXXXXchat:options:model: glm-4-flashtemperature: 0.7mcp:client:name: my-mcp-clientversion: 1.0.0request-timeout: 10stype: syncsse:connections:server2:url: http://localhost:8088sse-endpoint: /sse

启动客户端测试 

测试结果与使用WebMvc服务器的一致,不再赘述

http://www.lqws.cn/news/161101.html

相关文章:

  • 拷贝构造函数
  • (头歌作业)-6.5 幻方(project)
  • 在使用一些不用驱动大电流的设备就可以用stm32的自己的上下拉但是本身上下拉不就是给iicspi这些他通信给信号的吗中怎么还跟驱动能力扯上了有什么场景嘛
  • ProfiNet 分布式 IO 在某污水处理厂的应用
  • 自定义注解facade 实现切面 进行日志记录和参数校验
  • 智能标志桩图像监测装置如何守护地下电缆安全
  • html-pre标签
  • LeetCode 461.汉明距离
  • Spring MVC 之 异常处理
  • 简化复杂系统的优雅之道:深入解析 Java 外观模式
  • 数字证书_CA_详解
  • 2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
  • 二叉树的遍历总结
  • jdbc查询mysql数据库时,出现id顺序错误的情况
  • C:\Users\中文名修改为英文名
  • delphi7 链表 使用方法
  • 性能优化之SSR、SSG
  • 【前端】vue3性能优化方案
  • sourcetree取消待推送
  • 《计算机是怎么跑起来的》第二章读后感
  • 算法题(162):火烧赤壁
  • 13.4 AI颠覆语言学习:预录制视频+GPT-4评估如何实现60%成本降低与40%留存飙升
  • Seata 分布式事务 AT 模式
  • 智慧供水运维管理系统
  • LeetCode 70 爬楼梯(Java)
  • 探索未知惊喜,盲盒抽卡机小程序系统开发新启航
  • 半监督学习:低密度分离假设 (Low-Density Separation Assumption)
  • mysql密码正确SpringBoot和Datagrip却连接不上
  • c++第七天--特殊运算符的重载练习
  • day20 leetcode-hot100-38(二叉树3)