雷电云APP
73.70M · 2026-04-13
你有没有想过,为什么现在的AI助手只能回答一些通用问题,却无法帮你查快递、订外卖、或者根据你的位置推荐约会地点?
答案很简单:AI模型被“关在笼子里”了。它们虽然有强大的推理能力,但无法直接访问外部数据源和API。
MCP(Model Context Protocol,模型上下文协议)的出现,就是为了解决这个问题。它就像是AI应用的USB接口,为AI模型连接不同的数据源和工具提供了标准化的方法。
根据官方定义,MCP是一种开放协议,它标准化了应用程序如何向大模型提供上下文的方式。
MCP本身不是一种技术,而是一种开放标准。它的目标是增强AI与外部系统的交互能力,让AI能够:
通过MCP协议,AI应用可以轻松接入别人提供的服务来实现更多功能,比如:
MCP定义好了一套规范,让服务提供者和服务使用者去遵守。就像HTTP协议一样,它定义好了请求和响应的格式,让不同的服务可以方便地交互。
以前,如果你想给AI增加查询地图的能力,需要自己开发工具来调用第三方地图API。如果有多个项目,或者其他开发者也需要同样的能力,大家就要重复开发。
而现在,如果有人把查询地图的能力直接做成一个MCP服务,谁要用谁接入,省去了开发成本,还能保证效果一致。当大家都陆续开放自己的服务,就相当于打造了一个服务市场,造福广大开发者!
MCP的核心是 “客户端-服务器”架构,一个MCP客户端主机可以连接到多个MCP服务器。
从上图可以看出:
MCP客户端主机(如Claude、IDE、AI工具)作为中心节点
MCP服务A/B/C分别连接不同的数据源:
如果要在程序中使用MCP或开发MCP服务,可以引入MCP官方的SDK。MCP SDK主要分为三层:
| 层级 | 组件 | 职责 |
|---|---|---|
| 客户端/服务器端 | McpClient / McpServer | 处理客户端/服务器端的协议操作 |
| 会话层 | McpSession | 通过DefaultMcpSession管理通信模式和状态 |
| 传输层 | McpTransport | 处理JSON-RPC消息序列化和反序列化 |
传输层支持多种实现方式:
很多人以为MCP协议只能提供工具给别人调用,但按照官方的说法,总共有6大核心概念:
| 概念 | 说明 | 开发关注度 |
|---|---|---|
| Tools(工具) | 让AI执行特定操作 | ⭐⭐⭐ 重中之重 |
| Resources(资源) | 提供数据和上下文 | ⭐⭐ |
| Prompts(提示词) | 预定义的提示模板 | ⭐⭐ |
| Sampling(采样) | AI生成回复 | ⭐ |
| Roots(根目录) | 文件系统根路径 | ⭐ |
| Transports(传输) | 通信方式 | ⭐ |
MCP Client是MCP架构中的关键组件,主要负责:
支持的传输方式:
MCP Server负责为客户端提供各种工具、资源和功能支持:
关键优势: 客户端和服务端完全解耦,任何语言开发的客户端都可以调用MCP服务。
让我们通过一个实际案例,了解如何在Spring AI框架中使用MCP。
实现一个能够根据另一半的位置推荐约会地点的AI助手。
在项目中添加Spring AI框架的MCP客户端依赖。
在MCP服务市场中搜索地图服务,创建MCP Server的配置文件 mcp-servers.json:
{
"mcpServers": {
"amap-maps": {
"command": "npx",
"args": [
"-y",
"@amap/amap-maps-mcp-server"
],
"env": {
"AMAP_MAPS_API_KEY": "改成你的 API Key"
}
}
}
}
修改Spring配置文件,由于是本地运行MCP服务,使用Stdio传输方式:
spring:
ai:
mcp:
client:
request-timeout: 30s
stdio:
servers-configuration: classpath:mcp-servers.json
通过自动注入的ToolCallbackProvider获取MCP服务提供的所有工具,并提供给ChatClient:
@Resource
private ToolCallbackProvider toolCallbackProvider;
public String doChatWithMcp(String message, String chatId) {
ChatResponse response = chatClient
.prompt()
.user(message)
.advisors(spec -> spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)
.param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10))
.advisors(new MyLoggerAdvisor())
.tools(toolCallbackProvider) // 注册MCP工具
.call()
.chatResponse();
String content = response.getResult().getOutput().getText();
log.info("content: {}", content);
return content;
}
从上图可以看到,MCP客户端成功识别到了地图服务提供的工具,比如 maps_regeocode(将高德经纬度坐标转换为行政区划地址信息)。
从代码可以看出,MCP调用的本质就是工具调用:
MCP协议为AI应用打开了一扇通往外部世界的大门:
| 特性 | 价值 |
|---|---|
| 标准化 | 统一的接入方式,降低学习和开发成本 |
| 解耦 | 客户端和服务端可用不同语言开发 |
| 生态化 | 可复用的服务市场,避免重复造轮子 |
| 灵活性 | 支持本地(Stdio)和远程(SSE)两种传输方式 |
随着MCP生态的不断发展,我们可能会看到:
MCP,正在让AI从“大脑”变成真正能“动手”的智能体。