前言:MCP(Model Context Protocol,模型上下文协议)作为一个全新的开源协议框架被提出,它试图重塑模型开发、集成与协作的方式。MCP让只能人机交互的大模型转化为了能够快速对接各类业务系统的生产力大脑。传统做法通常是“业务系统 + AI”,即在现有各业务系统中局部融入AI能力;而借助MCP(AI中心平台),则可以实现“AI + 业务”的全新构建方式,将AI作为新业务的核心驱动力。通过将原有系统的功能封装为API并接入MCP,各类新业务可按需调用已有能力,实现快速集成与创新。这种方式无需推翻已有系统重来,成本更低、效率更高,尤其适用于新建一两个以AI为中心的系统场景。对于企业级(To B)和政府(To G)应用而言,这种基于MCP的架构重构更具现实意义和落地价值。
一、MCP简介
1.1、MCP定义
MCP(Model Context Protocol) 是一种由 Anthropic (Claude 大模型母公司)于 2024 年 11 月发布的开源协议,旨在标准化大型语言模型(LLM)与外部数据源和工具的交互。它像“AI的USB-C接口”,通过统一接口让 AI 模型无缝连接数据库、文件、API 等外部资源。MCP 通过客户端-服务器架构(MCP Client 和 MCP Server)实现,广泛应用于 AI 助手、开发工具等场景,助力构建更智能、互联的 AI 应用。
MCP协议的初衷是希望能将大模型的工具调用来做统一,目标是成为 AI 领域的“HTTP 协议”,推动 LLM 应用的标准化和去中心化。简单介绍一些没有MCP之前的痛点问题,帮助大家理解为何需要MCP。
-
客户端:每个工具暴露出来的对接方式都不一样,客户端为了去对接各类工具,需要做很多开发,比如getWeather工具是一个http服务,getLocation是一个HSF服务,并且两种入参,出参的数据结构都不一样,那这时候的对接开发成本就会很高;
-
服务端:A平台Agent和B平台Agent所需要服务的约定不一致,同一个服务需要考虑客户端的约定,开发两套接口,开发成本和维护成本都较高;
因此,MCP的出现约定了在AI开发领域客户端和服务端的对接规范,当然未来也许会有更好用的协议也会替代MCP成为一种新的规范。
1.2、MCP 组成
MCP遵循客户端 - 服务器架构,包含以下几个核心部分:
-
MCP 主机(MCP Hosts):发起请求的 AI 应用程序,比如聊天机器人、AI 驱动的 IDE 等。
-
MCP 客户端(MCP Clients):在主机程序内部,与 MCP 服务器保持 1:1 的连接。
-
MCP 服务器(MCP Servers):为 MCP 客户端提供上下文、工具和提示信息。
-
本地资源(Local Resources):本地计算机中可供 MCP 服务器安全访问的资源,如文件、数据库。
-
远程资源(Remote Resources):MCP 服务器可以连接到的远程资源,如通过 API 提供的数据。
1.3、模型上下文协议的概述
模型上下文协议 (MCP) 为 AI 模型交互定义了一个标准化的消息传递格式。它促进了不同 AI 模型和平台之间的互操作性。
主要特性
- 标准化消息格式:MCP 为请求、响应和错误消息定义了一个通用的结构。
- 模型无关:该协议设计为可与各种类型的 AI 模型(例如,聊天模型、嵌入模型、图像模型)配合使用。
- 可扩展性:MCP 允许添加自定义元数据和扩展,以支持特定用例。
- 互操作性:通过遵守 MCP,不同的 AI 系统可以无缝通信。
MCP 消息结构,一个典型的 MCP 消息包含以下组件:
-
标头 (Headers):包含元数据,如消息 ID、时间戳和模型信息。
-
正文 (Body):携带实际的有效载荷,如用户输入或模型输出。
-
上下文 (Context):提供有关对话历史或先前交互的附加信息。
1.4、MCP作用
由于 LLM 难以直接访问实时数据源(如企业内部数据库、实时文档、在线服务等),开发者通常需要为每个应用场景定制专用的适配器或插件,这既耗时费力,又缺乏可扩展性。
-
标准化:MCP 希望通过定义一个标准化的协议,减少为每个工具或数据源编写自定义接口的工作,降低开发复杂性,使开发者在无需重复开发的情况下快速连接模型与数据源,提升模型的通用性和落地效率,降低了模型与多样化数据源之间的连接复杂度。
-
灵活性:MCP 通过帮助 LLM 直接与数据和工具集成,保证 LLM 切换的灵活性。
-
开放性:其作为开放协议,允许任何开发者为其产品创建 MCP 服务器。有助于快速扩展生态,形成类似 HTTP 和 REST API 的网络效应,推动模型与应用场景的融合。
-
安全性:协议内置了严格的权限控制机制,数据源的所有者始终掌握访问权。模型在获取数据时需要经过明确授权,避免数据泄露和滥用问题。
1.5、MCP工具调用流程
用户发送问题 -> LLM 分析可用工具 -> 客户端通过 MCP 服务器来执行所选工具 -> 将结果发送回 LLM -> LLM根据工具返回结果和用户问题进行回答。
1.6、MCP Java SDK 架构
Java MCP 实现遵循三层架构:
![]() |
|
MCP 客户端 | |
---|---|
MCP 客户端是模型上下文协议(MCP)架构中的关键组件,负责建立和管理与 MCP 服务器的连接。它实现了协议的客户端部分,处理:
| |
MCP 服务器 | |
---|---|
MCP 服务器是模型上下文协议(MCP)架构中的基础组件,为客户端提供工具、资源和功能。它实现了协议的服务器端,负责:
| |
二、为什么需要MCP?
MCP 存在的意义是它解决了大模型时代最关键的三个问题:数据孤岛、开发低效和生态碎片化等问题。
1.打破数据孤岛,让AI“连接万物”
大模型本身无法直接访问实时数据或本地资源(如数据库、文件系统),传统方式需要手动复制粘贴或定制接口。MCP 通过标准化协议,让大模型像“插USB”一样直接调用外部工具和数据源,例如:
-
查天气时自动调用气象 API,无需手动输入数据。
-
分析企业数据时直接连接内部数据库,避免信息割裂。
2.降低开发成本,一次适配所有场景
在之前每个大模型(如 DeepSeek、ChatGPT)需要为每个工具单独开发接口(Function Calling),导致重复劳动,MCP 通过统一协议:
-
开发者只需写一次 MCP 服务端,所有兼容 MCP 的模型都能调用。
-
用户无需关心技术细节,大模型可直接操作本地文件、设计软件等。
3.提升安全性与互操作性
-
安全性:MCP 内置权限控制和加密机制,比直接开放数据库更安全。
-
生态统一:类似 USB 接口,MCP 让不同厂商的工具能“即插即用”,避免生态分裂。
4.推动AIAgent的进化
MCP 让大模型从“被动应答”变为“主动调用工具”,例如:
-
自动抓取网页新闻补充实时知识。
-
打开 Idea 编写一个“Hello World”的代码。
MCP 的诞生,相当于为AI世界建立了“通用语言”,让模型、数据和工具能高效协作,最终释放大模型的全部潜力。
三、Spring AI MCP 集成
Spring AI MCP 是通过 Spring Boot 集成扩展了 MCP 的 Java SDK(开发工具),它同时提供了 Spring Boot 客户端和服务器的启动器,方便使用 Spring AI MCP 快速开发 AI 应用程序。
Spring AI 通过以下 Spring Boot 启动器提供 MCP 集成:
客户端启动器
spring-ai-starter-mcp-client
- 提供 STDIO 和基于 HTTP 的 SSE 支持的核心启动器
spring-ai-starter-mcp-client-webflux
- 基于 WebFlux 的 SSE 传输实现服务器启动器
spring-ai-starter-mcp-server
- 具有 STDIO 传输支持的核心服务器
spring-ai-starter-mcp-server-webmvc
- 基于 Spring MVC 的 SSE 传输实现
spring-ai-starter-mcp-server-webflux
- 基于 WebFlux 的 SSE 传输实现
Spring AI MCP 实战
当前案例中,我们使用 MCP 实现一个天气查询小助手,其中包含的主要角色有:
-
MCP Server:MCP 服务提供方,提供天气查询功能。
-
MCP Client:MCP 客户端(大模型端)我们对接 DeepSeek LLM 实现对 MCP Server 的调用,从而实现天气预报的查询功能。
具体交互流程如下:
(1)实现 MCP Server 代码编写
MCP Server 主要实现步骤如下:
-
添加 MCP Server 依赖。
-
设置 MCP 配置信息。
-
编写 MCP Server 服务代码。
-
将 MCP Server 进行暴露设置。
关键实现代码如下。
添加 MCP Server 依赖
<dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
</dependencies><repositories>
<repository><name>Central Portal Snapshots</name><id>central-portal-snapshots</id><url>https://central.sonatype.com/repository/maven-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots>
</repository>
<repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots>
</repository>
<repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases>
</repository>
</repositories>
MCP Server 依赖有三种类型:
-
标准输入/输出 (STDIO):spring-ai-starter-mcp-server
-
Spring MVC(服务器发送的事件):spring-ai-starter-mcp-server-webmvc
-
Spring WebFlux(响应式 SSE):spring-ai-starter-mcp-server-webflux
设置 MCP 配置信息
MCP Server 包含以下配置信息:
配置项 | 描述 | 默认值 |
---|---|---|
enabled | 启用/禁用 MCP 服务器 | TRUE |
stdio | 启用/禁用 stdio 传输 | FALSE |
name | 用于标识的服务器名称 | mcp-server |
version | 服务器版本 | 1.0.0 |
type | 服务器类型 (SYNC/ASYNC) | SYNC |
resource-change-notification | 启用资源更改通知 | TRUE |
prompt-change-notification | 启用提示更改通知 | TRUE |
tool-change-notification | 启用工具更改通知 | TRUE |
tool-response-mime-type | (可选)每个工具名称的响应 MIME 类型。例如,将 mime 类型与工具名称相关联spring.ai.mcp.server.tool-response-mime-type.generateImage=image/pngimage/pnggenerateImage() | - |
sse-message-endpoint | Web 传输的 SSE 终端节点路径 | /mcp/message |
其中 MCP Server 又分为以下两种类型。
服务器类型
-
同步服务器:默认服务器类型,它专为应用程序中的简单请求-响应模式而设计。要启用此服务器类型,请在您的配置中设置。 激活后,它会自动处理同步工具规格的配置,spring.ai.mcp.server.type=SYNC。
-
异步服务器:异步服务器实现使用非阻塞作并针对非阻塞作进行了优化。要启用此服务器类型,请使用配置您的应用程序。此服务器类型会自动设置具有内置 Project Reactor 支持的异步工具规范,spring.ai.mcp.server.type=ASYNC。
编写 MCP Server 服务代码
编写天气预报查询伪代码:
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Service;import java.util.Map;@Service
publicclass WeatherService {@Tool(description = "根据城市名称获取天气预报")public String getWeatherByCity(String city) {Map<String, String> mockData = Map.of("西安", "晴天","北京", "小雨","上海", "大雨");return mockData.getOrDefault(city, "抱歉:未查询到对应城市!");}}
将服务暴露出去
@Bean
public ToolCallbackProvider weatherTools(WeatherService weatherService) {
return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
}
这样 MCP Server 就编写完成了。
(2)实现 MCP Client 代码编写
MCP Client 主要实现步骤如下:
-
添加 MCP Client 相关依赖。
-
设置配置信息。
-
设置 ChatClient 对象(调用 MCP Server)。
-
编写测试代码调用 MCP Server。
核心实现代码如下:
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
publicclass ClientController {@Autowiredprivate ChatClient chatClient;@RequestMapping("/chat")public String chat(@RequestParam(value = "msg",defaultValue = "今天天气如何?") String msg) {String response = chatClient.prompt().user(msg).call().content();System.out.println("响应结果: " + response);return response;}}
最终执行结果如下:
因为 MCP Server 只配置了 3 个城市,所以查询结果和预期相符:
小结
到这里使用 Spring AI 就实现了 MCP Client 和 Server 的调用了,可以看出 MCP 的推出只是为了增强大模型的能力的,有了 MCP 协议之后,任何大模型就可以调用任意实现了 MCP Server 的服务了,这样就无线扩充了大模型的能力,为 AI 的发展提供了标准的协议和便利的对接。
4、 MCP、A2A 与 Function Calling 的关系
Function Calling:模型如何“伸手”操作工具
MCP:工具如何“统一接头”对接模型
A2A:多智能体如何“互相喊话”分工协作
(1)三者不是替代,而是“工具调用 → 接口标准化 → 智能体协作”的递进演化,演进脉络概览
-
2023 Q3 OpenAI — Function Calling
让 GPT‑4 能在一次对话里发起 API 调用。
-
2024 Q4 Anthropic — MCP
用统一协议把“任意工具 × 任意模型”拆解为线性成本。
-
2025 Q2 Google — A2A
让多个 Agent 形成流水线,共同完成长链路任务。
(2)三者对比与协同
维度
Function Calling
MCP
A2A
聚焦点
模型 ↔单工具
模型 ↔多工具
Agent ↔ Agent 通信模式
单次 RPC
双工 JSON‑RPC / WebSocket
HTTP + SSE / gRPC‑stream
扩展成本
M×N M+N K(Agent 数) 链式调用
应用层显式编排
Server 内部可递归
原生 Task DAG
典型角色
“伸手”
“接头”
“喊话”
参考链接:
MCP,这个AI 开源协议有多大想象空间?
全面剖析 MCP、A2A 与 Function Calling 的架构关系
一文讲透MCP的原理及实践
必看!SpringAI轻松构建MCP Client-Server架构
MCP入门篇: 史上最全MCP市场合集!90%的人都不知道(建议收藏)
从原理到示例:Java开发玩转MCP
Spring AI 1.0 正式发布,属于 Java 开发者的 AI 框架
https://mp.weixin.qq.com/s/qgiV2eQ858NzcEBj16YRMg