spring-ai之mcp整合sse

1. 什么是 SSE?

Server-Sent Events(SSE) 是一种基于 HTTP 的轻量级协议,允许服务器向客户端单向推送实时数据。与 WebSocket 不同,SSE 是单向通信(仅服务器→客户端),适用于股票行情、新闻推送、日志监控等场景。

SSE 核心特点:

简单易用:基于 HTTP,无需复杂协议

自动重连:浏览器内置断线重连机制

低延迟:比轮询(Polling)更高效

兼容性好:支持所有现代浏览器(IE 除外)


2. MCP 如何集成 SSE?

MCP 协议的核心设计,是围绕「一个长连接,两类接口」构建的高效通信模型。

  • 1 个长连接:客户端通过 SSE 建立服务端到客户端的单向消息流;

  • 2 个接口

    • GET /sse:用于建立长连接并接收服务端消息;

    • POST /message:客户端发送请求、响应或通知;

  • 优势:连接稳定、延迟低、天然支持事件流,适用于 AI 工具类应用中持续会话与异步结果返回等场景。

3. spring-ai的集成使用?

调用端配置:

@Bean("syncMcpToolCallbackProvider")
    public SyncMcpToolCallbackProvider syncMcpToolCallbackProvider(List<McpSyncClient> mcpClients) {///}
@Bean
    public ChatClient chatClient(OpenAiChatModel openAiChatModel, @Qualifier("syncMcpToolCallbackProvider") ToolCallbackProvider syncMcpToolCallbackProvider, ChatMemory chatMemory) {}
{
  "mcpServers": {
    "xxx": {
      "command": "java",
      "args": [
        "-Dspring.ai.mcp.server.stdio=true",
        "-jar",
        "xxx.jar"
      ]
    }
  }
}
spring:
  ai:
    mcp:
      client:
        request-timeout: 360s
        sse:
          connections:
            xxx:
              url: http://127.0.0.1:8080

mcp端的配置:

spring:
  ai:
    mcp:
      server:
        name: ${spring.application.name}
        version: 1.0.0

这样就可以自由拓展并注册tools ,当然,你也可以将tools注册到当前服务也是可以的,分开的拓展性更好