AI 技术观点

Model Context Protocol MCP 是什么?一次搞懂它在解决什么问题

MCP 是一套通用接线标准,让 AI 应用程序能接上外部的数据与工具。这页用白话解释它的三个角色、它提供的三种东西,以及 2026 年这次改版把什么翻掉了。

依规格修订版 2026-07-28 撰写

01

一句话

MCP 让任何 AI 应用程序,用同一种方式接上任何数据来源。

全名 Model Context Protocol,中文常译作「模型上下文协议」。它由 Anthropic 在 2024 年提出,但从 2025 年 12 月起已经不属于 Anthropic——协议捐给了 Agentic AI Foundation(Linux Foundation 旗下,与 Block、OpenAI 共同创立),现在由社区治理。

02

为什么需要它

假设有 4 个 AI 应用程序,和 5 个你想接上的东西:Google Drive、GitHub、数据库、Slack、公司内部 API。

没有共通协议

4 × 5 = 20

每一组「应用程序 × 数据来源」都要各自写一次。多一个应用程序就多 5 组,多一个数据来源就多 4 组。

有了共通协议

4 + 5 = 9

每个应用程序实作一次「怎么当客户端」,每个数据来源实作一次「怎么当服务器」。

这叫 N×M 问题,而 MCP 的全部价值就在这一句:任何 MCP 客户端都能接上任何 MCP 服务器。USB 是同一个故事——在它之前,每一种周边都有自己的接头。

03

三个角色

MCP 里有三个角色。最多人搞混的是前两个——大家说「MCP client」的时候,心里想的通常是 Claude Desktop,但那是 host。

MCP 的三个角色 Host 内含三个 client,每个 client 各自连到一个 server。前两个 server 在本机,第三个在远程。数据库画在 server 外侧,表示 server 是数据前面的中介。 HOST AI 应用程序 Client 1 Client 2 Client 3 Server A Server B Server C stdio(子进程) Streamable HTTP 你的数据
client 在 host 里面,一个服务器配一个。箭头一律从 client 出发。
Host(宿主)
AI 应用程序本身。Claude Desktop、VS Code、Claude Code 都是 host。它握有模型、握有对话、决定权限。host 就是那个「应用程序」。
Client(客户端)
host 里面的一个连接器,一个服务器配一个。它不是应用程序,是应用程序内部的零件。VS Code 同时接两个服务器,就有两个 client。
Server(服务器)
对外提供工具与数据的程序。可以跑在你自己的机器上,也可以在远程。它看不到你的对话,也看不到其他服务器——这是刻意的设计。

04

服务器提供什么

服务器提供三种东西。它们的差别不是「读 vs 写」——那是最常见的错误直觉。

真正的差别是谁决定要不要用它。下面三个情境,每一个的答案都不一样:

答案:Resource — 由应用程序决定

你把一份文档拖进对话,或是 host 判断「这个问题需要附上这个文件」——决定权在应用程序手上,不在模型手上。模型只是收到了那份内容。

常见例子:文件内容、git 历史、数据库 schema。

答案:Tool — 由模型决定

你说「帮我把这个 bug 开成一张票」,模型自己判断要调用哪个功能、带什么参数。决定权在模型手上。

关键:一个唯读的查询也可以是 tool,只要是模型自己决定要不要查。所以「读 = resource、写 = tool」是错的。

答案:Prompt — 由用户决定

你从菜单挑一个「代码审查」,或打一个斜线指令。决定权在你手上——模型不会自己跑去用它。

常见例子:斜线指令、模板菜单。

├─ 三个情境的差别只有一个:谁按下决定键。

05

它怎么传输

两种标准方式:stdio——服务器是一个子进程,透过标准输入输出沟通;与 Streamable HTTP——每则消息是一个 HTTP POST。这是「怎么传」的差别,不是「在哪里」的差别:一个跑在你自己机器上的服务器,一样可以讲 Streamable HTTP。

值得知道的是两者的安全性完全不同:stdio 直接继承你的用户权限、没有验证层;HTTP 那条需要 OAuth、需要验证来源。另外,「本机服务器」指的是「跑在你机器上」,跟它会不会连外网无关——本机服务器一样可以去打远程 API。

06

这一版变了什么

服务器现在什么都不记得。

2026-07-28 是 MCP 问世以来最大的一次改版,而且是破坏性的。以前客户端要先跟服务器「握手」建立连接,之后双方记得彼此。现在没有握手、没有连接阶段——每一个请求都自己带着版本与身分,服务器处理完就忘记。

方向也改了:服务器不会回头问你问题。它会回一个「我需要这个信息」然后结束这次请求,由客户端拿到答案后重新发一次。

你在别处看到这些,代表那份数据已经过期

  • ├─ initialize 握手
  • ├─ Mcp-Session-Id 标头、协议层的 session
  • ├─ 服务器主动送出一个请求给客户端
  • └─ ping、logging/setLevel 这两个方法

第三项要讲清楚,因为它最容易被误读成「服务器再也不能要东西了」。消失的是「主动送出请求」这个机制,不是服务器提出要求的能力。以前服务器可以直接推一个请求过来;现在它只能在回应里说「我需要这个」然后结束,剩下的由客户端接手。

所以那些「服务器向客户端要东西」的功能都还在,只是换了条路走——包括 Elicitation(跟用户要一项信息)与 Sampling(借用 host 的模型;方向与直觉相反,所以特别多人误解)。

另外一件事跟上面无关:Roots(告诉服务器你的工作目录范围)、Sampling 与 Logging 这三样被标记为淘汰。它们现在还能用,但别当成现行架构学。淘汰与上面那个机制改变是两回事:一个讲「怎么传」,一个讲「还要不要留着」。

07

本页对应哪一版

MCP 的版号就是日期。它标示的是「最后一次做出破坏性变更的日子」,不是发布周期。所以你手上任何一份 MCP 数据,看它对应哪个日期就知道新不新——这是这页最值得你带走的一件事。

2024-11-05 → 2025-03-26 → 2025-06-18 → 2025-11-25 → 2026-07-28

有时效的说法

  • 上一节「这一版变了什么」只对 2026-07-28 成立。
  • 三个被标记淘汰的功能,最早要到 2027-07-28 之后的某一版才会真的移除。
  • 协议不再需要连接阶段 ≠ 现实中的服务器都无状态了。大量已部署的服务器仍在讲旧版,这个落差会持续一段时间。