MCP SSE协议发送注意

springAI代码

mcp server

复制代码
@Service
public class WeatherService {

    @Tool(name = "getWeather", description = "根据城市名称获取天气预报信息")
    public String getWeather(@ToolParam(description = "城市") String cityName) {
        return cityName + "天气阳光明媚~";
    }
}

Toolconfig

复制代码
@Component
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: /sse

调试

第一步:拿到新的 Session ID

刷新你的浏览器 http://localhost:8004/sse,在 EventStream 里复制最新的 sessionId(假设是 abc-123)。

第二步:发送初始化请求(必须发!)
复制代码
curl -X POST "http://localhost:8004/mcp/message?sessionId=abc-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?sessionId=abc-123" -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"method\":\"notifications/initialized\"}"

(这个命令会返回 HTTP 200,但可能没有内容)

第四步:正式调用天气工具
复制代码
curl -X POST "http://localhost:8004/mcp/message?sessionId=abc-123" -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"id\":\"2\",\"method\":\"tools/call\",\"params\":{\"name\":\"getWeather\",\"arguments\":{\"cityName\":\"北京\"}}}"

就可以收到结果了,这个是针对相同sessionID得

建议使用人家封装好的工具省的自己搞

相关推荐
Nebula_g8 分钟前
JavaSE加强:IO流
java·开发语言·windows·stream·javase
rannn_11116 分钟前
JVM 面试题:类加载过程详解(附高频考点)
java·jvm·后端
程序猿乐锅4 小时前
从0-1一文详解RabbitMQ
java·分布式·后端·中间件·rabbitmq·ruby
考虑考虑7 小时前
JDK26中的List.ofLazy()
java·后端·java ee
小蒜学长7 小时前
基于SpringBoot的公寓报修管理系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·公寓报修管理系统·多角色协同
for_ever_love__8 小时前
MySQL 主从复制讲透:binlog 原理、搭建步骤与读写分离
java·数据库·mysql·binlog·读写分离·原理·主从复制
小π军10 小时前
操作系统面试题
java·linux·服务器
倔强的石头10610 小时前
应用账号最小权限实践:读写账号、报表账号、运维账号分层
java·运维·开发语言
Shaoshing10 小时前
ThreadLocal
java·jvm·threadlocal