收藏本站,收获最前沿的人工智能与编程资讯!!

Spring AI MCP 服务端启动器

技术文档 15℃ 0

模型上下文协议(MCP)服务端是通过标准化协议接口向AI应用暴露特定能力的程序。每个服务端都为特定领域提供专属功能。

Spring AI MCP服务端启动器为Spring Boot应用提供MCP服务端的自动配置,实现MCP服务端能力与Spring Boot自动配置体系的无缝集成。

MCP服务端启动器提供以下能力:

  • 自动配置MCP服务端组件,包含工具、资源和提示词

  • 支持多种MCP协议版本,包括标准输入输出、服务器发送事件、可流式传输HTTP和无状态服务端

  • 支持同步和异步运行模式

  • 多种传输层选项

  • 灵活的工具、资源和提示词定义

  • 变更通知能力

  • 基于注解的服务端开发,支持Bean自动扫描与注册

MCP 服务端启动器

MCP服务端支持多种协议和传输机制。使用专用启动器并配置正确的spring.ai.mcp.server.protocol属性即可完成服务端配置:

标准输入输出

服务端类型        依赖项                          配置属性
标准输入输出(STDIO) spring-ai-starter-mcp-server    spring.ai.mcp.server.stdio=true

WebMVC

服务端类型              依赖项                              配置属性
服务器发送事件WebMVC    spring-ai-starter-mcp-server-webmvc spring.ai.mcp.server.protocol=SSE 或留空
可流式传输HTTP WebMVC   spring-ai-starter-mcp-server-webmvc spring.ai.mcp.server.protocol=STREAMABLE
无状态WebMVC            spring-ai-starter-mcp-server-webmvc spring.ai.mcp.server.protocol=STATELESS

WebFlux(响应式)

服务端类型              依赖项                                配置属性
服务器发送事件WebFlux   spring-ai-starter-mcp-server-webflux spring.ai.mcp.server.protocol=SSE 或留空
可流式传输HTTP WebFlux  spring-ai-starter-mcp-server-webflux spring.ai.mcp.server.protocol=STREAMABLE
无状态WebFlux            spring-ai-starter-mcp-server-webflux spring.ai.mcp.server.protocol=STATELESS

服务端能力

根据服务端和传输类型,MCP服务端可支持多种能力,包括:

  • 工具 - 允许服务端暴露可被大语言模型调用的工具。注意:应用上下文中所有可用工具都会作为MCP工具发布,包含从MCP客户端获取的工具

  • 资源 - 为服务端向客户端暴露资源提供标准化方式

  • 提示词 - 为服务端向客户端暴露提示词模板提供标准化方式

  • 实用工具/补全 - 为服务端提供提示词和资源URI的参数自动补全建议提供标准化方式

  • 实用工具/日志 - 为服务端向客户端发送结构化日志消息提供标准化方式

  • 实用工具/进度 - 通过通知消息实现长时间运行操作的可选进度跟踪

  • 实用工具/心跳 - 服务端上报状态的可选健康检查机制

所有能力默认启用。禁用某项能力会阻止服务端向客户端注册和暴露对应功能。

服务端协议

MCP提供多种协议类型:

  • STDIO - 进程内协议(如服务端运行在宿主应用内部),通过标准输入输出通信。启用STDIO需设置spring.ai.mcp.server.stdio=true

  • SSE - 用于实时更新的服务器发送事件协议。服务端作为独立进程运行,可处理多个客户端连接

  • Streamable-HTTP - 可流式传输HTTP传输协议允许MCP服务端作为独立进程,使用HTTP POST和GET请求处理多个客户端连接,支持可选的服务器发送事件(SSE)流传输多服务端消息,替代SSE传输。启用STREAMABLE协议需设置spring.ai.mcp.server.protocol=STREAMABLE

  • 无状态 - 无状态MCP服务端专为简化部署设计,请求间不维护会话状态,适用于微服务架构和云原生部署。启用STATELESS协议需设置spring.ai.mcp.server.protocol=STATELESS

同步/异步服务端API选项

MCP服务端API支持命令式(同步)和响应式(异步)编程模型。

  • 同步服务端 - 默认服务端类型,基于McpSyncServer实现,适用于应用中简单的请求响应模式。启用该类型需在配置中设置spring.ai.mcp.server.type=SYNC,激活后自动处理同步工具配置

注意:同步服务端仅注册同步MCP注解方法,异步方法会被忽略。

  • 异步服务端 - 异步服务端实现基于McpAsyncServer,针对非阻塞操作优化。启用该类型需配置spring.ai.mcp.server.type=ASYNC,该服务端类型自动配置集成Project Reactor的异步工具规格

注意:异步服务端仅注册异步MCP注解方法,同步方法会被忽略。

MCP 服务端注解

MCP服务端启动器全面支持基于注解的服务端开发,允许你使用声明式Java注解创建MCP服务端,无需手动配置。

核心注解

  • @McpTool - 将方法标记为MCP工具,自动生成JSON模式

  • @McpResource - 通过URI模板提供资源访问能力

  • @McpPrompt - 为AI交互生成提示词消息

  • @McpComplete - 为提示词提供自动补全功能

特殊参数

注解系统支持提供额外上下文的特殊参数类型:

  • McpMeta - 访问MCP请求中的元数据

  • @McpProgressToken - 接收长时间运行操作的进度令牌

  • McpSyncServerExchange/McpAsyncServerExchange - 用于高级操作的完整服务端上下文

  • McpTransportContext - 用于无状态操作的轻量级上下文

  • CallToolRequest - 支持动态模式的灵活工具

简单示例

@Component
public class CalculatorTools {

    @McpTool(name = "add", description = "两个数字相加")
    public int add(
            @McpToolParam(description = "第一个数字", required = true) int a,
            @McpToolParam(description = "第二个数字", required = true) int b) {
        return a + b;
    }

    @McpResource(uri = "config://{key}", name = "配置信息")
    public String getConfig(String key) {
        return configData.get(key);
    }
}

自动配置

借助Spring Boot自动配置,带注解的Bean会被自动检测并注册:

@SpringBootApplication
public class McpServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(McpServerApplication.class, args);
    }
}

自动配置会执行以下操作:

  • 扫描带有MCP注解的Bean

  • 创建对应的规格定义

  • 将其注册到MCP服务端

  • 根据配置处理同步和异步实现

配置属性

配置服务端注解扫描器:

spring:
  ai:
    mcp:
      server:
        type: SYNC  # 或 ASYNC
        annotation-scanner:
          enabled: true

附加资源

  • 服务端注解参考 - 服务端注解完整指南

  • 特殊参数 - 高级参数注入

  • 示例 - 全面的示例和用例

示例应用

  • 天气服务端(SSE WebFlux) - 集成WebFlux传输的Spring AI MCP服务端启动器

  • 天气服务端(STDIO) - 集成STDIO传输的Spring AI MCP服务端启动器

  • 天气服务端手动配置 - 不使用自动配置,通过Java SDK手动配置的Spring AI MCP服务端启动器

  • 可流式传输HTTP WebFlux/WebMVC示例 - 待完善

  • 无状态WebFlux/WebMVC示例 - 待完善

相关推荐