MCP(模型上下文协议)说明

news2025/5/18 20:04:12

背景

MCP(Model Context Protocol,模型上下文协议)旨在解决大型语言模型(LLM)与外部数据源及工具集成的问题。由Anthropic公司于2024年11月提出并开源,目标是实现AI模型与现有系统的无缝集成。

解决的问题

  1. 统一接口:MCP 提供了一个统一的接口,解决了不同数据源和工具之间的兼容问题,使得 AI 应用能够更加灵活地与外部资源进行交互。
  2. 降低集成成本:开发者不再需要为每种工具或数据源编写单独的集成代码,通过 MCP 协议,AI 模型能够轻松接入多种服务,减少了开发和维护的工作量。
  3. 双向通信:MCP 协议的双向通信机制使得 AI 应用可以与外部工具和数据源进行更为复杂和智能的交互,为未来的智能化应用提供了更加广阔的可能性。
  4. 高度扩展性:MCP 支持多种数据传输机制和传输层协议,具有良好的扩展性,能够适应不同的应用需求。

发展历程与时间线

MCP协议的发展经历了几个关键阶段:

  • 2024年11月24日:Anthropic首次提出MCP协议,旨在为无法直接修改底层逻辑的Agent(如Cursor、Claude桌面端等)提供工具调用标准

  • 2024年12月:技术社区出现首批基于Claude 3.5 + MCP的应用案例,如通过MCP协议实现Claude与本地文件系统、数据库的自动化交互

  • 2025年3月初:MCP生态进入规模化应用阶段,企业如Block、Apollo等通过集成MCP实现跨系统数据调度,业务流程响应速度提升数倍

  • 2025年3月11日:LangChain联合创始人与LangGraph负责人围绕MCP展开辩论,40%参与者支持MCP成为未来标准

  • 2025年3月17日:Anthropic推出MCP协议新传输方案"Streamable HTTP",彻底重构通信机制,解决原HTTP+SSE方案在连接恢复性、服务器负载及双向通信方面的核心瓶颈

  • 2025年3月27日:OpenAI宣布支持MCP协议,标志着MCP获得行业广泛认可

MCP Servers主要功能

  • 资源暴露:服务器提供给客户端的数据实体,可以是文件、数据库记录等。
  • 工具提供:服务器暴露的可执行功能,客户端可以通过调用这些工具完成特定任务。
  • 动态通知:当资源发生变化时,服务器可以通过通知机制主动推送更新到客户端。
  • 会话管理:处理客户端的连接初始化、能力协商和会话关闭。

协议架构

MCP 采用客户端-服务器架构:

  • MCP Host(主机):运行LLM的应用程序,例如Claude 桌面版、IDE 插件或聊天机器人。主机是与外部数据源或工具交互的核心,通常需要从外部获取上下文数据或执行操作。
  • MCP Server(服务器):提供特定的功能或数据访问能力。服务器封装与实际数据源的交互逻辑,并对外暴露统一的MCP接口。
  • MCP Client(客户端):充当主机和服务器之间的中介,负责将主机的请求转发给服务器,并将服务器的响应返回给主机。每个客户端与一个特定的服务器建立 1:1 的连接。

通过这种架构,MCP 协议消除了传统上每种数据源都需要单独集成的繁琐步骤,使得 AI 应用能够通过统一的接口与各种外部资源进行交互。

  • MCP 主机 :通过 MCP 访问数据的 Claude Desktop、IDE 或 AI 工具等程序
  • MCP 客户端 :与服务器保持 1:1 连接的协议客户端
  • MCP 服务器 :轻量级程序,每个程序都通过标准化的 Model Context Protocol 公开特定功能
  • 本地数据源 :MCP 服务器可以安全访问的计算机文件、数据库和服务
  • 远程服务 :MCP 服务器可以连接到的 Internet 上可用的外部系统(例如,通过 API)

核心原理

MCP 协议基于标准的客户端-服务器架构,其中 Host、Client 和 Server 分别承担不同的角色。通信过程遵循 JSON-RPC 等通用 Web 协议来实现双向通信。Host 通过 MCP Client 调用 Server 提供的服务或方法(例如读取文件、执行搜索等),而 Server 完成相应操作后将结果返回给 Host。

整个过程采用 JSON 格式的消息进行数据传输,这样做的好处是确保了上下文在多次交互中得以保持,实现了“连续对话”的功能,而不仅仅是一次性 API 调用。

模型如何确定工具选择

模型通过prompt engineering来确定应该使用哪些工具:

  1. 当MCP Server初始化时,它会获取所有可用工具的描述信息
  2. 这些工具描述(包括名称、功能说明和参数要求)被格式化成文本形式
  3. 格式化后的工具描述与用户问题一起作为prompt发送给LLM
  4. LLM基于这些描述和用户问题进行推理,决定是否需要调用工具及调用哪些工具
  5. 如果需要调用工具,LLM会输出JSON格式的工具调用请求

工具的描述信息通常直接来自开发者定义的函数名和函数docstring。

ReAct循环与处理机制

MCP实现了ReAct(Reasoning + Acting)循环机制:

  1. LLM分析用户需求并制定任务计划
  2. 执行工具调用并获取结果
  3. 基于结果进行推理并决定下一步行动
  4. 如果参数不完整或输出结果置信度低,启动用户协同修正流程
  5. 循环迭代直至任务完成

    传输协议

    • stdio:通过标准I/O进行通信,服务器运行在本地,数据更安全。
    • HTTP with Server-Sent Events (SSE):通过 HTTP 与外部服务进行通信。

    相关服务

    目前已经有大量服务和应用基于 MCP 实现,例如可以使用 GitHub-MCP,用自然语言提交代码、创建 PR。利用 Figma MCP,让 AI 直接生成 UI 图。接入 Browser-tools-MCP 后,甚至还能让 cursor 根据浏览器控制台中的元素节点和打印的日志进行代码调试。

    MCP与其他协议的关系

    MCP与A2A协议

    MCP和Agent-to-Agent(A2A)协议实际上是互补关系而非竞争关系:

    • MCP:连接大模型与外部数据源/工具,提供上下文和工具支持
    • A2A:不同智能体之间的通信协议,支持智能体间协作完成复杂任务

    两者可以协同工作构建复杂AI系统:

    • A2A负责任务分配、状态同步和协作管理
    • MCP为单个智能体提供外部资源访问能力

    MCP协议内容

    xx​​​​​​​Specification - Model Context Protocol

    参考文章

    一文搞懂 MCP Servers - 虫师 - 博客园

    什么是MCP协议?MCP的技术架构与核心原理是什么?MCP封装了哪些协议?_mcp服务封装-CSDN博客

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2337753.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    orcad csi 17.4 DRC规则设置及检查

    rCAD绘制完原理图之后总是需要开启DRC检测,但是DRC一般都是英文版的,下面基于Cadence17.4 的orCAD16.6 对DRC的界面做简单的介绍 首先,鼠标点击原理图,然后再点击右上方的小勾图标 desine rules check option选项的界面 电气规…

    前端资源加载失败后重试加载(CSS,JS等引用资源)

    前端资源加载失败后的重试 .前端引用资源时出现了资源加载失败(这里针对的是路径引用异常或者url解析错误时) 解决这个问题首先要明确一下几个步骤 1.什么情况或者什么时候重试 2.如何重试 3.重试过程中的边界处理 这里引入里三个测试脚本,分别加载里三个不同的脚…

    【HDFS入门】联邦机制(Federation)与扩展性:HDFS NameNode水平扩展深度解析

    目录 引言 1 NameNode水平扩展原理 1.1 传统HDFS架构的局限性 1.2 联邦机制的基本原理 1.3 联邦架构的关键组件 2 多个Namespace的路由规则配置 2.1 客户端挂载表概念 2.2 挂载表配置示例 2.3 挂载表匹配规则 2.4 配置示例 3 BlockPool与Namespace的映射关系 3.1 B…

    AI推荐系统的详细解析 +推荐系统中滤泡效应(Filter Bubble)的详细解析+ 基于Java构建电商推荐系统的分步实现方案,结合机器学习与工程实践

    以下是AI推荐系统的详细解析: 一、核心概念 定义 推荐系统是通过分析用户行为、物品特征或用户画像,向用户推荐个性化内容的技术,广泛应用于电商、视频、社交等领域。 目标 提升用户留存与转化率增强用户体验实现精准营销 二、技术原理 1…

    CSS 美化页面(五)

    一、position属性 属性值‌‌描述‌‌应用场景‌static默认定位方式,元素遵循文档流正常排列,top/right/bottom/left 属性无效‌。普通文档流布局,默认布局,无需特殊定位。relative相对定位,相对于元素原本位置进行偏…

    无约束最优化问题的求解算法--梯度下降法(Gradient Descent)

    文章目录 梯度下降法梯度下降法原理(通俗版)梯度下降法公式学习率的设置**如何选择学习率?** 全局最优解梯度下降法流程损失函数的导函数三种梯度下降法**梯度下降法核心步骤回顾****优缺点详解****1. 全量梯度下降 (Batch Gradient Descent,…

    Python全功能PDF工具箱GUI:支持转换、加密、旋转、图片提取、日志记录等多功能操作

    使用Python打造一款集成 PDF转换、编辑、加密、解密、图片提取、日志追踪 等多个功能于一体的桌面工具应用(Tkinter ttkbootstrap PyPDF2 等库)。 ✨项目背景与开发动机 在日常办公或学习中,我们经常会遇到各种关于PDF文件的操作需求&#…

    计算机视觉---相机标定

    相机标定在机器人系统中的作用 1.确定相机的内部参数 相机的内部参数包括焦距、主点坐标、像素尺寸等。这些参数决定了相机成像的几何关系。通过标定,可以精确获取这些参数,从而将图像中的像素坐标与实际的物理坐标建立联系。例如,已知相机…

    【AI插件开发】Notepad++ AI插件开发实践:支持配置界面

    一、引用 此前的系列文章已基本完成了Notepad的AI插件的功能开发,但是此前使用的配置为JSON配置文件,不支持界面配置。 本章在此基础上集成支持配置界面,这样不需要手工修改配置文件,直接在界面上操作,方便快捷。 注…

    数据库原理及应用mysql版陈业斌实验四

    🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 实验四索引与视图 1.实验数据如下 student 表(学生表&…

    华为OD机试真题——最长的顺子(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

    2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录全流程解析/备考攻略/经验…

    足球AI模型:一款用数据分析赛事的模型

    2023 年欧冠决赛前,某体育数据平台的 AI 模型以 78% 的概率预测曼城夺冠 —— 最终瓜迪奥拉的球队首次捧起大耳朵杯。当足球遇上 AI,那些看似玄学的 "足球是圆的",正在被数据与算法拆解成可计算的概率命题。今天我们就来聊聊&#…

    【ESP32|音频】一文读懂WAV音频文件格式【详解】

    简介 最近在学习I2S音频相关内容,无可避免会涉及到关于音频格式的内容,所以刚开始接触的时候有点一头雾水,后面了解了下WAV相关内容,大致能够看懂wav音频格式是怎么样的了。本文主要为后面ESP32 I2S音频系列文章做铺垫&#xff0…

    42.[前端开发-JavaScript高级]Day07-手写apply-call-bind-块级作用域

    手写apply-call-bind <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevi…

    Vscode 插件开发

    文章目录 1、使用vscode官方插件生成框架&#xff0c;下载脚手架2、使用脚手架初始化项目&#xff0c;这里我选择的是js3、生成的文件结构如下&#xff0c;重要的就是以下两个文件4、代码5、打包使用6、发布官网地址7、publisher ID undefined provided in the extension manif…

    RTT添加一个RTC时钟驱动,以DS1307为例

    添加一个外部时钟芯片 这里多了一个选项 复制drv_rtc.c,重命名为drv_rtc_ds1307.c 添加到工程中 /*** @file drv_rtc_ds1307.c* @brief * @author jiache (wanghuan3037@fiberhome.com)* @version 1.0* @date 2025-01-08* * @copyright Copyright (c) 2025 58* */ #

    常见的低代码策略整理

    低代码策略通过简化开发流程、降低技术门槛、提升效率&#xff0c;帮助用户快速构建灵活可靠的应用。这些策略的核心优势体现在以下方面&#xff1a; 快速交付与降本增效 减少编码需求&#xff1a;通过可视化配置&#xff08;如变量替换、表达式函数&#xff09;替代传统编码…

    从彩色打印单行标准九九表学习〖代码情书〗的书写范式(Python/DeepSeek)

    写给python终端的情书&#xff0c;学习代码设计/书写秘笈。 笔记模板由python脚本于2025-04-17 12:49:08创建&#xff0c;本篇笔记适合有python编程基础的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简…

    QML与C++:基于ListView调用外部模型进行增删改查(附自定义组件)

    目录 引言相关阅读项目结构文件组织 核心技术实现1. 数据模型设计联系人项目类 (datamodel.h)数据模型类 (datamodel.h)数据模型实现 (datamodel.cpp) 2. 主程序入口点 (main.cpp)3. 主界面设计 (Main.qml)4. 联系人对话框 (ContactDialog.qml)5. 自定义组件CustomTextField.qm…

    postman莫名奇妙报错,可能是注释引起的。postman 过滤请求体中的注释。

    postman莫名奇妙报错&#xff0c;可能是注释引起的。postman 过滤请求体中的注释。 1、问题描述2、问题分析3、解决方法 1、问题描述 postman http请求测试时&#xff0c;如果在请求体中添加了注释&#xff0c;那么这个注释会被带到服务端执行&#xff0c;导致服务端接口返回报…