基于 Spring AI 实现 MCP Server和Client,可接入Claude Code/Codex等
不得不承认,AI 进化的太快了。
MCP Server 教程已经烂大街了,看了一圈下来,十篇有八篇在教你写一个"查询当前时间"的 demo——加个 @Tool 注解,配一段 YAML,用 Trae 或者 Cursor 连上去试一把,完事。
但真到了生产环境就会发现,demo 到生产有一堆问题。
工具不是一个两个,可能有几十个,它们分散在不同模块里,怎么统一注册?
同一个应用既要对外暴露工具(当 Server),又要接入外部的 MCP 服务(当 Client),这两个角色怎么共存?
服务重启之后,已经连上的 MCP 客户端会话全部丢失了,怎么恢复?

这篇内容就用求职派的源码做证据,从 Spring AI 的三步实现讲起,一直拆到生产环境要解决的会话恢复问题。
01、MCP 到底在解决什么问题
MCP 的全称是 Model Context Protocol,由 Anthropic 在 2024 年底开源。
一句话说清楚它的定位,给大模型提供一个统一的工具接入标准,不用再为每个外部系统单独写适配代码。
用 USB 来类比最直观。一台裸主机只能开关机,但插上键盘、鼠标、摄像头,就能打字、拍照、视频通话——前提是这些外设都遵守了 USB 协议。

MCP 做的事和 USB 一样,只不过面对的不是外设,而是大模型需要调用的各种工具和数据源。
MCP 遵循客户端-服务端架构,一个主机可以连接多个 MCP Server。

整个协议的工作流程可以拆成 7 步。
- 用户在客户端发起一个问题
- 客户端把问题传给大模型
- 大模型分析问题,决定调用哪个工具
- 通过 MCP 协议,把工具调用指令发到服务端
- 服务端执行工具,把结果返回给大模型
- 大模型基于工具返回的结果生成最终回答
- 回答通过客户端展示给用户

对求职派来说,MCP 解决了这样一个痛点。
岗位数据的能力需要对外开放。求职派自己有岗位推荐、岗位检索、数据采集等工具,如果 Claude Desktop、Cursor、Trae 这些客户端想调用这些能力,按传统做法得一个个写 API 适配。

有了 MCP,只要把这些工具按协议标准暴露出来,任何支持 MCP 的客户端都能直接接入。
02、Spring AI 实现 MCP Server
Spring AI 对 MCP 协议做了完整的封装,实现一个 MCP Server 的步骤非常简单。
第一步,加依赖
在 pom.xml 里引入 spring-ai-starter-mcp-server-webmvc,它会自动配置好 SSE 端点和消息处理通道。
org.springframework.ai
spring-ai-starter-mcp-server-webmvc

这个 starter 是基于 WebMVC 的 SSE 协议实现通信的,适合传统 Servlet 应用。
如果项目用的是 WebFlux,对应的 starter 是 spring-ai-starter-mcp-server-webflux。
第二步,用 @Tool 声明工具方法
在求职派里,岗位推荐是最核心的 MCP 工具。来看它的实现(app/.../oc/mcp/OcMcpService.java)。
@Tool(descr...企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复