snooker stars
87.59 MB · 2025-09-15
MCP 的传输层负责将 MCP 协议消息转换为 JSON-RPC 格式进行传输,并将接收到的 JSON-RPC 消息转换回 MCP 协议消息
{ jsonrpc: "2.0", id: number | string, method: string, params?: object}
{ jsonrpc: "2.0", id: number | string, result?: object, error?: { code: number, message: string, data?: unknown }}
本地化部署mcp server后,本机上的gpt工具集成了mcp client skd,然后通过本地进程与mcp server进行通讯
MCP 早期采用 HTTP+SSE(Server-Sent Events)实现客户端与服务器的通信,但存在以下问题:
connection keep-alive
,accept text/event-stream
实际工作过程总结
连接建立 客户端请求 /sse; 服务端初始化 SseEmitter 和 McpServerSession,返回可用的消息接口地址。会话初始化 客户端通过 /message 发送 InitializeRequest,告知能力与标识; 服务端处理后通过 SSE 返回 InitializeResponse。资源管理 客户端发起如 tools/list 请求; 服务端从会话中查找状态,调用工具处理器并通过 SSE 返回结果。调用工具 客户端拼接 prompt 后发起 tools/call; 服务端查找处理器执行逻辑,并通过 SSE 返回执行结果。连接维持 客户端周期性发送 ping; 服务端返回 pong,用于保持连接活跃。连接关闭 客户端主动断开; 服务端清理对应的连接与会话状态。
使用快照版1.0.0-SNAPSHO,引用包spring-ai-starter-mcp-server-webflux
<dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webflux</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.0.0-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
使用标准版1.0.0-M6,引用包spring-ai-mcp-server-webflux-spring-boot-starter
会出现无sessionId参数的问题
统一端点
移除专用的 /sse 端点,所有通信通过单一端点(如 /mcp)完成,支持 POST 和 GET 请求。
按需流式传输
服务器可灵活选择响应方式:
会话标识与状态管理
引入会话 ID 机制(通过 Mcp-Session-Id 头部传递),支持断线重连和状态恢复。服务器可选择无状态(Stateless)或有状态(Stateful)模式运行。
灵活初始化与恢复
客户端直接发送 POST 请求,服务器返回即时 HTTP 响应,无需维护会话。
服务器通过 SSE 流分阶段推送进度(如 10%、30%),完成后关闭连接。
初始化会话后,通过会话 ID 维持上下文,支持多轮交互与断线恢复。
网络中断后,客户端可携带会话 ID 重新连接,从断点继续任务。
mcp-java-sdk 暂未支持新版 Streamable HTTP 协议,(不过应该也快了,目前在分支PR上已经有了,)需要继续使用SSE实现,当然你也可以采用pyton-sdk,它是有支持的。