一.MCP的由来
在当今快速发展的 AI 应用生态中,有越来越多这样的应用场景:
- 某智能助手需要调用高德地图获取位置信息
- 用户提问时,系统要通过进行联网搜索
- 企业内部多个 AI 应用都依赖同一个用户权限校验服务、知识库查询工具或者审批流程接口
这个时候问题就来了,Tool Calling (工具调用) 可以使大模型能够突破语言生成的局限,主动调用外部系统完成实际任务。然而,随着工具数量增长和应用场景复杂化,传统的 Tool Calling 实现方式逐渐暴露出一系列工程挑战:
- 工具接口格式不统一,需为每个服务定制解析逻辑;
- 模型侧需硬编码工具定义 (如函数名、参数 schema),缺乏动态发现能力;
- 多平台兼容性差
- ......
为了解决这个问题,一个名为模型上下文协议 (Model Context Protocol, MCP) 的标准应运而生。MCP 并不替代 Tool Calling,而是为其提供一个统一、可扩展、跨平台的连接基础设施。
MCP 是 Tool Calling 的 "标准化运行时"可以把两者的关系理解为:
Tool Calling是 "决策行为":模型决定 "要不要调用工具"、"调哪个工具"、"传什么参数"MCP是 "通信协议":规定 "如何描述工具"、"如何发起调用"、"如何传递结果"、"如何管理会话状态"
这就像 Web 应用中的浏览器与 HTTP 协议的关系:
- 浏览器决定要访问哪个页面 (相当于模型发起 Tool Calling)
- 而真正完成数据传输的是底层的 HTTP 协议 (相当于 MCP 承载调用过程)
假设你要做一个旅游推荐机器人,它可以:
- 查天气
- 查景点信息
- 预定酒店
这些功能分别由三个不同的团队提供服务。如果每个服务都自己定义一套交互方式 ------ 有的用 REST API,有的用 gRPC,有的返回 XML,有的要求特定 Header 认证...... 如果没有 MCP,你的 AI 应用程序就要写三套调用逻辑,维护三种错误处理机制,非常麻烦。
更糟糕的是,AI 本身并不直接理解 HTTP 请求怎么发、JSON 怎么构造。它只能告诉你:"我想查某个用户的地址。" 至于怎么调用接口、传什么参数、如何解析结果,必须有人帮它完成。于是,我们需要一个 "翻译官"+"中介平台"------ 这就是 MCP 诞生的意义。
接下来我们就来聊聊什么是 MCP,它为什么重要,以及它是如何工作的。
二.MCP是什么?
MCP (Model Context Protocol) 是一个开放标准协议,它的目标是让大模型驱动的 AI 应用(比如 Claude、ChatGPT 等)能够像 "插上 USB-C 接口" 一样,轻松连接到外部系统 ------ 包括数据库、文件、工具、软件甚至物理设备。
你可以把它想象成:AI 的 "万能插座" 或 "通用接口"。
以前每个 AI 工具要接入某个服务(如日历、邮箱),都得单独开发一套对接逻辑;现在有了 MCP,就像所有设备都统一用 USB-C 充电一样,只要遵循这个标准,就能即插即用。

三.MCP能做什么
MCP 让 AI 模型不再只是 "聊天机器人",而是可以:
- 获取你的私人数据 (在授权前提下)
- 使用专业工具执行任务
- 自动完成复杂工作流
案例 1: 企业级数据分析助手
销售经理问:"为什么上个月华南区销量下降了?"
- AI 通过 MCP 同时访问:
- CRM 系统 (客户跟进记录)
- ERP 系统 (库存与发货数据)
- 邮件系统 (内部沟通异常报告)
- 分析发现:某关键供应商延迟交货导致缺货
- 自动生成可视化图表 + 改进建议文档
不同角色的核心价值
- 对于开发者而言,可以不再为每个 AI 应用重复开发插件,只需做一个 MCP Server,多个 AI 都能调用。
- 对于 AI 应用商而言,可以快速集成海量工具,增强产品竞争力(比如让 ChatGPT 能控制微信)。
- 对于普通用户而言,可以获得更聪明、更懂你、能办事的 AI 助手,而不是只会回答问题的 "百科机器人"。
更多详尽内容请看MCP官网https://modelcontextprotocol.io/docs/getting-started/intro
四.MCP Java SDK架构

- Client/Server 层 :
McpClient处理客户端操作,McpServer管理服务端协议操作,二者均通过McpSession进行通信管理。- Session 层 (McpSession) :通过
DefaultMcpSession实现管理通信模式及状态。- Transport 层 (McpTransport):处理 JSON-RPC 消息的序列化与反序列化,支持多种传输协议实现。
MCP 三层架构与外卖系统类比
| MCP 架构层 | 功能说明 | 比喻 |
|---|---|---|
| Client / Server | 谁发起请求?谁处理任务? | 顾客和餐厅厨师 |
| Session 层 | 管理会话生命周期,确保不丢单、不错乱 | 订单管理系统(订单号、状态跟踪) |
| Transport 层 | 消息怎么传过去?用什么方式送? | 手机消息通道 + 外卖骑手 |
场景示例:用 AI 助手点外卖
假设你在家用「AI 小助手」帮你点一份牛肉汉堡:你对家里的智能语音助手说:"帮我点个麦当劳的牛肉汉堡,加番茄酱,不要洋葱",这个 AI 助手是用 Java 写的,并使用了 MCP Java SDK 来连接一个「餐厅订单服务」。
第一层:Client/Server ------「谁点餐?谁做饭?」
这一层决定:谁发起请求?谁负责执行?
- McpClient(客户端) :你是顾客,AI 是你的「点餐代理」
McpClient就像你的私人助理。- 它接收你说的话:"点牛肉汉堡",然后把它转化成标准格式的请求,发给餐厅系统。
- 它不关心怎么送消息、也不管网络细节,只关心:"我要下单"。
- McpServer(服务端) → 麦当劳厨房 + 订单处理系统
McpServer是麦当劳那边提供的「标准化接单服务」。- 它收到请求后,会进行相关处理,比如检查菜单是否存在、库存是否充足、能否定制(比如不要洋葱),然后安排厨师做汉堡。
- 处理完后,返回结果:"订单已创建,预计 25 分钟送达。"
第二层:Session 层 (DefaultMcpSession) ------「订单管理系统」
这一层负责:管理对话过程,确保不丢单、不错乱、能追踪状态。
想象一下,如果你同时点了汉堡、奶茶、薯条,还问了好几次 "做好了吗?"、"骑手出发了吗?",怎么办?这时候就需要一个「订单管家」来管理全过程:
- 当你第一次点餐时,它创建一个「会话」(就像打开一个聊天窗口)。
- 给每个请求分配唯一编号(如
order-1001),防止多个订单混淆。 - 记录当前状态:初始化中 → 下单成功 → 制作中 → 骑手取餐 → 配送中 → 已送达。
- 支持异步通信:你可以继续问「奶茶好了吗?」,而不用等汉堡先送到。
第三层:Transport 层 (McpTransport) ------「外卖骑手 + 通信管道」
这一层解决:消息怎么传过去?用什么方式送?
即使你知道要点啥、厨房也知道怎么做,但如果没人送信,一切白搭。McpTransport → 就是「信息快递员」,它的任务是:
- 把你的点餐请求(Java 对象)变成一串可以传输的数据(JSON-RPC 格式)。
- 通过某种「运输方式」发送给服务器。
- 再把服务器的回复原样带回来,还原成 Java 对象。
五.传输协议
MCP Java SDK 支持的传输协议
MCP Java SDK 提供了多种 "通信方式",让 AI 应用(客户端)能灵活地与各种工具服务(服务器)进行对话。就像你可以用微信、打电话、或者当面喊人来传递消息一样,MCP 支持不同的 "传输方式"------ 这就是所谓的 传输协议 (Transport Protocol)。
目前它支持三种传输方式:
- 基于 Stdio 的进程间通信传输协议
- 通过标准输入 / 输出(stdin 和 stdout)在两个程序之间传消息,高效直接
- 类比:两个人面对面交谈
- 基于 Java HttpClient 的 SSE 客户端传输协议
- 基于 Java HttpClient 发起 HTTP 请求,并接收服务端持续发送的事件流(SSE)
- 类比:两个人使用微信聊天,微信持续发消息更新进度
- WebFlux SSE 客户端传输协议(用于响应式 HTTP 流式通信)
- 基于 WebFlux 的非阻塞、响应式编程模型,处理 SSE 流
响应式系统类比
类似开车上班,导航不只是告诉你一次路线,而是全程动态调整:
- "前方拥堵,建议绕行"
- "还有 2 公里进入高架"
- "预计迟到 5 分钟"
而且它能同时监控多个车辆、自动调节信息频率 ------ 这就是 响应式系统 (Reactive System)。
六.MCP使用
1.MCP Server
推荐几个MCP Server网址

这些MCP Server有官方实现 也有个体实现 可以集成的
2.MCP Client
有了 MCP 服务器之后,如何在实际开发或使用中调用这些服务?这就需要借助 MCP 客户端(MCP Client)。
MCP 客户端是连接本地开发环境或应用与远程 MCP 服务器之间的桥梁。不同的客户端对 MCP 协议的支持程度各不相同,有的仅支持基础功能,有的则实现了完整的多模态集成能力,比如资源访问、工具调用、提示工程(Prompts)、采样生成(Sampling)等。
现在市面上有很多类型的 MCP 客户端,比如电脑软件、代码编辑器插件、智能自动化框架等。它们各有侧重:有些适合程序员辅助写代码,有些功能更全面,适合处理复杂任务流程,用户可以根据自己的需求选择合适的客户端。
客户端集成功能有: Resources Prompts Tools Sampling Roots
可能全集成也可能部分集成
客户端:Client Application / Tool,也就是用来连接和使用 MCP 服务器的 "软件" 或 "工具",比如一个编辑器插件、桌面应用或者开发软件。
核心功能项解释
- Resources:资源访问能力,指能否读取或列出远程 MCP 服务器提供的文件、数据集、知识库等资源。核心是能不能 "看到" 并使用服务器上的资料,比如项目文档、API 文档,类比为连上一个网盘后,能否浏览里面的文件夹和文件。
- Prompts :提示工程支持。允许客户端发送预定义或动态构造的 Prompt 模板给 MCP 服务器,用于引导 AI 输出特定内容,区别于普通的聊天式提示词。例如
/test自动生成测试代码,这是由 MCP 协议标准化支持的结构化、可复用的提示模板系统。 - Tools:工具调用能力。表示客户端是否支持调用 MCP 服务器暴露的功能接口。核心是能不能让 AI"动手做事",不只是回答问题,还能执行操作,比如运行一段代码、搜索网络、调用某个 API 发消息。
- Sampling:采样生成能力。支持生成多个候选结果(多轮采样),并进行对比、排序或选择最优输出的能力,通常用于提高生成质量或探索多种可能性。核心是能不能让 AI"多想几个答案" 再挑最优解,比如生成 5 种不同的代码实现方式。
- Roots:权限边界控制能力。定义客户端可访问的资源根目录范围,是一种安全隔离机制,比如限制 AI 只能访问当前项目目录,不能越权读取其他隐私文件。
下面以antigravity(AI IDE工具)中使用为例 其他的IDE也是类似比如cursor qoder trae等等
3.环境准备
在使用 MCP Client 之前, 通常需要先运行一个或多个 MCP Server 实例. 而许多 MCP Server是通过 npx(TS/JS相关) 或 uv (Python相关)命令启动的, 在开始使用前, 必须正确配置相应的运行环境.
在 MCP 生态中,部分 MCP Server 实现是用 TypeScript 或 JavaScript 编写的,需依赖 Node.js 来运行。
npm 与 npx 的区别
- npm(Node Package Manager)是 Node.js 自带的包管理工具,用于安装和管理 JavaScript 包。
- npx 是随 npm 5.2.0 及以上版本附带的工具,用于执行 npm 包中的可执行命令,支持临时下载并运行远程包
Python 与现代包管理工具 uv
许多 MCP Server 使用 Python 编写,在 MCP 生态中,uv 被推荐作为首选工具来运行基于 Python 的 MCP Server。
安装必要的软件
| 组件 | 用途 |
|---|---|
| Node.js(含 npm 和 npx) | 运行基于 JavaScript/TypeScript 的 MCP Server |
| Python 3.8+ | 运行基于 Python 的 MCP Server |
| uv | 高效管理 Python 包与虚拟环境 |
安装Node.js
链接 https://nodejs.org/zh-cn?spm=a2ty02.30260236.d_text_model_experience.6.58fd74a1PEO7zF
安装流程
- 双击安装文件
- 按向导提示进行安装
- 务必勾选 "Add to PATH" 选项(Windows 用户尤其注意)
- 完成安装
验证安装结果
打开终端(Terminal)或命令提示符(Command Prompt),依次输入以下命令:

安装Python解释器
链接 https://www.python.org/downloads/
安装流程
- 双击安装文件,按向导提示进行安装
- 安装路径避免出现中文
- 务必勾选 "Add to PATH" 选项(Windows 用户尤其注意)
- 务必勾选 pip 选项,安装 Python 包管理工具
- 完成安装
具体安装流程参考 https://www.cnblogs.com/ljbguanli/p/19002797
Python 安装验证
打开终端(Terminal)或命令提示符(Command Prompt),依次运行以下命令:

4.在antigravity中使用MCP
在官网下载antigravity https://antigravity.google/
下载之后登录(梯子要开tun模式才能登录以及使用)

以调用百度地图 mcp为例
登录之后聊天框右上角有个mcp servers

点击之后 再点击Manage Mcp Servers

在弹出来的页面中点击view raw config

有一个mcp_config.json文件 在这个文件中就可以配置各种MCP Server
先去https://lbsyun.baidu.com/apiconsole/key 上申请一个API key

点击创建应用就可以创建了
在MCP社区中找到百度地图相关的MCP Server
https://mcpflow.io/home?mcp=59586624-3c14-495a-8545-e323eb9d4554&tab=detail
选择node.js环境集成

配置mcp_config.json文件 填入API-KEY
{
"mcpServers": {
"baidu-map": {
"command": "npx",
"args": [
"-y",
"@baidumap/mcp-server-baidu-map"
],
"env": {
"BAIDU_MAP_API_KEY": "<YOUR_API_KEY>"
}
}
}
}
配置好之后保存并且刷新

出现这个代表成功

效果演示
根据查询天气的这个Tool来演示

提示词
查询当前北京的天气以及未来三天的天气情况
可以看到会调用baidu-map来查询

5.Spring AI 接入 MCP服务
5.1.搭建项目
a) 先创建maven项目

b) 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter-dashscope</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webflux</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<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>
未接入MCP结果
5.2.以百度地图为例 接⼊MCP Server
a) 添加依赖
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>
b) 添加yml文件配置
spring:
ai:
dashscope:
api-key: ${DASH_SCOPE_API_KEY}
mcp:
client:
request-timeout: 60000
stdio:
servers-configuration: classpath:/mcp/mcp-servers-config.json
c) 根据路径创建json文件

d) 添加MCP 配置
{
"mcpServers": {
"baidu-map": {
"command": "npx.cmd",
"args": [
"-y",
"@baidumap/mcp-server-baidu-map"
],
"env": {
"BAIDU_MAP_API_KEY": "在百度地图申请的AK"
}
}
}
}
e) 工具绑定到ChatClient上
public ChatController(DashScopeChatModel dashScopeChatModel, ToolCallbackProvider toolCallbackProvider) {
this.client = ChatClient.builder(dashScopeChatModel)
.defaultToolCallbacks(toolCallbackProvider)
.build();
}
spring会自动的将json文件配置的mcp server中的工具绑定到ChatClient上
f) 重启测试

以下浏览器天气搜索出来的 可以看到可以正确调用百度地图的weather tool工具 结果正确
