核心要点

  • Spring AI 用专门 starter 提供 MCP 支持:spring-ai-starter-mcp-client 与 spring-ai-starter-mcp-server,开箱即用

  • 作为 MCP Client:在配置里声明要连接的 MCP Server,框架把对端暴露的 tools 自动包装成 ChatClient 的 ToolCallback,模型即可像调用本地工具一样调用

  • 作为 MCP Server:把本地标了 @Tool 的方法暴露成标准 MCP 服务,供任意 MCP 客户端(如 Claude Desktop、其它 Agent)发现与调用

  • 传输层三选一:stdio(本地子进程)、SSE、Streamable HTTP(远程网络),按部署形态配置即可

标准回答

MCP 与 Spring AI 的关系

MCP(Model Context Protocol)是把工具、资源、提示标准化暴露给模型的开放协议。Spring AI 把它纳入官方生态,通过两个 starter 实现双向集成:应用既能作为 Client 消费别人的 MCP 服务,也能作为 Server 把自己的能力暴露出去。开发者无需手写协议握手、工具发现与 schema 转换。

作为 MCP Client(消费方)

引入 spring-ai-starter-mcp-client,在 application 配置中声明要连接的 MCP Server(指定传输类型与端点)。应用启动时,框架自动与 Server 完成握手、拉取其工具清单,并把每个远端 tool 包装成 Spring AI 的 ToolCallback。把这些 callback 注册进 ChatClient 后,模型在推理时即可发起 Function Calling,框架负责把调用路由到对应 MCP Server、拿回结果再回填给模型。对业务代码而言,远端工具和本地 @Tool 用法一致。

作为 MCP Server(提供方)

引入 spring-ai-starter-mcp-server,把已有的、标注 @Tool 的 Spring Bean 方法注册为 MCP 工具。框架据方法签名与注解自动生成工具 schema,按 MCP 协议对外提供发现与调用端点。这样这套能力就能被任何 MCP 客户端复用,实现「一次实现、多端共享」。

传输配置

MCP 支持 stdio(把 Server 作为本地子进程,适合桌面/CLI 场景)、SSEStreamable HTTP(适合远程、跨服务部署)。Client 与 Server 两侧都按部署形态选择对应传输:本地工具进程用 stdio,云端微服务用 Streamable HTTP。选型只是配置差异,上层 ToolCallback 抽象不变。

典型落地

一个 RAG/Agent 应用常同时扮演两种角色:作为 Client 接入团队共享的「数据库查询」「内部搜索」等 MCP Server 复用现成工具;同时作为 Server 把本服务独有的领域能力暴露给上游 Agent。配合 ChatClient 的 Advisors 与 ChatMemory,即可拼出可维护的工具型应用。

常见误区

⚠️ 常见踩坑

误以为集成 MCP 要手写协议解析或自己维护工具 schema——Spring AI 的 starter 已自动完成握手、工具发现与 ToolCallback 转换。另一个常见错误是混淆 Client/Server 角色:连别人的服务用 client starter,暴露自己的工具用 server starter,二者可同时启用。还要注意传输选型要和部署形态匹配,stdio 仅适合本地子进程,跨网络须用 SSE 或 Streamable HTTP。

追问

追问 1MCP Client 自动注册的工具,和直接用 @Tool 定义的本地工具有什么区别?

对模型和 ChatClient 而言两者都是 ToolCallback,调用方式一致。区别在执行位置与生命周期:本地 @Tool 在本进程内同步执行;MCP 工具的真实逻辑在远端 Server,框架通过所选传输(stdio/SSE/Streamable HTTP)转发调用并等待结果,因此要额外考虑网络延迟、超时、连接断开重连与远端不可用时的降级。schema 也来源不同——本地工具由方法签名生成,MCP 工具由远端 Server 在发现阶段提供。

追问 2stdio、SSE 与 Streamable HTTP 三种传输该如何选?

stdio 把 MCP Server 当本地子进程,通过标准输入输出通信,适合桌面应用、CLI 工具或与本机命令行程序集成,无网络开销但只能本机。SSE 与 Streamable HTTP 走 HTTP,适合 Server 独立部署、跨服务或云端共享的场景;Streamable HTTP 是较新的、对流式与会话支持更完善的方式,通常优先于传统 SSE。选型主要看 Server 是否需跨进程/跨机访问,以及是否要被多个客户端共享。

追问 3把本地 @Tool 暴露成 MCP Server 时,安全和权限要注意什么?

MCP Server 一旦暴露,任意持有端点的客户端都可能发现并调用工具,因此要遵循最小暴露原则:只把确实需要共享的工具注册为 MCP 工具,敏感操作(写库、删除、付款、外发)不要无条件开放。远程传输须加认证与鉴权(如 Token、网关层校验),并对入参做严格校验防注入。同时设置调用频率与资源限制,对高风险动作保留审计日志与人工确认,避免上游 Agent 误用或被劫持后造成越权副作用。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习