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

MCP专题| 突破LLM三大瓶颈!模型上下文协议(MCP)如何重塑AI交互体验?

最近引爆了整个AI圈的Model Context Protocol(MCP)到底是什么?你是否也和小编一样一头雾水,不是说好的LLM风潮呢,怎么现在变成通信协议啦?最近小编也是找到一篇神仙综述,带你一遍搞清什么是MCP的神奇之处!

文章来自:Ray P P. A Survey on Model Context Protocol: Architecture, State-of-the-art, Challenges and Future Directions[J]. Authorea Preprints, 2025.

图片

🚀通俗来讲,MCP只解决了一个重要的问题!当前,大语言模型(LLM)服务的爆发式增长正面临三大核心挑战

  • · 机械化的无状态接口——每次交互都是"重新开始",缺乏连贯性

  • · 拼凑式的安全管控——权限管理零散,难以满足企业级需求

  • · 上下文碎片化——多轮对话的关键信息难以有效沉淀和调用

模型上下文协议 (MCP) 旨在通过面向会话的 JSON-RPC 框架(Typescript MCP SDK或Python MCP SDK实现)来克服这些限制,该框架允许 LLM 在精细的、符合 OAuth 2.1 的访问控制下协商功能、调用外部工具并检索上下文资源

MCP的工作流程

MCP的工作流程

图中展示了 MCP 的完整架构工作流程,这是一个标准化框架,旨在无缝连接大语言模型(LLMs)与本地和远程环境中的上下文数据、工具以及用户界面。

系统的核心是 MCP 主机,这是一个受信任的本地进程,负责协调多个客户端实例的生命周期(MCP Host)。它管理诸如用户界面控制(UI)、设置配置(Setting)、隐私保护(Privacy)和信任策略(Trust)等关键事务。此外,它还监督安全协议,管理客户端权限,并协调客户端启动、关闭和资源清理等生命周期事件。

主机在上下文聚合中也起着关键作用,促进多个客户端与语言模型之间的连贯通信,同时执行严格的边界控制,确保任何服务器或客户端都不会超出其指定的访问范围

在这个架构中,MCP 客户端作为特定会话的独立执行者。每个客户端通过可流式传输的 HTTP + 服务器发送事件(SSE)(通常用于异步、事件驱动的通信)或基于标准输入输出(stdio)的 JSON - RPC 2.0(通常用于轻量级、同步消息传递)与相应的 MCP 服务器保持专用的点对点连接。这些客户端在初始化阶段会公布它们的功能,如文件系统访问(即根目录)和语言模型查询(即采样),并在与主机和服务器协商的严格契约下运行。

MCP架构的核心组件

1. MCP主机Host)

  1. 作为可信的本地进程,负责协调客户端生命周期
  2. 统一管理UI控制、隐私策略、信任协议等关键功能
  3. 严格管控权限,确保数据访问不越界

主机对所有大语言模型的交互保持控制,作为中介,在任何模型调用之前验证提示的有效性,聚合多源上下文,并执行用户同意操作。

每个客户端 - 服务器连接都是沙盒化的,防止跨域的数据泄露或未经授权的访问。组件之间的通信遵循严格的会话和协议规则,这些规则在初始化阶段通过 JSON - RPC 消息传递建立。

可流式传输的 HTTP 传输支持丰富的服务器发送交互和使用唯一会话标识符和事件游标进行会话恢复,而标准输入输出传输为边缘部署提供高效的本地执行。

此外,该协议支持诸如取消、进度报告、补全自动完成、日志记录和通过 OAuth 2.1 进行授权等高级功能,使其强大且适用于高信任环境和开放的多租户平台。

2. MCP客户端(Client)

  • 每个会话独立运行,支持两种通信模式:

  • HTTP + SSE(Server-Sent Events):适用于异步、事件驱动的交互
  • stdio + JSON-RPC 2.0:轻量级同步通信,适合本地部署
  • 在初始化时声明能力(如文件访问、模型查询),并在协商的权限范围内运行

3. MCP服务器(Server)

  • 模块化设计,支持无状态/有状态运行

  • 提供四大核心功能:

    • 提示(Prompts):动态引导模型行为
    • 资源(Resources):结构化/非结构化数据(如文档、代码)
    • 工具(Tools):本地函数或远程API调用
    • 实用程序(Utilities):日志、补全等支持服务

MCP 服务器是模块化的,既可以是无状态的,也可以是有状态的单元,通过定义明确的原语来展示特定功能,这些原语包括提示(指导模型行为的预定义输入模板)、资源(结构化或非结构化的上下文数据,如代码文件、日志或文档)、工具(例如可执行函数或远程 API)以及实用程序(如日志记录、补全和通知等支持服务)。

这些服务器可以在本地运行,直接与文件和传感器交互,也可以连接到云端点,如软件即服务(SaaS)平台、企业数据库和搜索 API。根据配置的不同,服务器可能支持动态资源发现、数据更改订阅和异步交互,在不暴露完整对话历史或不相关客户端数据的情况下,丰富大语言模型可用的上下文信息。

这种架构的关键优势之一是其混合的大语言模型调用层,它可以根据模型偏好提示、延迟要求、隐私敏感度或成本限制,智能地将采样请求通过大语言模型引擎或框架(例如,Ollama3、GPT4All4、Llama.cpp5、LM Studio6、vLLM7 )路由到本地模型,或者路由到远程大语言模型(例如,通过企业 API 或商业端点)。

模型选择是基于客户端定义的功能,使用包含速度、成本和智能优先级等属性的偏好结构,而不是硬编码的模型标识符,这确保了在异构环境中的适应性

关键技术优势

  • 智能模型路由:根据延迟、成本、隐私需求,动态选择本地(如Llama.cpp)或云端模型(如GPT-4)

  • 严格安全管控:OAuth 2.1授权 + 会话级沙盒隔离,防止数据泄露

  • 上下文富化:聚合多源数据,确保LLM始终在完整上下文中响应

通过解耦上下文提供者(即服务器)、会话管理器(即客户端)和编排逻辑(即主机),MCP 架构促进了模块化、可扩展性和安全性。其灵活的传输机制、严格的能力协商和可扩展的协议设计,使开发者和研究人员能够构建强大且保护隐私的人工智能增强系统。

这使得 MCP 成为构建下一代人工智能助手、自主代理、集成到集成开发环境(IDE)中的副驾驶以及跨越本地和分布式环境的交互式多模态系统的坚实基础,让人们能够自信且可控地进行开发。

应用场景

  • 智能助手:连贯的多轮对话,记忆用户偏好

  • 企业级AI:合规调用内部API,保障数据安全

  • 开发工具:集成IDE,关联代码历史与文档

来源:A Survey on Model Context Protocol: Architecture, State-of-the-art, Challenges and Future Directions

链接:https://www.techrxiv.org/users/913189/articles/1286748-a-survey-on-model-context-protocol-architecture-state-of-the-art-challenges-and-future-directions


内容来源:IF 实验室

相关文章:

MCP专题| 突破LLM三大瓶颈!模型上下文协议(MCP)如何重塑AI交互体验?

最近引爆了整个AI圈的Model Context Protocol(MCP)到底是什么?你是否也和小编一样一头雾水,不是说好的LLM风潮呢,怎么现在变成通信协议啦?最近小编也是找到一篇神仙综述,带你一遍搞清什么是MCP的…...

我的AD快捷键方案【留存】

留存我的快捷键方案文件,以便换电脑的时候能够快速导入快捷键。 我的快捷键文件: 通过网盘分享的文件:JB20250509.DXPPrf 链接: https://pan.baidu.com/s/1t6V0GjdGFPNSFydP5Z_tfg?pwde4xs 提取码: e4xs 复制这段内容后打开百度网盘手机Ap…...

uni-app,小程序自定义导航栏实现与最佳实践

文章目录 前言为什么需要自定义导航栏?基本实现方案1. 关闭原生导航栏2. 自定义导航栏组件结构3. 获取状态栏高度4. 样式设置 内容区域适配跨平台适配要点iOS与Android差异处理 常见导航栏效果实现1. 透明导航栏2. 滚动渐变导航栏3. 自定义返回逻辑 解决常见问题1. …...

解决osx-arm64平台上conda默认源没有提供 python=3.7 的官方编译版本的问题

CONDA_SUBDIRosx-64 conda create -n py37_env python3.7 是一个用于创建特定架构环境的命令,主要针对 macOS 系统。下面为你详细解析它的功能和作用: 命令功能解析 这个命令的主要功能是创建一个名为 py37_env 的 Conda 环境,并且指定该环…...

Edwards爱德华STP泵软件用于操作和监控涡轮分子泵

Edwards爱德华STP泵软件用于操作和监控涡轮分子泵...

vue内写websocket实时订阅

首先安装插件reconnecting-websocket 或者不安装也可以,这个插件只是在断连之后可以重新连接 引入插件 import ReconnectingWebSocket from reconnecting-websocket;。 js文件: export const WebSocketClass (url, params, successFn, errorFn, clo…...

QT6(35)4.8定时器QTimer 与QElapsedTimer:理论,例题的界面搭建,与功能的代码实现。

(112) (113)模仿随书老师给的源代码搭建的, LCD 显示的部分不一样 : (114)以下开始代码完善: 关联定时器的信号与槽函数 : (115)…...

在R语言中如何将列的名字改成别的

在 R 中,更改数据框(data frame)中列的名字可以通过多种方法实现。以下是几种常见的方法: 方法 1:使用 names() 函数 names() 函数可以获取或设置数据框的列名。 示例 假设我们有一个数据框 data: dat…...

北斗导航 | RTKLib中模糊度解算详解,公式,代码

模糊度解算 一、模糊度解算总体流程二、核心算法与公式推导1. **双差模糊度定义**2. **浮点解方程**三、LAMBDA算法实现细节1. **降相关变换(Z-transform)**2. **整数最小二乘搜索**3. **Ratio检验**四、部分模糊度固定(Partial Ambiguity Resolution, PAR)1. **子集选择策…...

02 mysql 管理(Windows版)

一、启动及关闭 MySQL 服务器 1.1 通过 “服务” 管理工具 winr打开运行,输入services.msc 找到MySQL80,这个是我们在安装mysql的时候给的服务的名称,具体见文章mysql 安装 右键选择启动或者停止。 1.2 通过命令提示符 1.2.1 关闭命令…...

不同渲染任务,用CPU还是GPU?

一、CPU与GPU渲染的核心差异与选型建议 CPU渲染的核心优势与适用场景 复杂场景处理能力:CPU凭借强大的多核性能(如AMD Threadripper 3990x的64核)和高内存容量(最高支持512GB),擅长处理影视级光线追踪、全…...

uv简单使用

通过uv创建项目和虚拟环境 初始化项目 uv init --package my-project 初始化一个名为 my-project 的新项目,并生成必要的文件结构。 创建虚拟环境 uv venv .venv 激活虚拟环境 # For Windows .venv\Scripts\activate# For macOS/Linux source .venv/bin/acti…...

LeetCode 54.螺旋矩阵遍历的两种方法详解与对比

文章目录 方法一:边界调整法(逐层收缩)实现思路代码实现复杂度分析 方法二:矩阵旋转法(逐层剥离)实现思路代码实现复杂度分析 方法对比总结 本文介绍两种Java实现螺旋矩阵遍历的算法,并对其时间…...

手撕红黑树的 左旋 与 右旋

一、为什么需要旋转? 在红黑树中,插入或删除节点可能会破坏其五条性质,比如高度不平衡或连续红节点。 为了恢复红黑性质,我们采用局部旋转来“调整树形结构”,保持平衡。 二、旋转本质是“局部变形” 左旋和右旋不会…...

RGB矩阵照明系统详解及WS2812配置指南

RGB矩阵照明系统详解及WS2812配置指南 一、RGB矩阵照明简介 RGB矩阵照明是一种强大的功能,允许使用外部驱动器驱动的RGB LED矩阵为键盘增添绚丽的灯光效果。该系统与RGBLIGHT功能无缝集成,因此您可以使用与RGBLIGHT相同的键码来控制它,操作…...

硅基计划 学习总结 拾贰

一、二级指针 难道指针也有分等级的吗,我们学过的指针要存放变量的地址的,那二级指针是干嘛的呢? 一级指针:int a 10; int *pa &a; 指针变量,它终究是个变量,也有自己的地址 那我们以后是不是可以通…...

RabbitMQ事务机制

在RabbitMQ中,生产者为了确保消息发送成功,一种是使用 confirm 确认机制,另一种就是使用事务机制,事务机制就是允许生产者在发送消息时,将多个消息操作作为一个原子单元进行处理,要么所有操作都成功执行&am…...

【C语言指针超详解(三)】--数组名的理解,一维数组传参的本质,冒泡排序,二级指针,指针数组

目录 一.数组名的理解 二.使用指针访问数组 三.一维数组传参的本质 四.冒泡排序 五.二级指针 六.指针数组 6.1--指针数组的定义 6.2--指针数组模拟二维数组 🔥个人主页:草莓熊Lotso的个人主页 🎬作者简介:C方向学习者 &…...

主机漏洞扫描:如何保障网络安全及扫描原理与类型介绍?

主机漏洞扫描是保障网络安全的关键办法,它能对主机展开全面检测,借助这种检测能及时找出潜在的安全风险,从而避免遭受黑客攻击。下面会为你具体介绍主机漏洞扫描的有关事项。 扫描原理 主机漏洞扫描要借助漏洞库,还要借助扫描器…...

QT聊天项目DAY10

1.封装redis操作类 头文件 #ifndef REDISMANAGE_H #define REDISMANAGE_H#include "Singletion.h" #include "GlobalHead.h"class RedisManage : public Singletion<RedisManage> {friend class Singletion<RedisManage>; public:~RedisMana…...

养生:开启健康生活的钥匙

养生&#xff0c;是对生活的精心呵护&#xff0c;是通往健康之路的秘诀。以下从饮食、运动、睡眠和心态四个方面&#xff0c;为你呈现科学养生之道。 饮食养生&#xff1a;营养均衡的智慧 合理的饮食是养生的基础。遵循 “食物多样&#xff0c;谷类为主” 的原则&#xff0c;…...

基于springboot的海洋环保知识分享系统的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…...

操作系统 第2章节 进程,线程和作业

一:多道程序设计 1-多道程设计的目的 for:提高吞吐量(作业道数/处理时间),我们可以从提高资源的利用率出发 2-单道程序设计缺点: 设备的利用率低,内存的利用率低,处理机的利用率低 比如CPU去访问内存,CPU空转.内存等待CPU访问也是没有任何操作的.要是有多个东西要去访问不冲…...

住宅IP的深度解析与合理运用

海外住宅代理IP作为全球化数字业务的核心工具&#xff0c;其配置与运用需兼顾技术适配性、业务需求与合规性。以下从类型选择、配置方法、应用场景、优化策略及风险控制五个维度进行解析&#xff1a; 一、类型选择&#xff1a;静态与动态住宅IP的核心差异 静态住宅IP 特性&…...

RT-Thread 深入系列 Part 2:RT-Thread 内核核心机制深度剖析

摘要&#xff1a; 本文从线程管理、调度器原理、中断处理与上下文切换、IPC 同步机制、内存管理五大核心模块出发&#xff0c;深入剖析 RT-Thread 内核实现细节&#xff0c;并辅以源码解读、流程图、时序图与性能数据。 目录 线程管理与调度器原理 1.1 线程控制块&#xff08;T…...

在线caj转换word

CAJ格式是中国知网特有的一种文献格式&#xff0c;在学术研究等领域广泛使用&#xff0c;但有时我们需要将其转换为Word格式&#xff0c;方便编辑、引用文献。本文分享如何轻松将CAJ转换为word的转换工具&#xff0c;提高阅读和办公效率。 如何将CAJ转换WORD? 1、使用CAJ转换…...

25:三大分类器原理

1.分类的逻辑&#xff1b; 2.统计学与数据分析。 ************************ Mlp 多层感知系统 GMM 高斯混合模型-极大似然估计法 SVM 支持向量机建立一个超平面作为决策曲面&#xff0c;使得正例和反例的隔离边界最大化 Knn 1.MLP整个模型就是这样子的&#xff0c;上面…...

数据库插入数据时自动生成创建时间和修改时间

工具 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.time.LocalDateTime; Component public class MetaObjectHandlerConfig implements…...

Go语言中 源文件开头的 // +build 注释的用法

// build注释主要用于实现条件编译。借助设置不同的构建标签&#xff08;build tags&#xff09;&#xff0c;我们能够指定在特定的操作系统、架构或者其他自定义条件下才编译某个文件 1、基本规则 格式要求&#xff1a; 这种注释必须出现在文件的开头部分。注释与包声明之间至…...

【从零开始学习微服务 | 第一篇】单体项目到微服务拆分实践

目录 引言 一、选择聚合结构进行拆分的优势 二、微服务模块创建步骤 &#xff08;一&#xff09;引入 pom 文件与修改 &#xff08;二&#xff09;创建 Spring Boot 启动类 &#xff08;三&#xff09;搭建基本包结构 三、配置文件的引入与调整 四、业务代码的引入与注意…...