一、MCP简介
1.1 什么是MCP
MCP(Model Context Protocol,模型上下文协议)是一个开放协议,用于标准化应用程序如何向模型提供上下文。可以把MCP想象成AI应用程序的USB-C端口。就像USB-C提供了一种将设备连接到各种外设和配件的标准化方式一样,MCP提供了一种将AI模型连接到不同数据源和工具的标准化方式。
MCP皆在标准化大模型与各种数据源、工具之间的通信方式,简化开发者的集成工作,并通过协议层内置的加密与权限管理机制确保数据安全。掌握MCP,并帮助开发者深入理解插件AI和AI助手的工作原理,更高效地开发新型AI应用。
想象一下,我们有一个强大的AI助手,它能聊天、回答问题,甚至帮助我们写代码。然而当我们向它咨询指定位置的文件信息,或者让它获取最新的天气数据时,却发现它不能有效作答。原因很简单,它接触不到我们手头的数据或工具。MCP正是为了解决这一问题而出现的一种标准化的开放协议,其工作原理如图所示:
通俗地讲,MCP就是AI领域的通用接口。若将大模型视作计算机或智能手机,MCP则相当于标准化的USB接口,不同的大模型都能通过它无缝接入实时数据、外部数据源。通过MCP,开发者无须针对不同的大模型重复编写集成代码,只需遵循统一的标准即可实现兼容。所有支持MCP的大模型,都能直接访问通过该协议接入的数据源、功能或服务。
二、MCP的工作原理
2.1 核心架构
MCP采用的是经典的客户端-服务器架构,它由三部分组成,即主机(Host)、客户端(Client)、服务器(Server)。
-
主机:通常是AI应用,例如Claude Desktop、Cursor代码编辑器。Host负责接收用户的提问和指令,与大模型进行交互。当大模型需要调用外部工具或数据时,主机就会调用MCP客户端。
-
MCP客户端:MCP客户端好比“中间人”,通常内置在主机中,负责与MCP服务器建立连接、发送请求和接收响应。我们可以把MCP客户端想象成主机派出的“翻译官”,负责把AI指令翻译成MCP格式并发送给MCP服务器,再把MCP服务器回复的内容返回。
-
MCP服务器:MCP服务器是“工具库”或“数据源”,提供各种各样的功能,例如文件系统访问、Web浏览器控制、数据库查询等。MCP服务器负责执行实际的操作,例如,访问数据和调用工具,并将结果返回给MCP客户端。MCP服务器对外暴露自己有哪些资源、工具和提示模板可用,供MCP客户端查询和调用。可以说,MCP服务器就像一个个“工具箱”,里面装着各种各样的“工具”,可以被MCP客户端按需取用。
2.2 核心组件
- 资源
我们可以将资源理解为供大模型读取的各种数据。在MCP中,资源指的是由MCP服务器提供给MCP客户端的任意数据类型,它强调的是数据本身,而不是对数据的操作。
- 工具
MCP中的工具是由服务器开放的供大模型调用的一系列可执行函数或操作。从最简单的计算到复杂的系统操作,工具可以完成各种各样的任务。与资源不同,工具可能会改变外部系统的状态,或者与外界发生交互,所以其操作是动态的。
- 提示模板
最后一类核心组件是提示模板,即Prompts。这里的“提示”并不是日常对话里的简单提示,而是指预先设计好的、可以指导大模型完成某种任务的模板。提示模板提供了一种规范的方式,在我们向大模型提问或者指挥大模型做事的时候,保证提问的方式有效且一致。
2.3 两种常见的传输方式
-
标准输入/输出
标准输入/输出主要用于本地场景,当客户端与服务器运行在同一服务器上时,数据直接通过进行的stdin和stdout进行数据的传输。常见的应用场景包括:- 构建命令行工具;
- 与本地服务器或进程集成;
- 进程间的简单数据交换;
- 使用Shell脚本自动化执行任务;
-
流式传输
MCP用到的数据传输方式为HTTP结合SSE的传输方式。SSE指的是Server Sent Events,即MCP服务器向客户端推送消息的方式。SSE通信方式类似于Websocket,都需要客户端主动与服务器建立一个长连接,不同的是SSE客户端无法主动向服务器发送消息,而是被动等待服务推送消息给客户端,因其Accept头中声明对text/event-stream的支持,所以称其为流式传输,它只支持文本类型的数据传输,不支持二进制数据的传输。
2.4 安全机制
-
访问控制和权限管理。
MCP强调由MCP服务器掌控资源和工具,这本身就是一种天然的权限隔离。换句话说,大模型并不能想看什么就看什么、想做什么就做什么,它只能使用MCP服务器开放给它的资源和工具。而MCP服务器由谁部署?通常由数据和服务器的拥有者部署,而且将MCP服务器部署在受信任的环境中。所以,拥有数据或服务器的一方始终拥有决定权:可以选择提供哪些资源、启用哪些工具。 -
身份验证和安全通信。
MCP在连接远程服务时,强制要求使用安全认证机制(如OAuth2.1)来验证MCP客户端或MCP服务器的身份。 -
元数据和安全提示。
MCP工具可以带有元数据来描述其行为特性。例如,一个工具可被标记为“只读”或者“可能修改数据”。MCP客户端可以根据这些元数据,决定是否允许大模型直接调用,或者在调用前提示用户确认。 -
沙箱隔离机制。
很多MCP服务器均被部署于受控的沙箱环境中,以实现隔离运行。这可确保即便某些客户端经由MCP发出错误或潜在的恶意指令,其影响亦被限定在沙箱范围内,无法扩散至宿主系统。
参考文献: