首页 > 编程笔记 > 通用技能 阅读:14

MCP模型上下文协议是什么(非常详细)

MCP(Model Context Protocol,模型上下文协议)是在生成式 AI 时代,随着 AI 智能体(AI Agent,简称为智能体)的兴起而诞生的一个全新的概念。

智能体系统的兴起让 AI 应用的集成环境愈加复杂。应用不再是简单的与大模型对话以获得响应的聊天机器人,而需要更加自主地协调任务、调取外部数据、使用外部工具,甚至与其他智能体协作来完成工作流程。这种与纷杂的外部资源之间交互的能力,构成了智能体落地的关键挑战之一。

我们来假设一个具体的场景。比如,你作为一名技术博客的主理人,可能曾经想拥有一个“AI秘书”。你希望它能够帮你定期采集行业的最新动态、GitHub 上最热门项目的排名及所关注的科技巨头的社交媒体新闻等,将其整理与编辑后发送到你的邮箱,并通过 OA(办公自动化)系统自动提醒你。

为了创建这样的 AI 秘书(很显然,这就是一个智能体),你可能需要与很多应用建立连接,实现集成。

例如,借助搜索引擎或浏览器自动获得必要的搜索结果、与社交媒体平台或专业社区的开放 API 平台集成、访问文件系统并使用文件编辑与排版工具、访问云端的邮件系统以发送电子邮件、通过企业 OA 系统的接口给你推送通知。

于是,你去研究各种各样的软件模块与第三方 API,并把它们与你的 AI 秘书连接起来。在这个过程中,你学会了如何调用搜索引擎的 API、如何使用 Playwright 自动浏览互联网、如何使用云服务商的邮件接口、如何使用 Python 的文档编辑库……在经历重重磨难与各种 Bug 的折磨以后,这个智能体终于上线了!

在使用一段时间以后,你发现了以下新的问题:
问题出在哪里?为了让 AI 秘书能够拥有足够的“动手能力”,每当 AI 秘书需要访问一个新的数据源、外部工具或服务时,开发者都需要为其“牵线搭桥”——编写定制的集成代码,处理消息格式,设计身份认证等安全策略,做大量的“黏合”工作(如下图所示)。


 
这种方式在实际部署中难以维持。接口标准各异、工具更新频繁、集成代码重复与冗长,导致系统脆弱、扩展性差、维护成本高。在这种背景下,一个统一、高效、标准化的集成架构成了智能体生态发展的迫切需求。

MCP是什么

Anthropic 公司在 2024 年年末提出的 MCP,就是一种用来简化智能体与外部资源集成的标准。

MCP 定义了一种统一的方式,让智能体能够访问、管理与共享所需的外部数据源与工具,从而改变固有的、逐个适配的碎片化集成方案。其核心思想就是在传统集成架构中引入一个中间层,如下图所示。


在这样的集成架构中,智能体通过统一的 MCP 连接一个可以共享的中间层(称为 MCP Server,即 MCP 服务端),以访问外部数据源与工具。这个中间层负责处理与不同的外部资源的适配和对接。

这样做的好处是什么呢?其实这是软件架构中的一种常见的设计范式,它的具体意义体现在以下几个方面。

1) 简化AI应用的开发与集成

在 MCP 的集成架构下,你无须让智能体来适配各种不同的私有协议,只需要了解如何用统一的方式连接到 MCP 服务端,并调用其公开的外部资源。这极大地简化了 AI 应用的开发与集成,缩短了 AI 应用的上线时间。

2) 有效提高系统间的互操作性

不同的智能体在使用了相同的 MCP 集成后,就具备了良好的互操作性。

比如,你的智能体可以在不同的提供商、不同的 MCP 服务端之间灵活切换,以使用最佳的外部工具或性能,而只需要极少量的集成工作。

3) 良好的可扩展性与应用弹性

由于大家遵循了相同的集成标准,说了同一种“语言”,因此你可以随时“插拔”新的外部资源。这就像只要外部设备遵循了 USB 的接口标准,就可以插在你的电脑上使用。因此,你插入新的 MCP 服务端,可以随时为智能体扩展新的能力(如下图所示)。


Anthropic 公司旗下的 AI 桌面工具 Claude Desktop 正是通过这种方式来支持客户自行扩充其“工具箱”,从而实现能力无缝延伸的。

4) 快速地适应变化,提高可维护性

在这样的集成架构中,你可以想象一下,如果一个外部资源的接口发生变化,那么你只需要访问它的 MCP 服务端对数据格式、通信协议、安全机制做相应的适配与修改,所有对接它的 AI 应用就都可以无缝切换与适应(当然,MCP 服务端对应用侧开放的使用接口保持不变)。

5) 一种新的AI能力共享生态

遵循了统一标准的集成架构可以极大地提高模块的可复用性与共享性。现在,通过不断开发与共享 MCP 服务端,新的 AI 应用可以快速地连接各种外部数据与工具。这减少了重复开发与资源冗余,形成了一种全新的 AI 应用生态环境,极大地提高了整体效率,有利于 AI 应用蓬勃发展。

生成式 AI 应用领域的另一个类似的案例是大模型 API 网关服务(比如,OpenRouter、开源的One-API等),通过把不同的大模型厂家的 API 接入协议统一成 OpenAI 的兼容协议,方便大模型应用的接入,极大地提高了应用的开发效率与灵活性。只是由于各个大模型厂家的开放 API 本身差异不大且数量有限,因此无法产生 MCP 的巨大效应。

基于MCP的集成架构

基于 MCP 的集成架构如下图所示:


基于 MCP 的集成架构是一种基于 Client/Server(客户端/服务端)模式的经典架构。最核心的组成部分有 3 个,分别为 MCP Server(MCP 服务端)、MCP Client(与 MCP 服务端通信的MCP客户端)、MCP Host(使用 MCP 客户端的应用,简称为宿主)。

先用一个简单的例子来初步介绍三者之间的关系:宿主好比一个需要打印文档的应用软件。它需要使用打印机(MCP 服务端)提供的服务,但需要借助打印机驱动程序(MCP 客户端)才能把文档转换成打印机能理解的格式。

1、MCP服务端

MCP 服务端是基于 MCP 的集成架构中的核心,是独立运行的。

MCP 服务端通过标准的协议公开特定的功能接口,帮助智能体连接与访问外部数据源与工具。这些功能可以是访问本机文件系统与软件模块、访问数据库、调用企业应用与互联网开放 API 等。

MCP 服务端类似于一个服务的“网关”,以一致与安全的方式为智能体提供连接外部世界的能力。它通过标准化的消息格式与传输协议来处理客户端的请求与响应,就像一个外部设备严格遵循 USB 标准,因此具备了极大的通用性与共享性。

关于 MCP 服务端,你首先需要知道以下内容。

1) MCP服务端在哪里运行

MCP 服务端有两种典型的部署模式,借助以下两种不同的通信协议与客户端实现交互:

2) MCP服务端公开哪些类型的服务

在目前的 MCP 规范中,MCP 服务端可以有选择性地公开以下几类常见的服务:

3) MCP服务端从哪里来

你可以使用 MCP 官方提供的 SDK(Software Development Kit,软件开发工具包)开发 MCP 服务端,将其提供给自己或在企业内共享使用。

当然,你可以从他人共享的大量 MCP 服务端中“挑选”,然后直接下载使用,也可以把自己开发的 MCP 服务端贡献给他人使用。

下图所示为一个优秀的 MCP 服务端共享社区:

4) MCP服务端是使用什么语言开发的

从理论上来说,你可以在理解 MCP 的基础上使用任何语言自行开发符合标准的 MCP 服务端。但实际上,你应该基于 MCP 官方提供的 SDK 来简化开发过程。

目前,已经开放的 SDK 有 Python、TypeScript、C#、Java 等几个语言版本。

5) MCP服务端如何启动

由于 MCP 服务端可以使用不同的语言开发,因此有不同的启动方式与命令(比如,使用 TypeScript 编写的 MCP 服务端可能使用 npx 命令启动,而使用 Python 编写的 MCP 服务端则可能使用 uvx 命令启动)。

在使用第三方的 MCP 服务端时,你需要阅读并参考其说明文档。此外,如果你选择本地模式运行 MCP 服务端,那么客户端会自动启动 MCP 服务端。

这种使用 MCP 服务端的方式的确带来了一定的混淆而且烦琐,相信在未来可能会有更加简洁的方式。

2、MCP客户端

这里的 MCP 客户端不是一个独立运行的程序,而是一个负责与 MCP 服务端连接与通信的模块,用来简化智能体对 MCP 服务端的访问,并确保其请求和响应过程遵循标准化的格式与协议。

在智能体运行时,我们可以把 MCP 客户端看作智能体创建并维护的一个会话连接,就像你使用 MySQL 数据库的客户端组件发起 SQL 请求一样。借助 MCP 客户端,你可以发起一个请求给 MCP 服务端并取得响应。

在 MCP 中,定义了少量 MCP 客户端提供给 MCP 服务端使用的功能。

3、宿主

宿主是需要访问外部资源的智能体或任何形式的 AI 应用,也可以被看作一种特殊的“用户”:它需要访问外部数据源与工具来完成任务。

宿主借助 MCP 客户端,通过标准的协议与 MCP 服务端实现交互,调用其公开的功能接口访问外部数据源与工具,完成智能体任务。

总结

MCP 定义了一种标准化的 AI 应用集成架构,即规定了 MCP 客户端、MCP服务端及外部资源等如何组合与连接,以实现高效、可扩展、安全的集成。简单总结如下:

相关文章