从零到生产:基于 MCP 协议的 Spring Boot 全栈 AI 开发实战
引言:为什么企业级 AI 系统需要 MCP
如果你已经做过企业 AI 落地,就会很快遇到一个现实问题:模型很聪明,但真正有价值的能力并不在模型里,而在企业已有系统里。
以支付平台为例:
- 客服希望通过自然语言查询订单状态、退款进度、支付失败原因
- 风控希望让 AI 自动判断交易风险并给出可解释结论
- 运维希望通过对话式方式查看失败率、超时率、近 5 分钟异常峰值
- 运营希望按时间窗口统计退款率、客诉率、渠道成功率
问题是,这些能力通常分散在订单服务、支付服务、风控服务、数据仓库、监控平台、知识库系统中。过去每接一个 AI Agent,往往都要做一轮定制集成,最终形成典型的 N × M 问题:
N个 AI 应用M个业务系统- 每一对都要单独做协议适配、鉴权、参数映射、超时控制和可观测埋点
MCP(Model Context Protocol,模型上下文协议)的核心价值,不是“让模型多调用几个函数”,而是把 AI 与企业工具之间的交互标准化。它把“工具发现、参数定义、上下文读取、执行反馈”抽象成统一协议层,使 AI Host、MCP Client、MCP Server 之间职责清晰,进而把系统从“脚本拼接”提升到“可治理架构”。
本文不做概念演示,而是从架构师视角,完整讲清楚一套基于 Spring Boot + Spring AI + MCP 的生产级落地方案,包括:
- MCP 的协议原理与架构价值
- 基于支付场景的企业级系统设计
- 生产级工具暴露、参数校验、容错和审计
- 高并发、可扩展、可观测、安全治理方案
- Kubernetes 部署与多实例扩缩容
- 一条可执行的从 PoC 到生产演进路径
一、MCP 协议到底解决了什么
1.1 从函数调用到标准化工具总线
很多团队第一次接触 MCP 时,会把它理解为“函数调用协议”。这个理解不能算错,但远远不够。
函数调用只解决“模型调用某个方法”这一步,而 MCP 解决的是一整条链路:
- Host 如何发现有哪些工具可用
- 工具的输入输出如何标准化描述
- 工具之外的上下文资源如何暴露
- 提示模板如何参数化复用
- 调用过程中的状态、异常、进度如何反馈
- 多个 Server、多个实例、多个租户如何治理
因此,MCP 更像是 AI 时代的“工具总线协议”,而不是一个简单的 SDK。
1.2 MCP 的三端协作模型
在工程上,MCP 至少包含三类角色:
Host:承载 AI 应用的运行环境,例如 Claude Desktop、Cursor、自研 Agent 平台Client:Host 内部或旁路的协议代理,负责与 MCP Server 建立连接、发现工具、发起调用Server:对外暴露工具、资源、提示模板的服务端,一般由业务系统实现
它们之间的职责分工非常关键:
| 角色 | 关注点 | 典型职责 |
|---|---|---|
| Host | 用户意图与对话编排 | Prompt 编排、工具选择、结果融合 |
| Client | 协议通信与连接管理 | 能力发现、协议协商、超时控制、负载路由 |
| Server | 业务能力封装与治理 | 工具实现、参数校验、审计、鉴权、限流 |
这意味着:AI 决策与业务能力不再强耦合。模型负责“决定要不要调用工具”,业务系统负责“安全、稳定、正确地执行工具”。
1.3 MCP 的四类能力模型
真正完整的 MCP 系统,至少涉及四类能力:
Tools
模型可调用的函数型能力,如:
- 查询订单状态
- 统计退款率
- 评估交易风险
- 创建退款工单
Resources
可读取的上下文对象,如:
- 风控规则文档
- 退款政策说明
- 渠道 SLA 配置
- 商户信息快照
Prompts
参数化提示模板,用于把领域经验沉淀为结构化模板,而不是散落在代码中的字符串。
Sampling
Server 反向请求 Host 或模型进行推理,是更高级的协作模式,适合复杂推理链、工具内嵌模型判断、审核流等场景。
很多文章只讲 Tools,但企业级实践里,Resources + Prompts + Tools 的组合,才是做出稳定 AI 系统的关键。
1.4 为什么生产环境优先选择 Streamable HTTP
MCP 的传输方式决定了你的系统上限。
常见方案大致如下:
| 传输方式 | 适用场景 | 优点 | 局限 |
|---|---|---|---|
| STDIO | 本地开发、IDE 插件 | 接入简单、延迟低 | 无法天然水平扩展 |
| SSE | 轻量远程接入 | 实现直接 | 长连接多、代理链路复杂 |
| Streamable HTTP | 服务化生产部署 | 无状态、易负载均衡、云原生友好 | 需要更完整的服务治理 |
对于生产环境,优先推荐 Streamable HTTP,原因有三:
- 更适合无状态部署,天然适配容器与弹性扩缩容
- 更容易接入网关、限流、鉴权、链路追踪等企业基础设施
- 避免大量长连接在高并发场景下占用连接数、线程和代理资源
一句话总结:PoC 阶段可以用 STDIO 或 SSE,生产阶段优先用 Streamable HTTP。
二、真实业务场景建模:支付平台的 AI 工具化改造
为了避免文章只停留在 Demo 层,我们用一个真实的企业场景来建模。
2.1 业务目标
我们要把一个 Spring Boot 支付平台改造成 MCP Server,对外提供如下能力:
getPaymentStatus:查询某笔交易的支付状态getRefundMetrics:统计指定时间范围退款率assessFraudRisk:基于规则和画像评估风险等级createRefundTicket:在异常场景下创建退款处理工单queryMerchantHealth:按商户查看近 5 分钟支付健康度
2.2 业务域拆分
从架构上,不建议把所有逻辑直接写在 Tool 方法里。更合理的分层是:
MCP 接入层 ├─ Tool 定义 ├─ Tool 参数校验 ├─ Tool 鉴权与审计 └─ Tool 结果封装 应用服务层 ├─ PaymentQueryService ├─ RefundAnalysisService ├─ FraudDecisionService └─ TicketOrchestrationService 领域能力层 ├─ 支付领域模型 ├─ 风控评分规则 ├─ 退款策略规则 └─ 商户运营规则 基础设施层 ├─ PostgreSQL / Redis / Kafka ├─ 第三方支付渠道 API ├─ 工单系统 API └─ 监控与日志系统这层拆分的好处是:
- Tool 只是协议适配层,不污染领域逻辑
- 领域服务可以被 HTTP API、批处理任务、MCP 工具共同复用
- 后续替换 MCP 框架或增加新 Agent,不需要重写业务核心
三、生产级架构设计
3.1 单实例能跑,不代表架构成立
很多团队第一版是这样:
AI Client -> MCP Server -> 数据库这能工作,但有四个明显问题:
- 没有流量治理能力
- 没有多实例会话策略
- 没有统一鉴权与审计出口
- 没有异步削峰和故障隔离
真正可上线的架构应该至少长这样:
┌───────────────────────────────────────────────────────────────┐ │ AI Host / Agent │ │ Claude Desktop / Cursor / 自研 Copilot / 企业 Agent Hub │ └──────────────────────────┬────────────────────────────────────┘ │ MCP ┌──────────────────────────▼────────────────────────────────────┐ │ MCP Gateway / API Gateway │ │ OAuth2 / 限流 / 负载均衡 / 审计 / Trace 透传 │ └───────────────┬───────────────────────┬───────────────────────┘ │ │ ┌───────────────▼──────────────┐ ┌────▼────────────────────────┐ │ Payment MCP Server Cluster │ │ Fraud MCP Server Cluster │ │ Tool 暴露 / 读写分离 / 缓存 │ │ 风控规则 / 特征评分 / 审核 │ └───────────────┬──────────────┘ └────┬────────────────────────┘ │ │ ┌─────────▼──────────┐ ┌───────▼────────────────────┐ │ PostgreSQL / Redis │ │ Kafka / Rule Engine / ES │ └─────────────────────┘ └────────────────────────────┘3.2 高并发设计原则
MCP 工具本质上是“被模型驱动的远程函数调用”。一旦进入生产,你要面对的不是单个用户,而是:
- 多个 Agent 同时调用
- 一个会话里多个工具串行或并行调用
- 模型重试导致的幂等问题
- 高峰期大量统计查询和聚合计算
所以在设计时要遵循四条原则:
原则一:同步工具尽量短小
适合同步返回的工具应该是:
- 单表查询
- 小范围聚合
- 快速规则判断
- 毫秒级缓存读取
不要把“大查询、跨系统事务、复杂报表”强行做成同步 Tool。
原则二:重任务异步化
例如:
- 生成月度商户分析报告
- 全量风控回放
- 历史退款聚合计算
更适合采用“提交任务 + 返回任务 ID + 轮询或回调取结果”的模式。
原则三:工具必须幂等
模型可能因为超时、重试、上下文漂移而重复调用同一工具。任何写操作型工具都必须具备:
- 幂等键
- 去重校验
- 重复请求保护
原则四:把状态从连接中解耦
不要把会话、上下文、任务进度绑死在单机内存里。生产环境必须把关键状态外置到 Redis、数据库或事件流中。