跳过正文
  1. AI 相关内容/

MCP 协议详解

·360 字·2 分钟
目录

前言
#

MCP 基于大模型,相当于 HTTP 基于互联网。

MCP 是目前大火的概念。不少人认为,MCP 基于大模型,相当于 HTTP 基于互联网。

对此我比较认同。当我看到 MCP 时,第一感受是:做应用开发的程序员终于有活干了。

大模型终究是巨头们竞争的舞台,就像操作系统一样,硝烟平息之后,可能只剩下那么几家。

整个产业的繁荣,还是得依靠大量的应用开发者,就像 iOS 和 Android 平台上的千万开发者推动互联网的浪潮一样。

当然,在 AI 编程工具的竞争下,程序员的需求量势必是会下降的,这个就是后话了。

现在我们要做的就是,学好 AI 技术,用好 AI 编程工具,学好 MCP.

MCP 是什么
#

MCP (Model Context Protocol,模型上下文协议) 是由 Anthropic 在 2024 年底推出的一种开放协议,它通过提供一种标准化的接口,旨在通过标准化的接口实现大语言模型 (LLM) 与外部数据源及工具的无缝集成。

最初推出时,仅有 Claude 的桌面应用支持,市场反响平平,且不乏质疑之声。但近期,随着诸多 AI 编辑器 (如 Cursor、Windsurf,以及 Cline 等插件) 纷纷加入对 MCP 的支持,其热度逐渐攀升,已然展现出成为事实标准的潜力。

Before / after MCP
#

为何 MCP 会诞生,它要解决什么问题?

理解 MCP,先要了解其为何诞生。

即 MCP 出现之前,我们面临什么问题,而 MCP 又如何解决这一问题。

  • Before MCP

    最初,大语言模型确实掌握了语言,但也仅限语言。

    问黄鹤楼的历史,它能 balabala 告诉我们一大堆。

    问能否帮忙在 blender 创建某种场景,它能告诉我们操作步骤,但也仅此而已。

    「只能说,不能做。」

    问我有没有新邮件,它只能说,抱歉,没有能力读取你的邮箱信息。

    「只能获取公开信息,获取不了私域信息。」

  • Function Calling

    要让大模型突破语言,扩展出更多能力。

    我们需要一些 function 来让大模型 call.

    2023 年 6 月,OpenAI 首次在 GPT-4 和 GPT-3.5-turbo 中集成了 Function Calling,让大模型具备了调用 function 的能力。这一举措意义重大,首次将大模型从「纯文本生成」升级为「可编程接口」。

    紧随其后,Anthropic(Claude)、Google(Gemini)、Meta(Llama)等厂商陆续推出类似功能。但由于没有形成统一的标准,大家的实现方式各异,在调用格式和调用逻辑上均有差别,导致生态碎片化。

    如上图所示,不同的大模型使用各自实现的 function call 去调用目标服务,未能形成统一生态。

  • After MCP

    MCP 其实就是标准化的 Function Calling.

    2024 年底,Anthropic 发布 MCP 协议,旨在统一碎片化的 Function Calling 生态。以目前市场、社区热度,以及主要大模型及应用厂商的集成情况来看,MCP 显然已经成为统一标准。

架构
#

MCP 长啥样?

下图是 MCP 官方提供的架构图,比较简单,总结下来就是:实现了 MCP Client 的 Host 应用,通过同一套 MCP 协议与不同的 MCP Server 对接,各 Server 提供了各自的不同能力。

我通过下图将其更加具象化地呈现。

我们的聊天应用实现了一个支持 MCP 协议的 Client,Gmail 服务和 Blender 应用则各自实现了 MCP Server. 就像是装上了标准插头,我们的聊天应用和 Gmail 及 Blender 对接了起来,通过 MCP 协议可以调用它们提供的能力。

MCP (以及 Function Calling) 在本质上其实和 RPC (Remote Procedure Call) 远程过程调用是相通的。

即一种专门面向大模型应用场景的 RPC.

一个小 Demo
#

为了更直观地理解 MCP,我们直接实现一个小而完整的 demo 来进行演示。

MCP 的架构简单,实现起来也不难。

官方已经提供了各种语言的 SDK 来帮助我们快速完成 Client 及 Server 的开发。

我们使用 Python 实现一个聊天工具,通过自然语言的交互,可以帮你:

  1. 获取本机工作空间中的文件列表
  2. 在本机工作空间中新建文件

代码量很小,包括:

  • server: 10+ 行
  • client: 20+ 行
  • chat: 100+ 行

其它信息:

  • LLM API 提供商:OpenRouter
  • LLM: Google Gemini2.0 pro

代码会贴在最后,不在此处展开。

实际上,应用本身很简单,关键的是理解协议的原理及流程。

原理及流程
#

我们举一个日常生活中办事的例子,来类比 MCP。

假设有一位用户去服务大厅办事,不过是简单地查询一些个人信息(调人才档案),但是却涉及到了跨部门协作(所查询的信息保存在文件管理处)。以往的话,服务大厅会开一个介绍信,告诉用户,凭介绍信去文件管理处,你的档案在那里。

但是现在,服务大厅和文件管理处都增设了外联部。服务大厅通过外联部与文件管理处取得通讯后,对方直接将用户的档案发送了过来。因而用户不用再多跑一趟腿,直接在服务大厅就办完了事情。

类比到 MCP,概念映射如下:

  • 用户:即用户
  • 服务大厅:用户所使用的 agent 软件,如 Claude Desktop、Windsurf、Cline
    • 咨询部:聊天窗口
    • 决策部:大模型
    • 外联部:MCP Client
  • 文件管理处:具备文件管理能力的软件
    • 外联部:MCP Server
    • 执行部:文件管理接口

用户来到 Agent 服务大厅,想知道自己的工作空间中有哪些文件。咨询部将此问题传达给了大模型,大模型经过思考后,认为应该找文件管理处。于是让外联部与文件管理处联系。由文件管理处的执行部门完成文件的查询工作。

文件管理处完成查询工作后,将结果通过外联部反馈回了服务大厅。决策部根据查询的结果,组织了清晰而友好的回复内容,最终由咨询部向用户进行回复。

以下是一个更为详细和严谨的时序图。

关键概念
#

以上我们一直是使用 tool 来举例分析。

还有一些其它的关键概念我们在此简单提一下。

Resources
#

Resource 用于 server 向 client 提供可获取的数据。可以包括文件内容、数据库记录、API 返回、系统数据、图片、日志文件,等等。

Tools
#

Tool 用于 server 向 client 提供可执行的操作。
它很像是 RPC 远程调用,让 client 具备了超出其运行环境的调用能力。

Prompts
#

Server 可以定义好一些 prompt 提示词,这些提示词可以给到 client,由 client 提供给用户及 LLM,从而能够帮助用户及 LLM 更好地完成任务。

Samplings
#

Sampling 允许 server 向 client 发送其希望 LLM 执行的操作。
Sampling 的请求和返回均由 client 来传递,client 可以对请求内容进行修改。

Roots
#

Roots 用于定义 server 聚焦的资源边界。client 可以通过它来告诉 server 应该聚焦于哪些资源。

Roots 以 URI (Uniform Resource Identifier) 的形式提供,包括 HTTP URL、文件路径等。

如:

file:///home/user/projects/myapp
<https://api.example.com/v1>

应用场景
#

实体 → 数字化 → agentic 化

MCP 的应用场景非常有潜力,想想互联网浪潮,一切都数字化了,而在将来,一切都要 agentic 化。这些都是 MCP 施展的地方。

在此不展开哪个具体场景。不妨看看目前市场上已有的 MCP Server,获取能够受到启发。

以下是两个 MCP Server 商城页面的截图,从 categories 中可以看到非常广泛的类别。

另外提一下,连支付宝都已经支持 MCP 了。以后 agent 就可以自己找我们收钱了,还挺赛博的。。。

参考资料
#