资讯动态

MCP SSE协议发送和Stream Http协议发送

发布时间:2026/11/6 5:02:28 来源:尧图企业网站定制
springAI代码mcp serverService public class WeatherService { Tool(name getWeather, description 根据城市名称获取天气预报信息) public String getWeather(ToolParam(description 城市) String cityName) { return cityName 天气阳光明媚; } }ToolconfigComponent public class ToolConfig { Bean public ToolCallbackProvider weatherTools(WeatherService weatherService) { return MethodToolCallbackProvider.builder() .toolObjects(weatherService) .build(); } }配置spring: ai: mcp: server: name: my-business-mcp-server version: 1.0.0 # 启用 Streamable HTTP 协议 # streamable-http: # enabled: true # endpoint: /mcp # 如果也想兼容老客户端可以顺便开启 SSE sse: enabled: true endpoint: /sseSSE调试第一步拿到新的 Session ID刷新你的浏览器http://localhost:8004/sse在 EventStream 里复制最新的sessionId假设是abc-123。第二步发送初始化请求必须发原接口路径去掉sse,替换成/mcp/messagecurl -X POST http://localhost:8004/mcp/message?sessionIdabc-123 -H Content-Type: application/json -d {\jsonrpc\:\2.0\,\id\:\1\,\method\:\initialize\,\params\:{\protocolVersion\:\2024-11-05\,\capabilities\:{},\clientInfo\:{\name\:\curl-test\,\version\:\1.0.0\}}}(这个命令应该很快就会返回一个包含协议版本的 JSON)第三步发送确认通知必须发curl -X POST http://localhost:8004/mcp/message?sessionIdabc-123 -H Content-Type: application/json -d {\jsonrpc\:\2.0\,\method\:\notifications/initialized\}(这个命令会返回 HTTP 200但可能没有内容)第四步正式调用天气工具curl -X POST http://localhost:8004/mcp/message?sessionIdabc-123 -H Content-Type: application/json -d {\jsonrpc\:\2.0\,\id\:\2\,\method\:\tools/call\,\params\:{\name\:\getWeather\,\arguments\:{\cityName\:\北京\}}}就可以收到结果了这个是针对相同sessionID得建议使用人家封装好的工具省的自己搞Stream Http调用第一步初始化获取mcp-session-id建立会话获取后续所有请求必须携带的 Session ID。curl -i -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H Accept: application/json, text/event-stream \ -d { jsonrpc: 2.0, id: 1, method: initialize, params: { protocolVersion: 2024-11-05, capabilities: {}, clientInfo: { name: my-client, version: 1.0.0 } } } 从返回的响应头中提取mcp-session-id: 你的会话ID第二步选择开启 SSE 长连接methodmessage通过 GET 请求主动告诉服务端“我准备好接收流式消息了”。# ⚠️ 关键分支开启 SSE 长连接 curl -N -X GET http://localhost:8080/mcp?methodmessage \ -H Accept: text/event-stream \ -H mcp-session-id: 你的会话ID说明这个请求会挂起并保持长连接。服务端后续推送的通知Notifications或流式响应都会通过这个通道发过来。选择开启也可以不使用这一步建立长连接直接发送post第四步建立短链接第三步查询工具列表tools/list在建立好会话后客户端通常会先拉取一下服务端有哪些可用的工具。curl -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H Accept: application/json, text/event-stream \ -H mcp-session-id: 你的会话ID \ -d { jsonrpc: 2.0, id: 2, method: tools/list, params: {} }说明如果没有执行第二步没有开启 SSE 长连接这个请求以及后续的调用都会直接通过 POST 的响应体返回普通的 JSON 结果短连接。第四步发送 POST 调用工具tools/call真正发起业务请求。curl -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -H Accept: application/json, text/event-stream \ -H mcp-session-id: 你的会话ID \ -d { jsonrpc: 2.0, id: 3, method: tools/call, params: { name: your-tool-name, arguments: { key: value } } }第五步可以ping MCP服务curl -X POST https://your-mcp-server-url/mcp \ -H Content-Type: application/json \ -H Accept: application/json,text/event-stream \ -H Authorization: Bearer YOUR_API_KEY \ -d { jsonrpc: 2.0, method: ping, id: 1 }*说明如果执行了第二步且该工具支持流式输出服务端会通过第二步建立的 SSE 长连接推送结果这个 POST 可能只返回202 Accepted。如果忽略了第二步服务端会直接在这个 POST 请求的响应体中返回完整的 JSON 结果短连接模式。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑