Spring AI:让大模型住进 Spring 生态(九)

发布时间:2026/7/17 21:31:17

Spring AI:让大模型住进 Spring 生态(九) 专栏Spring AI 探索手札个人主页手握风云目录一、自定义 MCP Server二、 Stdio 本地服务2.1. 项目搭建2.2. 自定义业务工具开发2.3. 配置文件2.4. 客户端调用方式2.5. HTTP 流式远程服务一、自定义 MCP Server开发者可按需封装自有业务工具如用户信息查询、内部业务接口打包为标准 MCP Server供 Cursor、Cline、Spring AI 应用等任意 MCP 客户端标准化调用实现业务能力跨 AI 应用复用。提供两种主流传输实现STDIO本地进程间通信适合本地 IDE 客户端Cursor/Cline本地调用SSEHTTP 流式长连接适合远程分布式部署、多服务跨机器调用。二、 Stdio 本地服务2.1. 项目搭建核心依赖!-- MCP STDIO服务端核心启动器 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server/artifactId /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /dependency打包插件build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId version3.5.3/version /plugin /plugins /build2.2. 自定义业务工具开发定义数据实体package com.yang.mcp.entity; import lombok.AllArgsConstructor; import lombok.Data; Data AllArgsConstructor public class UserInfo { private String name; private Integer age; private String sex; private String address; }编写业务 Service使用 Tool 注解标记对外暴露的工具方法描述工具作用、入参。package com.yang.mcp.service; import com.yang.mcp.entity.UserInfo; import org.springframework.ai.tool.annotation.Tool; import org.springframework.ai.tool.annotation.ToolParam; import java.util.HashMap; import java.util.Map; Service public class UserService { static MapString, UserInfo userInfoMap new HashMap(); static { userInfoMap.put(zhangsan, new UserInfo(zhangsan, 15, 男, 北京)); userInfoMap.put(lisi, new UserInfo(lisi, 16, 男, 上海)); userInfoMap.put(wangwu, new UserInfo(wangwu, 17, 男, 广州)); userInfoMap.put(zhaoliu, new UserInfo(zhaoliu, 18, 女, 深圳)); userInfoMap.put(sunqi, new UserInfo(sunqi, 19, 女, 香港)); userInfoMap.put(zhaoba, new UserInfo(zhaoba, 20, 女, 澳门)); } Tool(description 根据用户的姓名, 返回用户信息) public String getUserInfo(ToolParam(description 用户姓名) String name) { if (userInfoMap.containsKey(name)) { return userInfoMap.get(name).toString(); } return 用户不存在; } }配置 Bean将工具注册为 MCP 可识别回调package com.yang.mcp.config; import com.yang.mcp.service.UserService; 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 ToolConfig { Bean public ToolCallbackProvider getUserInfo(UserService userService) { return MethodToolCallbackProvider.builder() .toolObjects(userService) .build(); } }2.3. 配置文件spring: ai: mcp: server: name: user-info version: 0.0.1 main: web-application-type: none # 关闭web服务纯STDIO进程 banner-mode: off执行 mvn package 生成 target 下可执行 jar客户端通过 java -jar 命令拉起该进程通过标准输入输出stdin/stdout完成 MCP 通信。2.4. 客户端调用方式Cursor IDE 客户端调用在 mcp.json 配置本地 jar 启动命令user-info: { command: java, args: [ -Dspring.ai.mcp.server.stdiotrue, -Dlogging.pattern.console, -jar, D:\\spring-ai\\spring-ai-project2\\mcp-stdio-server-demo\\target\\mcp-stdio-server-demo-1.0-SNAPSHOT.jar ] }配置完成后列表显示绿色 1 tools enabled 即生效对话中自然语言提问即可自动调用自定义工具。Spring AI 调用在 mcp-servers-config.json 写入上述 jar 启动配置注入 ToolCallbackProvider 到 ChatClient自动加载本地 MCP 服务的工具接口接收 promptAI 自动调用自定义工具返回业务数据。测试接口http://127.0.0.1:8080/chat/generate?message查询用户 lisi 的信息。2.5. HTTP 流式远程服务二选一 Web 依赖WebMvc/WebFlux不可混用!-- 传统 Servlet-- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server-webmvc/artifactId /dependency !-- 响应式-- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server-webflux/artifactId /dependencyWebMvc 配置server: port: 8088 spring: ai: mcp: server: name: user-info version: 0.0.1启动模块访问http://127.0.0.1:8088/ssespring: ai: mcp: client: sse: connections: user-info: url: http://127.0.0.1:8088/sse

相关新闻