MCP协议:让AI应用像插USB一样连接外部世界

前言

你有没有想过,为什么现在的AI助手只能回答一些通用问题,却无法帮你查快递、订外卖、或者根据你的位置推荐约会地点?

答案很简单:AI模型被"关在笼子里"了。它们虽然有强大的推理能力,但无法直接访问外部数据源和API。

MCP(Model Context Protocol,模型上下文协议)的出现,就是为了解决这个问题。它就像是AI应用的USB接口,为AI模型连接不同的数据源和工具提供了标准化的方法。


什么是MCP?

根据官方定义,MCP是一种开放协议,它标准化了应用程序如何向大模型提供上下文的方式。

可以把MCP想象成AI应用的USB接口------就像USB为设备连接各种外设和配件提供了标准化方式一样,MCP为AI模型连接不同的数据源和工具提供了标准化的方法。

MCP本身不是一种技术,而是一种开放标准。它的目标是增强AI与外部系统的交互能力,让AI能够:

  • 访问最新数据
  • 执行复杂操作
  • 与现有系统集成

为什么要用MCP?

1. 轻松增强AI的能力

通过MCP协议,AI应用可以轻松接入别人提供的服务来实现更多功能,比如:

  • 搜索网页
  • 查询数据库
  • 调用第三方API
  • 执行计算任务

2. 统一标准,降低使用和理解成本

MCP定义好了一套规范,让服务提供者和服务使用者去遵守。就像HTTP协议一样,它定义好了请求和响应的格式,让不同的服务可以方便地交互。

3. 打造服务生态,造福开发者

以前,如果你想给AI增加查询地图的能力,需要自己开发工具来调用第三方地图API。如果有多个项目,或者其他开发者也需要同样的能力,大家就要重复开发。

而现在,如果有人把查询地图的能力直接做成一个MCP服务,谁要用谁接入,省去了开发成本,还能保证效果一致。当大家都陆续开放自己的服务,就相当于打造了一个服务市场,造福广大开发者!


MCP架构详解

宏观架构:客户端-服务器模式

MCP的核心是 "客户端-服务器"架构,一个MCP客户端主机可以连接到多个MCP服务器。

从上图可以看出:

  • MCP客户端主机(如Claude、IDE、AI工具)作为中心节点

  • MCP服务A/B/C分别连接不同的数据源:

    • 本地数据源
    • 文件系统
    • 第三方API(通过远程调用)

SDK三层架构

如果要在程序中使用MCP或开发MCP服务,可以引入MCP官方的SDK。MCP SDK主要分为三层:

层级 组件 职责
客户端/服务器端 McpClient / McpServer 处理客户端/服务器端的协议操作
会话层 McpSession 通过DefaultMcpSession管理通信模式和状态
传输层 McpTransport 处理JSON-RPC消息序列化和反序列化

传输层支持多种实现方式:

  • Stdio(标准输入/输出流):适用于本地调用
  • SSE(Server-Sent Events):基于HTTP,适用于远程调用

SSE是基于HTTP协议实现的技术,允许服务器持续向客户端推送消息。


MCP核心概念

很多人以为MCP协议只能提供工具给别人调用,但按照官方的说法,总共有6大核心概念

概念 说明 开发关注度
Tools(工具) 让AI执行特定操作 ⭐⭐⭐ 重中之重
Resources(资源) 提供数据和上下文 ⭐⭐
Prompts(提示词) 预定义的提示模板 ⭐⭐
Sampling(采样) AI生成回复
Roots(根目录) 文件系统根路径
Transports(传输) 通信方式

对于大多数MCP服务开发,重点关注Tools即可。


MCP客户端与服务端

MCP客户端

MCP Client是MCP架构中的关键组件,主要负责:

  • 与MCP服务器建立连接并进行通信
  • 自动匹配服务器的协议版本
  • 确认可用功能
  • 负责数据传输和JSON-RPC交互
  • 发现和使用各种工具、管理资源

支持的传输方式:

  • Stdio标准输入/输出(本地调用)
  • 基于Java HttpClient和WebFlux的SSE传输(远程调用)

MCP服务器

MCP Server负责为客户端提供各种工具、资源和功能支持:

  • 处理客户端的请求
  • 解析协议、提供工具
  • 管理资源、处理交互信息
  • 记录日志、发送通知
  • 支持多客户端同时连接

关键优势: 客户端和服务端完全解耦,任何语言开发的客户端都可以调用MCP服务。


实战:在程序中使用MCP

让我们通过一个实际案例,了解如何在Spring AI框架中使用MCP。

场景需求

实现一个能够根据另一半的位置推荐约会地点的AI助手。

实现步骤

1. 引入依赖

在项目中添加Spring AI框架的MCP客户端依赖。

2. 配置MCP服务

在MCP服务市场中搜索地图服务,创建MCP Server的配置文件 mcp-servers.json

perl 复制代码
{
  "mcpServers": {
    "amap-maps": {
      "command": "npx",
      "args": [
        "-y",
        "@amap/amap-maps-mcp-server"
      ],
      "env": {
        "AMAP_MAPS_API_KEY": "改成你的 API Key"
      }
    }
  }
}

3. 配置Spring

修改Spring配置文件,由于是本地运行MCP服务,使用Stdio传输方式:

yaml 复制代码
spring:
  ai:
    mcp:
      client:
        request-timeout: 30s
        stdio:
          servers-configuration: classpath:mcp-servers.json

MCP客户端程序启动时,会额外启动一个子进程来运行MCP服务。

4. 编写业务代码

通过自动注入的ToolCallbackProvider获取MCP服务提供的所有工具,并提供给ChatClient:

scss 复制代码
@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调用的本质就是工具调用

  1. 并不是让AI服务器主动去调用MCP服务
  2. 而是告诉AI "MCP服务提供了哪些工具"
  3. 如果AI想要使用这些工具完成任务,就会告诉后端程序
  4. 后端程序执行工具后将结果返回给AI
  5. 最后由AI总结并回复

总结

MCP协议为AI应用打开了一扇通往外部世界的大门:

特性 价值
标准化 统一的接入方式,降低学习和开发成本
解耦 客户端和服务端可用不同语言开发
生态化 可复用的服务市场,避免重复造轮子
灵活性 支持本地(Stdio)和远程(SSE)两种传输方式

随着MCP生态的不断发展,我们可能会看到:

  • 更多的MCP服务被开放出来
  • AI应用的能力边界被极大扩展
  • 开发者可以像搭积木一样组合各种MCP服务

MCP,正在让AI从"大脑"变成真正能"动手"的智能体。


📌 参考资料

相关推荐
清空mega2 小时前
动手学深度学习——SSD
人工智能·深度学习
tinochen2 小时前
我用 OpenClaw 搭了一套全自动 AI 行业简报系统,每天零干预推送到飞书
人工智能
何陋轩2 小时前
OpenAI Codex深度解析:终端里的AI代码特工,一个指令重构整个项目
人工智能·面试
jarvisuni2 小时前
三大编程智能体的RULES和SKILLS规范!
人工智能·ai编程
Kel2 小时前
PydanticAI 源码深潜:类型安全依赖注入与图执行引擎的双核架构解析
人工智能·python·架构
后端开发基础免费分享2 小时前
Claude Code 最全使用指南:CLAUDE.md、rules、skills、memory 一次讲清
人工智能·ai·claude·claudecode
亿坊电商2 小时前
亿坊外贸商城系统-支持B2C,B2B多模式,让企业做外贸电商更简单!
人工智能·数据挖掘·外贸商城
小王毕业啦2 小时前
2006-2023年 省级-建成区绿化覆盖率数据(xlsx)
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
十有八七2 小时前
OpenHarness 架构说明文档
人工智能·架构