简介

MCP(全称为Model Context Protocol,模型上下文协议)是一种面向大模型交互过程的通用上下文协议标准。其核心目标在于为模型构建一个结构化、可控、可扩展的语义执行环境,使语言模型能够在统一的上下文管理体系下进行任务调度、工具调用、资源协作与状态保持,从而突破传统Prompt Engineering在多轮交互、指令组合与行为稳定性方面的瓶颈。

在传统的大模型应用中,模型本身只能被动地接收输入、产生输出,要让它调用外部工具或访问自定义的上下文,就需要在代码里逐条写好 API 调用、认证、错误处理的逻辑,既繁琐又难以维护。MCP的初衷,就是将这些"上下文管理"和"工具调用"能力抽象成一个标准化的通信协议,让大模型应用只需关注"我想用什么资源",由专门的 MCP 服务端来真正执行调用、管理状态、返回结果。

MCP 官方GitHub

有一种说法是,传统的大模型应用叫做Prompt Engineering,而MCP出现后,大模型应用开发应该叫做Context Engineering。传统的提示工程常常依赖于简单的字符串拼接,这种方式有几个问题:

  • 歧义性:模型可能难以区分哪些是指令,哪些是用户输入,哪些是检索到的数据。
  • 提示注入风险:如果提示中包含恶意指令,例如ignore all previous instructions,模型可能被欺骗。
  • 脆弱性:格式的微小变化(比如多一个换行符)都可能导致模型性能下降。
  • 难以维护:当上下文变得更复杂时(例如,多个数据源、工具定义、历史消息),这种拼接方式会变得一团糟(亲身体验,塞了一堆历史消息后,模型的回答越拐越远)

核心概念

Tools(工具)

工具是AI模型可以调用以执行特定操作的函数。它们允许模型与外部系统交互,执行有副作用的操作,如:

  • 调用API获取实时数据
  • 查询或修改数据库
  • 执行代码或脚本
  • 发送邮件或消息
  • 文件操作

工具由模型控制,这意味着AI决定是否以及何时使用它们。工具调用可能会产生副作用,其结果可以反馈到对话中。

sequenceDiagram
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]简介与概念的更多相关文章

  1. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  2. BIRT使用1:简介、概念、元素、报表设计器组成

    前一篇博客对birt进行了一个初探,相信通过上篇博客大家对birt有个初步认识,接下来我们随着下面这张思维导图的展示,进入birt的使用学习. 这一篇博客是第一部分,主要介绍一下birt的简介.概念. ...

  3. Python 黑客 004 用Python构建一个SSH僵尸网络 01 简介

    用Python构建一个SSH僵尸网络 01 简介 一. 构建一个SSH僵尸网络的流程图: Created with Raphaël 2.1.0手动操作,实现通过SSH连接目标服务器(手动)用 Pexp ...

  4. 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点

    087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...

  5. Linux 时间同步 01 简介

    Linux 时间同步 01 简介 目录 Linux 时间同步 01 简介 时间同步 公共NTP服务器地址及IP 系统时间相关文件 时间同步 大数据产生与处理系统是各种计算设备集群的,计算设备将统一.同 ...

  6. ElasticSearch学习笔记-01 简介、安装、配置与核心概念

    一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...

  7. MongoDB学习笔记-01 简介、安装

    MongoDB简介 MongoDB是一种强大.灵活.可拓展的存储方式.是一个面向文档(相当于"行"的概念)的数据库. 可拓展:通过添加服务器而增加存储量. Windows下安装 版 ...

  8. Kvm --01 虚拟化基础概念

    目录 1. 虚拟化基础概念 01. 什么是虚拟化? 02. 为什么要用虚拟化? 03. 虚拟化在企业中的应用场景? 04. 虚拟化软件介绍 05. Kvm介绍 2. 安装部署Kvm 3. Kvm虚拟机 ...

  9. DRF简介/接口概念

    目录 一.drf框架简介 1. drf安装 2. drf的优势 二.接口 1. 接口的概念 2. 接口文档 3. 接口规范(restful) 3.1 url链接规范 3.2 请求方式规范 3.3 响应 ...

  10. Java多线程系列--“基础篇”01之 基本概念

    多线程是Java中不可避免的一个重要主体.从本章开始,我们将展开对多线程的学习.接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait( ...

随机推荐

  1. C# .NET ThreadPool 实现概述及

    微信公众平台 (qq.com) 在.NET中,ThreadPool(线程池)是一个用于管理和优化线程使用的强大工具.线程池允许开发者在需要时创建线程,执行任务,并在任务完成后回收线程,从而避免了线程的 ...

  2. C# WinForm 自定义控件绑定属性DataBindings

    https://www.cnblogs.com/jizhongfong/p/4384689.html var bind = new Binding("Enabled", Order ...

  3. 串口wifi模块、串口无线模块

    串口无线模块ZLSN7046T是上海卓岚推出的wifi转串口模块.它能够将wifi信号转化为串口信号,且支持多种功能,邮票孔封装,体积小巧可以外置天线或者内置天线.7046T支持一个UART TTL电 ...

  4. Excel中两表数据核对方法

    日常工作中经常会需要对比数据,查找差异.重复值等.本篇整理汇总各种Excel数据对比方法,让大家能在不同情况下都能快速完成数据的对比. 单列/多列.按位置对应比较数据 快捷键对比Ctrl+/ 如下图所 ...

  5. vscode删除空行和注释

    打开VScode,按Ctrl + H 打开替换框,切换正则模式 单行注释: //[\s\S]*?\n 多行注释:/\*(.|\r\n|\n)*?\*/ 所有注释:\/\*[\s\S]*\*\/|\/\ ...

  6. sql 查找最晚入职员工信息

    简介 order by 然后 limit select * from employees order by hire_date desc limit 1;

  7. ItemTouchHelper拖动结束取得目标索引位置

    重写 clearView 要想取得目标索引位置,需要找到拖动结束,松开鼠标后的调用方法 //拖动完成之后调用,所操作的viewHolder即为目标位置的项目 @Override public void ...

  8. 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 ...

  9. win10正式版如何设置备份系统的操作方法

    有不少深度技术的朋友都升级win10 21h1版本的系统了,但是安装好软件工具以后,问小编如何备份系统.其实,我们一般可以通过ghost来备份系统,如果嫌麻烦,我们可以使用win10系统自带的设置备份 ...

  10. 【机器人】—— 2. ROS 集成开发环境配置

    和大多数开发环境一样,理论上,在 ROS 中,只需要记事本就可以编写基本的 ROS 程序,但是工欲善其事必先利其器,为了提高开发效率,可以先安装集成开发工具和使用方便的工具:终端.IDE.... 1. ...