[MCP][01]简介与概念
简介
MCP(全称为Model Context Protocol,模型上下文协议)是一种面向大模型交互过程的通用上下文协议标准。其核心目标在于为模型构建一个结构化、可控、可扩展的语义执行环境,使语言模型能够在统一的上下文管理体系下进行任务调度、工具调用、资源协作与状态保持,从而突破传统Prompt Engineering在多轮交互、指令组合与行为稳定性方面的瓶颈。
在传统的大模型应用中,模型本身只能被动地接收输入、产生输出,要让它调用外部工具或访问自定义的上下文,就需要在代码里逐条写好 API 调用、认证、错误处理的逻辑,既繁琐又难以维护。MCP的初衷,就是将这些"上下文管理"和"工具调用"能力抽象成一个标准化的通信协议,让大模型应用只需关注"我想用什么资源",由专门的 MCP 服务端来真正执行调用、管理状态、返回结果。
MCP 官方GitHub
有一种说法是,传统的大模型应用叫做Prompt Engineering,而MCP出现后,大模型应用开发应该叫做Context Engineering。传统的提示工程常常依赖于简单的字符串拼接,这种方式有几个问题:
- 歧义性:模型可能难以区分哪些是指令,哪些是用户输入,哪些是检索到的数据。
- 提示注入风险:如果提示中包含恶意指令,例如
ignore all previous instructions
,模型可能被欺骗。 - 脆弱性:格式的微小变化(比如多一个换行符)都可能导致模型性能下降。
- 难以维护:当上下文变得更复杂时(例如,多个数据源、工具定义、历史消息),这种拼接方式会变得一团糟(亲身体验,塞了一堆历史消息后,模型的回答越拐越远)
核心概念
Tools(工具)
工具是AI模型可以调用以执行特定操作的函数。它们允许模型与外部系统交互,执行有副作用的操作,如:
- 调用API获取实时数据
- 查询或修改数据库
- 执行代码或脚本
- 发送邮件或消息
- 文件操作
工具由模型控制,这意味着AI决定是否以及何时使用它们。工具调用可能会产生副作用,其结果可以反馈到对话中。
participant l as LLM
participant c as Client
participant s as Server
Note over c,s: Discovery
c ->> s: tools/list
s -->> c: List of tools
Note over l,c: Tool Selection
l ->> c: Select tool to use
Note over c,s: Invocation
c ->> s: tools/call
s -->> c: Tool result
c ->> l: Process result
Note over c,s: Updates
s -->> c: tools/list_changed
c ->> s: tools/list
s -->> c: Updated tools
Resources(资源)
资源是提供给模型的只读上下文单元(数据源)。它们可以是:
- 文件内容
- 数据库记录
- API响应
- 知识库内容
资源由应用程序控制,托管方或开发人员决定公开哪些数据以及如何公开。读取资源没有副作用,类似于仅获取数据的GET请求。资源提供可在需要时注入模型上下文的内容(例如,在问答场景中检索到的文档)。
Prompts(提示模板)
提示模板是可重复使用的提示模板或指令,可以根据需要调用。它们由用户控制或由开发人员预定义。提示可能包含常见任务或指导性工作流程的模板(例如,代码审查模板或问答格式)。
提示模板的关键特性包括:
- 参数化:支持动态参数输入
- 资源整合:可嵌入资源上下文供模型参考
- 多轮交互:支持构建多轮对话流程
- 统一发现:通过标准接口注册和调用
Sampling(采样)
采样是工具与LLM交互以生成文本的机制。通过采样,工具可以请求LLM生成文本内容,例如生成诗歌、文章或其他文本内容。采样允许工具利用LLM的能力来创建内容,而不仅限于执行预定义的操作。
Roots(根)
Root表示一次语义执行的起点,携带资源引用、执行目标、响应格式等信息,支持多并发执行流。它作为语义执行的基础输入结构,可以包含多个Prompt和工具,为模型提供完整的上下文环境。
Logging(日志记录)
日志记录是MCP中的一个重要功能,允许服务器和工具向客户端发送日志信息。通过日志记录,开发者可以跟踪工具执行过程、调试问题以及监控系统状态。MCP支持多种日志级别,包括调试(debug)、信息(info)、警告(warning)和错误(error)等。
Notifications(通知)
通知机制允许服务器向客户端发送实时更新信息,例如资源变更、工具列表更新等。通过通知,客户端可以及时了解服务器状态的变化,并相应地更新用户界面或执行其他操作。常见的通知类型包括资源更新通知、工具列表变更通知、提示列表变更通知等。
组件
MCP Server
Server 是一个独立的程序或服务,它通过 MCP 协议向 MCP 客户端暴露特定的功能、工具或数据资源。
角色职责:
- 提供工具/资源:MCP Server 是外部能力(如数据库、API、文件系统、计算服务等)的封装器或适配器。它将这些外部能力以标准化、可供大模型调用的形式暴露出来。
- 执行操作:当接收到 MCP Client 的请求时,MCP Server 负责执行底层操作(例如,查询数据库、调用第三方 API、执行代码等)。
- 返回结果:将执行结果返回给请求它的 MCP Client。
- 独立部署:MCP Server 可以运行在本地机器上,也可以部署在远程服务器上。
MCP Host
Host 是用户直接交互的应用程序或环境。它通常是AI应用程序的入口点,比如:
- 一个聊天机器人界面
- 一个IDE
- 一个自定义的AI代理应用程序
角色职责:
- 用户交互:接收用户的请求和输入,并向用户显示大模型生成的响应。
- 协调与编排:负责整个工作流的协调和编排。它决定何时调用大模型,何时需要外部工具或数据,以及如何将它们的结果整合起来。
- 管理客户端:Host 创建并管理一个或多个 MCP 客户端实例。
- 维护核心上下文:通常由 Host 来维护整个对话历史和应用程序的全局上下文,而不是将所有信息都暴露给单个服务器。
- 安全边界:强制执行客户端和服务器之间的安全边界和权限控制。
MCP Client
Client 是内置在 Host 应用程序中的一个组件,它作为 Host 和 MCP Server 之间的桥梁。一个Host内可以有多个Client。
角色职责:
- 协议转换:将 Host 的请求转换成MCP协议定义的标准格式,以便MCP Server能够理解。同时,它也将MCP Server的响应转换成Host可用的格式。
- 会话管理:与一个特定的MCP Server建立并维护一对一的连接和会话生命周期。
- 能力协商:在建立连接时,与MCP Server协商双方支持的能力和协议版本。
- 消息路由:负责在Host和其Server之间双向路由消息。
- 安全与认证:可以处理与MCP Server之间的认证和授权,确保只有授权的请求才能到达服务器。
References
[MCP][01]简介与概念的更多相关文章
- Node.js 教程 01 - 简介、安装及配置
系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...
- BIRT使用1:简介、概念、元素、报表设计器组成
前一篇博客对birt进行了一个初探,相信通过上篇博客大家对birt有个初步认识,接下来我们随着下面这张思维导图的展示,进入birt的使用学习. 这一篇博客是第一部分,主要介绍一下birt的简介.概念. ...
- Python 黑客 004 用Python构建一个SSH僵尸网络 01 简介
用Python构建一个SSH僵尸网络 01 简介 一. 构建一个SSH僵尸网络的流程图: Created with Raphaël 2.1.0手动操作,实现通过SSH连接目标服务器(手动)用 Pexp ...
- 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点
087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...
- Linux 时间同步 01 简介
Linux 时间同步 01 简介 目录 Linux 时间同步 01 简介 时间同步 公共NTP服务器地址及IP 系统时间相关文件 时间同步 大数据产生与处理系统是各种计算设备集群的,计算设备将统一.同 ...
- ElasticSearch学习笔记-01 简介、安装、配置与核心概念
一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...
- MongoDB学习笔记-01 简介、安装
MongoDB简介 MongoDB是一种强大.灵活.可拓展的存储方式.是一个面向文档(相当于"行"的概念)的数据库. 可拓展:通过添加服务器而增加存储量. Windows下安装 版 ...
- Kvm --01 虚拟化基础概念
目录 1. 虚拟化基础概念 01. 什么是虚拟化? 02. 为什么要用虚拟化? 03. 虚拟化在企业中的应用场景? 04. 虚拟化软件介绍 05. Kvm介绍 2. 安装部署Kvm 3. Kvm虚拟机 ...
- DRF简介/接口概念
目录 一.drf框架简介 1. drf安装 2. drf的优势 二.接口 1. 接口的概念 2. 接口文档 3. 接口规范(restful) 3.1 url链接规范 3.2 请求方式规范 3.3 响应 ...
- Java多线程系列--“基础篇”01之 基本概念
多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait( ...
随机推荐
- C# .NET ThreadPool 实现概述及
微信公众平台 (qq.com) 在.NET中,ThreadPool(线程池)是一个用于管理和优化线程使用的强大工具.线程池允许开发者在需要时创建线程,执行任务,并在任务完成后回收线程,从而避免了线程的 ...
- C# WinForm 自定义控件绑定属性DataBindings
https://www.cnblogs.com/jizhongfong/p/4384689.html var bind = new Binding("Enabled", Order ...
- 串口wifi模块、串口无线模块
串口无线模块ZLSN7046T是上海卓岚推出的wifi转串口模块.它能够将wifi信号转化为串口信号,且支持多种功能,邮票孔封装,体积小巧可以外置天线或者内置天线.7046T支持一个UART TTL电 ...
- Excel中两表数据核对方法
日常工作中经常会需要对比数据,查找差异.重复值等.本篇整理汇总各种Excel数据对比方法,让大家能在不同情况下都能快速完成数据的对比. 单列/多列.按位置对应比较数据 快捷键对比Ctrl+/ 如下图所 ...
- vscode删除空行和注释
打开VScode,按Ctrl + H 打开替换框,切换正则模式 单行注释: //[\s\S]*?\n 多行注释:/\*(.|\r\n|\n)*?\*/ 所有注释:\/\*[\s\S]*\*\/|\/\ ...
- sql 查找最晚入职员工信息
简介 order by 然后 limit select * from employees order by hire_date desc limit 1;
- ItemTouchHelper拖动结束取得目标索引位置
重写 clearView 要想取得目标索引位置,需要找到拖动结束,松开鼠标后的调用方法 //拖动完成之后调用,所操作的viewHolder即为目标位置的项目 @Override public void ...
- POLIR-Society-Organization-Psychology-Relationship关系-Values价值: Values in a Relationship + How to Talk About it
https://www.verywellmind.com/speaking-about-values-in-your-relationship-5191152 Theories > Social ...
- win10正式版如何设置备份系统的操作方法
有不少深度技术的朋友都升级win10 21h1版本的系统了,但是安装好软件工具以后,问小编如何备份系统.其实,我们一般可以通过ghost来备份系统,如果嫌麻烦,我们可以使用win10系统自带的设置备份 ...
- 【机器人】—— 2. ROS 集成开发环境配置
和大多数开发环境一样,理论上,在 ROS 中,只需要记事本就可以编写基本的 ROS 程序,但是工欲善其事必先利其器,为了提高开发效率,可以先安装集成开发工具和使用方便的工具:终端.IDE.... 1. ...