


专栏:Spring AI 探索手札
个人主页:手握风云
目录
一、MCP 概述
1.1. MCP 的由来
1.2. MCP 是什么
1.3. MCP 能做什么
二、MCP Java SDK 三层架构
2.1. 三层核心架构
2.2. 传输协议
三、MCP 生态
3.1. MCP Server
3.2. MCP Client
四、Spring AI 接入 MCP
4.1. 项目初始化与基础依赖搭建
4.2. 接入 MCP Server
一、MCP 概述
1.1. MCP 的由来
当下 AI 应用生态快速发展,涌现出大量需要大模型对接外部系统的业务场景,例如智能助手调取地图获取位置数据、用户提问时系统联网检索资料,或是企业内部多套 AI 应用共用同一套权限校验服务、知识库查询工具、审批流程接口。Tool Calling 工具调用能力虽然能够打破大模型纯文本生成的局限,让模型主动发起外部系统调用以完成真实业务任务,但随着工具数量持续增加、业务场景愈发复杂,传统 Tool Calling 实现方案暴露出诸多工程层面的缺陷:各类外部工具接口格式不统一,开发人员需要为每一个外部服务单独编写专属解析逻辑;工具名称、参数 Schema 等信息硬编码在模型内部,无法动态识别新增工具;整体方案跨平台适配能力不足。
为解决以上一系列痛点,模型上下文协议 MCP 作为一套全新标准应运而生,MCP 并不会取代 Tool Calling,而是为 Tool Calling 提供一套统一、可扩展、跨平台的底层连接基础设施,相当于 Tool Calling 的标准化运行时。二者分工清晰,Tool Calling 代表模型层面的决策行为,由大模型自主判断是否需要调用工具、选择哪一个工具、传入何种参数;MCP 则是标准化通信协议,统一规定了工具描述方式、工具调用发起流程、返回结果传输规则以及会话状态全生命周期管理,二者的关系可以类比 Web 开发里浏览器与 HTTP 协议,浏览器决定访问哪个网页,对应模型做出工具调用决策,而 HTTP 协议负责底层数据传输,对应 MCP 承载完整的工具通信流程。
以旅游推荐机器人为例,该机器人需要分别对接天气查询、景点检索、酒店预订三类独立服务,三类服务分属不同团队维护,交互规范各不相同,有的采用 REST 接口、有的使用 gRPC,返回数据格式有 XML 也有 JSON,同时各自有专属头部鉴权规则,如果没有 MCP,开发者就要单独编写三套完整调用逻辑,维护三套独立的异常处理机制,开发与维护成本极高;除此之外,大模型本身无法理解 HTTP 请求构造、JSON 数据组装等底层逻辑,仅能输出 “查询某地地址” 这类抽象意图,接口请求、参数封装、返回结果解析全部需要人工额外开发,而 MCP 恰好充当了 AI 与各类外部服务之间的统一翻译官与中介平台,这也是 MCP 诞生的核心意义。
1.2. MCP 是什么

MCP 全称 Model Context Protocol(模型上下文协议),是一款用于连接 AI 应用与外部系统的开源标准协议,依托该协议,Claude、ChatGPT 等大模型驱动的 AI 应用能够对接多类外部资源,涵盖本地文件、数据库等数据源,搜索引擎、计算器等工具,以及专用提示词这类工作流,以此获取信息、完成实体任务。文档中将 MCP 类比为 AI 领域的 USB-C 通用接口,就像 USB-C 统一了电子设备的充电与数据传输标准,MCP 统一规范了 AI 与外部系统的对接方式;在 MCP 出现前,每一类 AI 工具想要接入日历、邮箱等外部服务,都需要单独开发一套专属对接逻辑,而遵循 MCP 标准后,所有外部系统均可实现即插即用。

MCP 能够实现双向数据流传输,打通三类核心主体:一是各类 AI 客户端应用,包含 Claude 桌面端、LibreChat 对话界面、Claude Code、Goose 等代码编辑器工具;二是各类数据源与文件系统,例如 PostgreSQL、SQLite 数据库、GDrive 云盘;三是开发、生产力类工具,包含 Git、Sentry、Slack、谷歌地图等软件与服务,依靠统一标准化协议完成多方双向通信。
1.3. MCP 能做什么

MCP 能够拓展大模型的能力边界,官方文档列举了多种成熟落地场景。AI 智能代理可以读取用户的谷歌日历、Notion 文档,打造高度个性化的私人助手;Claude Code 能够读取 Figma 设计稿,全自动生成完整网页应用;企业对话机器人可打通组织内多套数据库,支持用户用自然语言完成数据查询与分析;大模型还能驱动 Blender 完成 3D 建模,并联动 3D 打印机输出实体模型。
综合来看,MCP 赋予 AI 模型三类核心能力:在用户授权前提下读取私人数据、调用各类专业工具执行实体任务、串联多工具链路自动完成复杂工作流。以企业数据分析场景为例,当销售经理询问上月华南区销量下滑原因时,AI 可通过 MCP 同时打通 CRM 客户系统、ERP 库存发货系统、企业内部邮件系统,整合多维度数据定位出供应商延期交货缺货的核心问题,还能自动生成可视化图表与业务优化建议文档。
针对不同使用群体,MCP 均具备显著实用价值。对开发者而言,只需开发一套 MCP Server,就能被所有兼容 MCP 标准的 AI 应用复用,无需重复编写插件;对 AI 产品厂商来说,可快速接入海量社区工具,低成本丰富产品功能、提升市场竞争力;对普通用户而言,AI 不再局限于单纯问答,能够联动外部系统处理真实事务,摆脱传统 “百科式机器人” 的局限。
二、MCP Java SDK 三层架构
MCP Java SDK 是模型上下文协议(MCP)的 Java 标准化实现,支持同步、异步两种通信模式,统一完成 AI 模型与外部工具、数据源的交互;整体采用三层分层架构,底层提供多种可替换的传输协议,分层职责完全解耦,灵活性与扩展性强。
2.1. 三层核心架构
| Client/Server 顶层 | McpClient(客户端) | AI 应用侧组件,接收用户自然语言请求,封装为标准 MCP 请求发送;屏蔽底层网络、传输细节,只关注业务调用需求 | 点餐顾客 / 私人点餐助理 |
| McpServer(服务端) | 工具服务侧组件,接收客户端请求,执行工具逻辑(地图、12306、自定义业务接口等),处理完成后返回结构化结果 | 麦当劳厨房 + 接单收银系统 | |
| Session 中间层 | DefaultMcpSession | 1. 统一管理会话生命周期;2. 为每个请求分配唯一编号,避免多请求混淆、丢消息;3. 跟踪会话全状态流转;4. 支持异步并发多任务同时执行 | 订单管理系统(订单管家) |
| Transport 底层 | McpTransport | 1. 完成 Java 对象与 JSON-RPC 报文的序列化 / 反序列化;2. 提供消息传输通道,实现收发;3. 屏蔽底层通信差异,上层无需感知传输方式 | 外卖骑手 + 消息传输管道 |
完整消息通信流转流程:首先用户向 AI 助手发起业务需求(如查询西安天气);随后 McpClient 将用户需求封装为标准 MCP 请求,再由 DefaultMcpSession 创建会话、分配唯一请求 ID 并记录会话状态;接着 McpTransport 将对象转为 JSON-RPC 报文,通过指定通道完成报文发送;远端 McpServer 接收报文并执行对应的工具逻辑;最后工具执行结果沿原路径逐层向上回传,最终由 McpClient 返回给大模型,完成整套消息通信流转。
2.2. 传输协议
传输层提供 3 种独立通信方式,底层消息统一采用 JSON-RPC 标准,仅传输载体不同,适配本地、远程、高并发响应式不同场景。
Stdio 标准输入输出进程间通信,原理是通过程序标准输入(stdin)、标准输出(stdout)完成进程内消息传输,无网络依赖,通信高效,可以通俗类比为两个人面对面直接交谈,适用于本地插件化 MCP Server、本地 jar 服务、本地开发调试。
Java HttpClient SSE 客户端传输,原理是基于 Java 原生 HttpClient 建立 HTTP 长连接,接收服务端持续推送的 SSE 事件流,通俗类比为微信实时聊天,持续接收对方实时消息,适用于独立部署远程 MCP 服务、普通同步 Web 项目。
WebFlux SSE 客户端传输(响应式 SSE),原理是基于 Spring WebFlux 非阻塞响应式编程模型处理 SSE 流式消息,支持高并发、动态实时推送,通俗类比为导航实时路况,持续动态更新拥堵、剩余里程,同时监控多条路线,适用于高并发、响应式 Reactive 后端项目。
三、MCP 生态
3.1. MCP Server
MCP Server 是提供标准化工具、资源、能力服务的服务端程序,对外统一暴露符合 MCP 协议的工具接口,供各类 MCP 客户端调用,是 AI 获取外部能力的数据源与功能载体。
MCP Server 社区:MCP.so – MCP Marketplace,这些平台按人气、功能分类检索 MCP 服务,开发者可上架自研 MCP Server,完善 MCP 生态。
3.2. MCP Client
MCP Client 是连接 AI 应用 / 开发工具与 MCP Server 的桥梁,它会读取配置、启动并连接远端 MCP 服务,向大模型同步服务提供的 Tools、Resources、Prompts 能力,接收模型的工具调用指令并转发至 MCP Server 执行,最后接收工具返回的结果,回传给大模型来生成最终回答。
| Tools | 工具调用能力:能否调用 MCP 服务提供的业务功能(查天气、查车票、浏览器操作),绝大多数客户端支持 |
| Resources | 资源访问:读取 MCP 服务托管的文件、数据库、知识库等数据 |
| Prompts | 标准化提示模板:加载 MCP 服务预设的可复用 Prompt 模板 |
| Sampling | 多结果采样:生成多套候选答案择优输出 |
| Roots | 资源权限隔离:限制 AI 可访问的文件根目录,安全管控 |
四、Spring AI 接入 MCP
4.1. 项目初始化与基础依赖搭建
创建 mcp-client-demo,引入 Spring AI Alibaba 的模块,
<dependencies>
<!– Spring Boot Web 基础(接口开发必备) –>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!– WebFlux 响应式组件(流式对话/流式语音推荐引入) –>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webflux</artifactId>
</dependency>
<!– Spring Boot 单元测试 –>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!– Spring AI Alibaba 核心启动器(整合百炼全能力:对话/图像/语音/视频) –>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
<!–mcp client–>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!– Spring AI Alibaba 版本统一管理BOM –>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-bom</artifactId>
<version>1.0.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
基础配置:
spring:
ai:
dashscope:
api-key: DASHSCOPE_API_KEY
启动类:
package com.yang.mcp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class McpClientDemo {
public static void main(String[] args) {
SpringApplication.run(McpClientDemo.class, args);
}
}
聊天接口:
package com.yang.mcp.controller;
import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/chat")
public class ChatController {
private ChatClient chatClient;
public ChatController(DashScopeChatModel chatModel) {
this.chatClient = ChatClient.builder(chatModel).build();
}
@RequestMapping("/generate")
public String generate(String message) {
return chatClient.prompt()
.user(message)
.call()
.content();
}
}
4.2. 接入 MCP Server
在 application.yml 补充 MCP 客户端全局参数:
spring:
ai:
mcp:
client:
# 请求超时
request-timeout: 60000
stdio:
# 指定 stdio 传输模式的 MCP 服务配置文件路径
servers-configuration: classpath:/mcp/mcp-servers-config.json
# 开启 MCP 客户端日志
logging:
pattern:
console: "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} – %msg%n"
file: "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} – %msg%n"
level:
io:
modelcontextprotocol:
client: DEBUG
spec: DEBUG
MCP 服务 JSON 配置文件:
{
"mcpServers": {
"playwright": {
"command": "npx.cmd",
"args": [
"-y",
"@playwright/mcp@latest"
]
},
"baidu-map": {
"command": "npx.cmd",
"args": [
"-y",
"@baidumap/mcp-server-baidu-map"
],
"env": {
"BAIDU_MAP_API_KEY": "<YOUR_API_KEY>"
}
}
}
}
- command:Windows 环境需写npx.cmd避免命令识别失败;
- args:执行百度地图 MCP npm 包;
- env:注入百度地图开放平台申请的BAIDU_MAP_API_KEY密钥;
绑定 MCP 工具到 ChatClient:首先注入框架自动生成的 ToolCallbackProvider,也就是 MCP 工具回调提供者;接着在构建 ChatClient 的时候调用 .defaultToolCallbacks(toolCallbackProvider) 方法,完成将所有 MCP 标准化工具注册给大模型的操作;如果移除这项配置,MCP 工具就会失效,大模型也就无法调用外部服务。
public ChatController(DashScopeChatModel chatModel, ToolCallbackProvider toolCallbackProvider) {
this.chatClient = ChatClient.builder(chatModel)
.defaultToolCallbacks(toolCallbackProvider)
.build();
}
测试接口:http://127.0.0.1:8080/chat/generate?message=查询天安门的坐标。



