用途:在 Spring Boot 3 应用中通过 Model Context Protocol(MCP)暴露应用能力,包括工具、资源或提示,供 MCP 客户端调用。
主要能力与依赖:优先使用 Spring AI MCP server starter,由 Spring AI BOM 管理 MCP SDK 依赖,不要强行指定独立 SDK 版本。传输 starter 三选一:spring-ai-starter-mcp-server、spring-ai-starter-mcp-server-webmvc(远程 MVC)、spring-ai-starter-mcp-server-webflux(远程响应式)。若不用 Spring AI 而直接用原始 SDK,则使用 MCP Java SDK 2.x,并参考其迁移指南,注意原始 SDK 示例未必匹配 Spring AI 1.x 管理的版本。
使用方式:Spring AI 1.x 通常通过显式 MethodToolCallbackProvider 暴露 @Tool 方法,示例中在 @Configuration 中构建 ToolCallbackProvider,并在组件方法上使用 @Tool 与 @ToolParam 注解。返回 DTO 而非序列化的 JPA 实体;每个工具对象只注册一次,避免重复能力;保持工具名称与描述稳定;限制结果大小、执行时间和下游调用。原始 SDK 代码使用 CallToolResult.builder() 等构建器,旧构造函数已移除。
传输配置:在 application 配置中设置 spring.ai.mcp.server 的 name、version、type、stdio 等。本地客户端启动 jar 时用 stdio;远程服务器在所选 Spring AI 1.x 版本支持时使用对应 MVC 或 WebFlux starter 与 Streamable HTTP。stdio 模式下 stdout 承载 JSON-RPC 帧,必须保持干净,日志应输出到 stderr 或文件并关闭 banner。
安全与验证:远程 MCP 端点及每个底层领域操作都要认证与授权;校验标识符、枚举值、分页和结果上限;不要暴露密钥、堆栈跟踪、持久化实体或无限制的管理工具;用真实 MCP 客户端测试发现、无效参数、授权、超时和关闭流程。复制 2.0 注解示例前先查看所选 Spring AI 1.x 版本的发布说明。
限制与常见问题:不要让代理覆盖 Spring AI 1.x 下的 MCP SDK;不要把 Spring AI 2.0 原生注解代码复制到 1.x 项目;不要使用已移除的 CallToolResult 构造函数;stdio 模式不要向 stdout 打日志;不要重复注册同一工具对象;不要暴露实体或无界集合。示例文件包括 examples/OrderMcpTools.java、examples/good-order-tools.java、examples/bad-order-tools.java。官方来源:Spring AI MCP 概览、MCP Java SDK releases、MCP Java SDK 2.0 迁移文档。