大家好,我是二哥呀。
前面我们聊了怎么用 Spring AI 搭 MCP Server、怎么给它加鉴权。但光有 Server 端还不够——大模型要调用这些工具,中间必须有一个 Client 去发现工具、转发调用请求、把结果拿回来。
大多数 MCP Client 的教程都停留在了"配个 YAML,连上 Server,问个时间"这一步。真到了生产环境,问题远不止这些。
- MCP Server 挂了,Agent 是直接报错还是有兜底方案?
- 一个应用同时是 Server 又是 Client,两个角色怎么共存?
- Agent 能不能在对话过程中自己注册一个新的 MCP Server?
这篇就来拆解 MCP Client。从 YAML 配置到工具注册,从优雅降级到动态扩展,每个环节用求职派的源码来做证据。
系好安全带,我们粗粗发~
01、MCP Client 到底干了什么?
先把 MCP 协议里的角色关系理清楚。
MCP Server 负责暴露工具。求职派的岗位推荐服务加上 @Tool 注解就能被外部发现和调用。MCP Client 负责连接这些 Server,拉取工具列表,在大模型需要的时候发起调用。

在 Spring AI 的体系里,MCP Client 做了三件事。
- 第一,和外部 MCP Server 建立连接,拿到工具清单。
- 第二,把这些工具包装成 Spring AI 统一的工具回调接口。
- 第三,注入到 ChatClient 或 Agent,让大模型在对话中随时调用。
关键在第二步。
Spring AI 提供了一个异步的工具回调适配器,接收一组异步 MCP 客户端实例,自动把远程工具转换成和本地工具完全一样的接口。
对上层业务来说,大模型调用一个 MCP 远程工具和调用一个本地方法,代码写法完全相同。Spring AI MCP Client 的核心价值就是屏蔽了协议细节,让工具的来源对业务完全透明。
这也意味着,如果你的 Agent 已经在用 Spring AI 的 @Tool 注解定义本地工具,接入 MCP 远程工具不需要改任何业务代码,只需要在配置里加上 MCP Server 的地址,再把工具回调适配器传进去就行了。
02、怎么配置 MCP Client?
求职派的 MCP Client 配置分两层。YAML 定义连接参数,JSON 文件定义具体的 Server 列表。
YAML 配置
先看 application-ai.yaml 中的 MCP 部分。
spring:
ai:
mcp:
client:
stdio:
servers-configuration: ${MCP_SERVERS_CONFIG}
enabled: ${AGENT_MCP_CLIENT_ENABLED:false}
name: 求职派MCP
request-timeout: 30s
type: async
几个关键配置项说明一下。
type: async 表示使用异步客户端。求职派全局统一用异步模式,代码里注入的是异步 MCP 客户端而不是同步版本。异步模式不会阻塞主线程,更适合多 Agent 并发调用的场景。
enabled 通过...
回复