使用spring ai支持mcp server的一些经验总结

项目背景

  • 准备把现有服务直接对外暴露mcp tools,所以最优方式就是在现有java服务上直接支持,而不是单独再起一个python服务支持mcp
  • 当前应用是常规springboot tomcat应用,不是webflux技术栈,所以本文的springai指的是spring-ai-starter-mcp-server-webmvc
  • 为了提供mcp server,项目事先已经升级到jdk21/springboot3.5了(可以参考之前的文章)

总结

  • 相比python,java的mcp sdk开发进展缓慢很多,bug也更多
  • spring ai在当前最新的1.1.0中才支持streamable http协议
  • 通过springai暴露sse接口没有实际生产使用的能力,bug太多(已经是业内共识了,根因是开源java mcp jdk bug太多),比如这个致命的连接/线程泄露问题
  • sse这个协议就不适合实际工程使用,不明白为啥当初选了这么一个东西,学院派的风格
  • 使用streamable http协议可以避免很多问题,有投入实际生产使用的基础了
  • 现在的bug主要是服务端主动向客户端推送这个场景带来的(要维持长连接),所以直接使用stateless streamable http能避免很多问题(不保持长连接)
  • 现在mcp的鉴权还比较薄弱,官房社区支持的oauth2太重(又是学院派的风格),实际应用中使用api秘钥鉴权的方式比较多,所以最好自定义一个http请求头来做鉴权校验
  • 最好改下mcp默认的endpoint,避免被人扫到直接调用

个人感想

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容