当前位置: 首页 > ds >正文

MCP协议学习

MCP协议出现的背景

MCP(Model Context Protocol,模型上下文协议)由Anthropic公司于2024年11月推出,旨在解决大语言模型(LLM)与外部数据源、工具和服务之间的标准化交互问题。例如某金融科技公司需开发一款智能投顾工具,要求 LLM(如 GPT-4)能实时调用外部金融数据源(如 Bloomberg、同花顺)获取股票行情、财报数据,并结合分析模型生成投资建议。

MCP的提出类似于硬件领域的USB-C接口,旨在为AI应用提供统一的“万能插头”,简化开发过程中大模型与外部工具联动开发的流程。

MCP架构简介

  • ​标准化接口​:定义通用的通信协议、数据格式(JSON-RPC 2.0)和规则,支持文本、图像等多模态数据。
  • ​分层架构​:
    • ​MCP Host​:发起请求的AI应用(如Claude Desktop)。
    • MCP Client​:协议转换层,维护与服务器的连接。
    • MCP Server​:封装数据源或工具能力(如数据库、API)。
    • 本地数据源:MCP 服务器可安全访问的您计算机中的文件、数据库和服务
    • 远程服务:MCP 服务器可通过互联网连接的外部系统(如通过 API 访问的系统)
      图1
      从架构图中可看到Host中通过MCP Client与Server进行通讯,使用Server提供的能力。Server可能是本地部署或远程服务。

MCP协议概述

模型上下文协议(MCP)[2] 由多个协同工作的关键不分构成:

  • 基础协议:核心 JSON-RPC 消息类型(如请求、响应、通知)
  • 生命周期管理:定义了完整交互的多个阶段
  • 数据传输:定义了可用的通信传输协议
  • 权限控制:定义身份认证、访问控制
  • 实用工具:请求取消、Ping机制、

基础协议

基础协议不分内容主要介绍了 MCP 协议中消息交互的规范,基于 JSON-RPC 2.0 标准,定义了三种消息类型及其格式要求。

  • 请求(Requests):模型或工具主动发起操作(比如 “帮我查下今天的天气”),必须带一个唯一 “编号”(ID),避免混乱。
  • 响应(Responses):对请求的回复(比如 “今天晴天,温度 25℃”),必须和请求的 “编号” 对应,要么返回结果,要么报错(比如 “查不到天气”)。
  • 通知(Notifications):单向消息(比如工具主动告诉模型 “数据更新了”),不需要回复,就像发一条微信消息不要求对方必须回。

生命周期管理

生命周期管理介绍了MCP中客户端和服务器连接的生命周期管理,核心是确保双方在通信过程中能正确协商能力并管理状态。

MCP 规定客户端和服务器的连接必须经历三个阶段,就像两个人打电话要先 “打招呼确认身份”,再 “正式聊天”,最后 “礼貌挂断” 一样:

  • 初始化阶段(Initialization):双方先 “互相认识”,确认能听懂对方的 “语言”(协议版本),并告诉对方自己会什么 “技能”(支持的功能)。
  • 操作阶段(Operation):双方按照初始化时协商好的 “技能”,正式开始通信和执行任务(比如调用工具、查询数据)。
  • 关闭阶段(Shutdown):双方 “礼貌挂断电话”,干净利落地断开连接,避免资源浪费。

生命中期管理就像两个人合作完成任务前需要先 “确认彼此能配合” 一样,MCP 的生命周期管理确保:

  • 兼容性:客户端和服务器用相同的 “语言”(协议版本)沟通,避免 “鸡同鸭讲”。
  • 安全性:通过协商能力,限制双方只能使用允许的功能,防止越权操作(比如服务器不能随便访问客户端未授权的文件)。
  • 稳定性:明确的连接建立和关闭流程,加上超时机制,避免连接 “僵死” 或资源浪费。

数据传输

传输主要讲了 “模型和工具之间通过什么通道打电话” 的问题。传输包括如下三种方式

  • stdio(标准输入 / 输出,类似命令行通信)
  • HTTP(超文本传输协议,网页常用的通信方式)
  • WebSocket(全双工通信,实时交互必备)

MCP 协议支持多种传输方式是为了适配不同的使用场景

  • 适配不同场景:本地工具用 stdio 更简单,远程工具用 HTTP/HTTPS 更通用,实时交互用 WebSocket 更高效。
  • 灵活性和兼容性:开发者可以根据工具的部署环境(本地 / 云端)、数据传输需求(实时性 / 安全性)选择最合适的 “通道”,就像选择最适合的交通方式(走路 / 开车 / 坐飞机)。

权限控制规则

权限控制规则,也就是解决 “模型和工具之间如何安全地互相信任、避免越权操作” 的问题。规定了 “谁能访问什么资源,以及如何验证身份和权限”。

例:让智能助手(模型)帮你查电脑里的文件,但肯定不希望它未经允许就删除文件或访问隐私数据。MCP 的权限控制就是为了确保:

  • 模型只能访问它被允许的工具和数据(比如只能查财务数据,不能改工资表)。
  • 工具只能执行模型授权的操作(比如数据库工具只能执行查询,不能执行删除语句)。
  • 防止坏人冒充模型或工具搞破坏(比如黑客伪装成模型骗取工具的敏感数据)。

因此主要解决下面3个问题

  • 身份认证(谁在访问?)
  • 权限授权(允许访问什么?)
  • 访问控制(如何阻止越权?)

实用工具

MCP定义了请求取消机制、长操作进度跟踪机制、Ping机制

  • 请求取消机制:也就是解决 “当模型或工具发出请求后,如何中途取消不再需要的操作” 的问题。用大白话来说,就像你点外卖后突然不想吃了,需要取消订单一样,MCP 协议规定了如何安全地终止一个正在进行的请求。
  • 长操作进度跟踪机制:让模型和工具实时同步任务进展” 的问题,类似下载文件时显示的进度条。
  • Ping机制:检验通信双方是否存活

其它 - 应用交互概述

大模型是不会执行代码,这个过程是MCP server提供的工具完成。当向大模型发起提问,大模型分析出需要执行工具时,会将结果返回给client,由client请求mcp server获取结果。得到结果后将历史问题加工具结果统一提交给大模型分析,最终大模型依赖完整的信息给出分析结果。

参考

[1]mcp介绍,https://modelcontextprotocol.io/introduction
[2]协议规范,https://modelcontextprotocol.io/specification/2025-03-26/basic

http://www.xdnf.cn/news/10703.html

相关文章:

  • 《Effective Python》第六章 推导式和生成器——将迭代器作为参数传递给生成器,而不是调用 send 方法
  • 【兽医处方专用软件】佳易王兽医电子处方软件:高效智能的宠物诊疗管理方案
  • 腾讯云 Python3.12.8 通过yum安装 并设置为默认版本
  • [android]MT6835 Android 指令启动MT6631 wifi操作说明
  • Android第十二次面试GetX库渲染机制
  • SpringBoot-Thymeleaf
  • React 18 生命周期详解与并发模式下的变化
  • 《深入解析SPI协议及其FPGA高效实现》-- 第二篇:SPI控制器FPGA架构设计
  • 【学习笔记】On the Biology of a Large Language Model
  • 前端八股之Vue
  • 三种经典算法优化无线传感器网络(WSN)覆盖(SSA-WSN、PSO-WSN、GWO-WSN),MATLAB代码实现
  • 刘克清因“长相违规”而困扰
  • Linux入门(十三)动态监控系统监控网络状态
  • 【Linux】基础文件IO
  • 如何自动部署GitLab项目
  • 【C++】类的析构函数
  • Axure 基础入门
  • 【Linux】网络--网络层--IP协议
  • JavaSE知识总结 ~个人笔记以及不断思考~持续更新
  • 短视频平台差异视角下开源AI智能名片链动2+1模式S2B2C商城小程序的适配性研究——以抖音与快手为例
  • debian12操作系统apt命令出现无法安全的用该源更新解决方案
  • 池中锦鲤的自我修养,聊聊蓄水池算法
  • 4、ubuntu系统 | 文本和目录操作函数
  • 结构型设计模式之桥接模式
  • 结构型设计模式之装饰模式
  • NodeJS全栈WEB3面试题——P4Node.js后端集成 服务端设计
  • 【C语言预处理详解(下)】--#和##运算符,命名约定,命令行定义 ,#undef,条件编译,头文件的包含,嵌套文件包含,其他预处理指令
  • Android基于LiquidFun引擎实现软体碰撞效果
  • 吴恩达MCP课程(5):research_server_prompt_resource.py
  • LabVIEW轴角编码器自动检测