MCP · Model Context Protocol · 概念深潜

把 MCP 拆成一条有状态、双向的能力协商会话

基于 MCP 规范 2025-11-25(截至 2026-06 的最新稳定版)· 深潜(约半天)· 概念为主,代码为示意(未本地验证)。这份教程不教你把某个 server 的 quickstart 抄一遍,而是给你一张结构图——能在集成行为异常、面试被追问机制、技术选型纠结这三个场景里精确定位问题。

A适合谁

这份教程面向已经会用大模型工具调用、想把 MCP 从"会配一个 server"升级到"懂协议机制"的工程师。需要你具备三项基础:

  • 用过 LLM 的 function calling / tool calling:知道模型怎么输出一个 tool_call、什么是 tool schema、模型本身并不执行工具。没有这个基础,先读同系列的 工具调用教程。
  • 读过或写过一个 agent 循环:调用工具 → 拿到结果 → 再决策。MCP 的价值要放在 agent 语境里才看得清。可参考同系列 agent 规划教程。
  • 能读 Python / TypeScript 伪代码。教程里的代码和 JSON-RPC 报文是讲机制的示意,不要求本地跑通——重点在"这条消息在协商什么",不在 SDK 版本。

B不适合谁

  • 没接触过 function calling:MCP 坐在工具调用之上,这里不会重讲模型如何决定调哪个工具。先看 工具调用教程,再回来。
  • 只想要一段能跑的 server 代码:去看 官方 quickstart 或 FastMCP。这份教程讲的是 quickstart 背后"协议在做什么、什么时候会崩"。
  • 想深入大模型训练 / 推理内部:MCP 是模型外部的集成协议,与权重、注意力无关。那是另一个主题。

C读完之后你能做到什么

核心收获,一句话:MCP 的三大 primitive 不是按"数据还是动作"划分的,而是按"调用决定权归谁"(模型 / 应用 / 用户) 划分的;它名义上的招牌能力——server 反向借用 host 的 LLM 做 sampling——恰恰部署最少、且被无状态传输架构所限;而每天真正咬人的不是协议本身,是"工具描述即一段可执行的不可信 prompt"这一信任模型反转。看懂这三点,你看 MCP 的眼光就和只读过 quickstart 的人不一样了。

具体到可验证的能力:

  • 画出 host / client / server 拓扑,并说清为什么 client 不是 AI 应用、为什么每个 client 与 server 严格 1:1。
  • 判断一个新能力该做成 tool、resource 还是 prompt——依据是"谁来决定它被调用"。
  • 讲清 initialize 握手协商了什么、运行时用了未协商的能力会怎样。
  • 解释 server 如何反向请求 host 的 LLM(sampling)、请求用户输入(elicitation),以及为什么这让 MCP 区别于无状态的 function calling。
  • 选型:给一个场景,判断该用 MCP / 原生 function calling / OpenAPI Actions / A2A,并说出做这个决定的那条轴。
  • 识别 tool poisoning、line jumping、confused deputy、token passthrough 等 MCP 特有威胁,并说出协议强制了哪些防线。

一句话本质

MCP 不是"给模型一份标准工具清单",而是 host 与 server 之间一条有状态、双向的能力协商会话:能力在 initialize 握手时协商,运行时控制流可双向流动——client→server 调 tools,server→client 反请求 sampling / elicitation;三大 primitive 的划分依据是"调用决定权归谁"——tools 归模型、resources 归应用、prompts 归用户。

这句话里藏着三根贯穿全教程的支柱:①控制权分层(primitive 不按数据/动作分,按"谁发起"分);②能力协商会话(握手先对齐双方支持什么,之后才有交互——这是全教程的机制主线);③双向控制流(server 能反过来驱动 client,这既是 MCP 的招牌,也是它大部分安全问题的根源)。

D现状速览(截至 2026-06)

什么稳了 · 什么在变 · 什么过时了

已稳定(放心学):client-host-server 架构、三大 server primitive(tools / resources / prompts)、client 的 sampling 与 roots、stdio 传输、initialize 能力协商——这套核心自 2024-11-05 首版至今未动。

仍在快速演进(学时带上日期):传输层 Streamable HTTP(2025-03-26 起,取代旧的 HTTP+SSE 双端点);授权框架 OAuth 2.1 + 把 server 定义为受保护资源(RFC 9728 / 8707,2025-06-18);elicitation(server 反向问用户,2025-06-18,并在 2025-11-25 加了 URL 模式走 OAuth);结构化工具输出 / output schema(2025-06-18);MCP Registry(预览 2025-09-08);实验性 tasks 异步任务、sampling 带工具调用、Client ID Metadata Documents 取代 DCR(均 2025-11-25)。当前最新稳定版是 2025-11-25。

已被取代(别学旧法):旧的 HTTP+SSE 双端点传输(2025-03-26 弃用);JSON-RPC 批处理只在 2025-03→2025-06 间短暂存在、已移除,别学;动态客户端注册 DCR 作为 OAuth 主路径已被取代。另:MCP 治理权 2025-12-09 已交给 Linux Foundation 旗下 Agentic AI Foundation——它不再是 Anthropic 独家的协议。

读之前 · 一个关于"读懂了"的警告

MCP 的每个概念单看都不难,名词也眼熟(client、server、tool)。连起来读会很顺。但"顺"是危险信号,不是学会的证据——MCP 的几个关键点恰恰违反直觉(client 不是 AI 应用、sampling 不是采样、工具描述是可执行指令)。三种自我感觉,对应三种假象,读到时请停下来:

· "我读得很顺":这是熟悉感,不是掌握。名词眼熟 ≠ 你能说出 client 为什么不是应用、sampling 的箭头朝哪个方向。

· "我做题很快":多半因为题目是你刚读那段的复述。真正的检验是 06 章那些"该用 tool 还是 resource""该用 MCP 还是原生 function calling"的判别题。

· "我没卡壳":多半思路一直贴着正文滑行,没真正调动结构。每章的"想一想"请先停十秒、自己答,再展开。

E概念地图

Host · 宿主应用 持有对话历史 · 管控授权 Client 每 server 一个 · 1:1 隔离 Client 能力 sampling / roots / elicitation Server 独立进程 · 暴露能力 JSON-RPC 2.0 · tools/call server→client 反请求 暴露 Tools 模型控制 Resources 应用控制 Prompts 用户控制 传输:stdio(本地)/ Streamable HTTP(远程) 会话:initialize 握手 → 协商能力 → operation → shutdown
图 0MCP 的核心拓扑:宿主应用(host)里每个 server 配一个 client,两者经 JSON-RPC 2.0 通信。注意三件事:① client 在 host 内部,不是独立的 AI 应用;② 黑色箭头(client 调 server 的 tools)是常识,红色箭头(server 反过来请求 client)才是 MCP 区别于普通工具 API 的地方;③ 三类 primitive 按"控制权归谁"分,而非按数据/动作分。全教程沿这张图逐块下探。

F学习路径建议

顶部那条面包屑(00 → 01 → 02 → 03 → 04 → 05 → 06)是默认顺序:概念 → 协议机制 → 双向会话 → 安全 → 设计与前沿 → 自测。按你的目的可以走支线:

  • 只建立心智模型读 01(架构与控制权)+ 02(协议机制),再用 06 的判别题检验。03、04 可略读。
  • 要做技术选型重点读 01 的"一句话本质" + 05(MCP vs function calling / OpenAPI / A2A)+ 06 的场景判别题。
  • 要动手写 server按顺序全读,04 安全章必读——MCP 的坑大半在信任边界上,不是在 API 用法上。
  • 准备面试全读;高频追问集中在 02(握手与协商机制)、03(双向 / sampling)、04(tool poisoning 等威胁)。

G目录

H学完之后

这份教程把"MCP 协议的内部结构"装进你的 schema 后,下一步可以往这几个方向接:

  • Agent 与工具调用(同系列教程):MCP 供给的 tool 最终仍由模型经 function calling 决定调用——把"MCP 是工具的传输与发现层"接到"模型如何选工具"上。
  • 多 agent 协作(同系列教程):MCP 管 agent↔工具,A2A 管 agent↔agent;05 章讲清两者分层后,这里补齐 agent 之间如何编排。
  • Agent 规划(同系列教程):把 MCP 工具放进一个会重试、会回退的规划循环里。
  • 动手写 server:拿官方 Python / TypeScript SDK 或 FastMCP,把 01–04 的机制落到一个真实 server——尤其把 04 章的安全防线写进去。