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
  • ├─ 服务器主动送出一个请求给客户端
  • └─ pinglogging/setLevel 这两个方法

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

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

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

07 — 本页对应哪一版

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

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

有时效的说法

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