W2D4 学习手册 1.为什么2.三层模型3.握手4.Transport 5.版本6.原语7.发现8.Session 9.Annotation10.鉴权11.OAuth12.信任 达标①达标②自测速记

FDE W2D4 学习手册 · MCP 核心

W2 Day4 · B 级(必须掌握,面试高频)· 4h · 学完能讲透"MCP 的 Host/Client/Server 模型、初始化握手、三种原语与安全边界"

本日定位:W2 前三天铺垫了 Function Calling(Day1)、采样与结构化(Day2)、Agent 编排(Day3)。今天进入 MCP(Model Context Protocol)——它是"把工具/数据接给 LLM 的标准协议",也是 FDE 面试必考。重点在"协议模型 + 初始化握手 + 三种原语 + 安全边界"。
学完能回答:① MCP 的 Host/Client/Server 三层模型、初始化时怎么协商协议版本和能力;② MCP 和 Function Calling 的区别、Tool Annotation 为什么不能当鉴权;③ stdio 与 Streamable HTTP 两种 Transport 的适用场景。
使用方法:通读原理 → 重点看「工程含义」「面试话术」「易错点」→ 做自测清单 → 配合《W2D4 评测题.md》。选中不熟的词可标注(左下★重要 / 右下📌待查)。

一、为什么需要 MCP:从 Function Calling 的痛点说起

Function Calling 解决了"模型能调一个函数",但它是各家私有的、点对点的:每接一个数据源(保单库、OCR 服务、规则引擎)都要为每个模型写一套适配,N 个模型 × M 个工具 = N×M 集成。MCP 的价值是把"工具/数据提供方"和"模型/应用方"用统一协议解耦:工具按 MCP Server 标准实现一次,任何兼容 MCP 的 Client 都能用。

一句话定位:MCP = "LLM 世界的 USB-C 接口"。Server 暴露能力,Client 消费能力,Host 承载二者。候选人背景是 Java+大数据+医保,可以把 MCP 类比成"给保险系统接数据源做了一套标准 SPI/接口规范"。
工程含义很清楚:MCP 把"工具集成"从 N×M 降到 N+M。对医保场景,保单查询、OCR、特药规则校验各做一个 MCP Server,前端 Agent(Host)按标准协议发现并调用,无需为每个模型重写适配。
MCP 解决的是"工具/数据接入的标准化"问题——Function Calling 是"模型怎么调函数",MCP 是"工具怎么按统一协议被任何模型调用"。它是 LLM 生态的"USB-C":Server 实现一次,所有兼容 Client 通用。
① 别把 MCP 当成"比 Function Calling 更强的能力"——它管的是传输与发现的标准,能力本身还是 Tool/Resource/Prompt。② MCP 不是替代模型能力,而是给模型"插上标准化的外接设备"。③ 固定验证版本 2025-11-25,面试被问"最新版本"要能答出来,别随口说 latest。

二、Host / Client / Server 三层模型

2.1 角色定义

角色是谁职责医保场景例子
Host承载 LLM 交互的"宿主应用"管理会话、UI、把多个 Client 连到模型;负责用户授权与信任决策理赔审核 Agent 应用(如自研 Web 后台)
ClientHost 内每个 Server 连接对应的"连接器"与单个 Server 维护 1:1 连接、转发请求、处理协议理赔应用里"连接保单 MCP Server"的那个客户端实例
Server暴露能力的"服务端"实现 Tools/Resources/Prompts,响应 Client 请求保单查询 MCP Server、OCR MCP Server

2.2 关系

Host(1 个应用) ⇄ 多个 Client(每 Server 一个) ⇄ 多个 Server(每个能力一个)

关键约束:一个 Client 只连一个 Server(1:1);一个 Host 可有多个 Client;Server 不直接认识 Host,只跟 Client 通信。Host 是"总指挥",Client 是"翻译官+传声筒"。

Host 是跑模型的应用(如理赔 Agent),Client 是 Host 里连接某一个 Server 的 1:1 通道,Server 是暴露能力的服务。一个 Host 有多个 Client,每个 Client 只连一个 Server。记住"Host 管总、Client 管连、Server 管能力"。
① 别混淆 Host 和 Client:Host 是应用本身(含 UI、会话、权限),Client 是 Host 内部为某个 Server 开的连接对象,不是独立进程。② Server 不直接对 Host 负责,它只跟 Client 说话——所以"信任/授权"问题多在 Host 这一层决策。③ 面试常考"Client 为什么 1:1":因为连接、会话、能力协商都是按 Server 维度建立的,多路复用会破坏生命周期管理。

三、初始化握手:协议版本协商 + 能力发现

3.1 握手流程

Client 连上 Server 后,第一步必须做 initialize 请求,双方交换元数据,再发 initialized 通知完成握手:

Client → initialize{ protocolVersion, capabilities, clientInfo } → Server Server → result{ protocolVersion, capabilities, serverInfo } Client → notifications/initialized

3.2 版本协商规则

Client 在 initialize 里带上自己支持的最新版本;Server 回自己能支持的最高且 ≤ 客户端请求的版本(按规范取双方交集的最大值)。这是"协商"不是"客户端说了算"——若 Server 太旧不支持该版本,握手失败。

工程上握手失败要快速失败(fail-fast)并给出清晰日志:明确是版本不匹配、能力不支持还是传输层断开。医保生产环境会把支持的协议版本写进配置并做启动自检,避免线上才暴露不兼容。
初始化握手 = "先对暗号再干活"。Client 发 initialize(带自己支持的最高版本+能力),Server 回它能支持的最高版本+能力,最后 Client 回 initialized 通知。协议版本是"协商"出来的交集最大值,不是客户端单方面指定。
① 握手必须先于任何工具调用——没 initialize 就直接 callTool 是协议错误。② 版本协商不是"取 Client 的版本",是取双方都支持的最高版本;若 Server 版本过低会握手失败。③ 固定验证版本是 2025-11-25,面试要能答出具体版本号,体现你做过功课。

四、Transport:stdio(Local)与 Streamable HTTP(Remote)

4.1 两种标准 Transport

Transport形态适用进程/网络
stdio本地子进程,通过标准输入/输出传 JSON-RPCLocal(同机、同宿主进程内)无网络,走本地管道
Streamable HTTP基于 HTTP,服务端可 SSE 流式推送Remote(跨网络、独立部署的 Server)走网络,需考虑认证/TLS

4.2 关键差异

选 Transport 看部署:本地工具(保单库本地脚本、本地 OCR)用 stdio,省去网络与鉴权;跨团队/云上的能力(共享规则引擎、远程知识库)用 Streamable HTTP。医保场景里"本地病历解析"用 stdio,"中心化特药目录服务"用 HTTP。
Local 用 stdio(子进程+stdin/stdout,无端口,安全简单);Remote 用 Streamable HTTP(HTTP+可选 SSE 流,支持跨网络)。选型原则:能本地就本地(stdio),必须跨网络才上 HTTP 并补鉴权。
① 旧版有 SSE Transport,但固定验证版本 2025-11-25 推荐/规范的是 Streamable HTTP,面试别把两者混为一谈。② stdio 不等于"不安全"——它只是没网络面,但 Server 进程本身的权限(能读哪些文件)仍要管控。③ HTTP Transport 必须配合鉴权(见 s11),裸奔上生产是事故。

五、固定验证版本:Protocol Version 2025-11-25

当前固定验证(面试/实现以之为准)的协议版本为 2025-11-25。该版本规范涵盖:初始化与能力协商、stdio 与 Streamable HTTP Transport、Tools/Resources/Prompts 原语、Tool Annotation 字段、Session 生命周期与 Mcp-Session-Id 头。

权威资源(中文/官方,非 OpenAI):
实现/选型时把协议版本钉死在配置里(如 protocolVersion: "2025-11-25"),并对 Server 返回的版本做校验,避免 Server 悄悄升级导致行为漂移。代码里建议用 SDK 常量而非硬编码字符串。
固定验证版本是 2025-11-25,覆盖 Transport、原语、Tool Annotation、Session 全部内容。面试被问"你按哪个版本实现",要答具体版本号并知道它包含哪些能力,体现工程严谨。
① 别答"我用最新版"——面试官要的是你验证过的具体版本,2025-11-25 是当前固定验证版。② 不同版本的原语/字段可能不同(如 Tool Annotation 定义),实现时要对齐版本,别跨版本套用。

六、三种原语:Tools / Resources / Prompts

6.1 定义与区别

原语谁触发是什么是否带副作用医保例子
Tools模型决定调用可执行的函数(查、算、写)通常可写(有副作用)保单查询 Tool、OCR Tool、规则校验 Tool
Resources应用/用户注入上下文可被读取的数据/文档(类似文件、记录)只读保单 PDF 文档、特药目录表
Prompts用户选择模板预置的提示词模板(带参数)只读(生成提示)"理赔审核"提示词模板

6.2 关键区别

医保 Agent 里:Resources 提供"这份保单的原文"和"特药目录",Tools 让模型"去查这张保单的状态/做 OCR/跑规则",Prompts 提供"标准理赔审核话术模板"。三者分工明确——数据 vs 行动 vs 模板。
Tools = 模型控制的"动作"(可调、可有副作用);Resources = 应用控制的"只读数据/上下文"(如保单文档);Prompts = 用户选择的"提示词模板"。一句话:Tool 做、Resource 给、Prompt 套。
① 别把 Resource 当 Tool 用——Resource 是"读数据进上下文",Tool 是"执行动作",语义和权限不同。② 三者控制方不同(model/application/user),这决定了"谁能触发"和"要不要鉴权"。③ 面试常混淆 Tool 与 Resource,要能讲清"查询一个值"该做成 Tool 还是 Resource。

七、Tool Discovery(工具发现)

7.1 机制

握手完成后,Client 通过 tools/list 拉取 Server 暴露的全部工具(含 name、description、inputSchema);模型据此决定调用哪个,再用 tools/call 执行。

握手完成 → tools/list(拿到全部 Tool 的 schema+描述) → 模型选 Tool → tools/call{ name, arguments }

7.2 输入 Schema

每个 Tool 的 inputSchema 是 JSON Schema,描述参数名、类型、必填、枚举。模型按它填参。发现机制让"Server 加了新工具、Client 无需改代码"成为可能——这是 MCP 解耦的核心红利。

医保场景:保单 Server 上线"历史理赔查询"新 Tool,只要它实现符合 schema,前端 Agent 下次 tools/list 自动发现,无需改 Host 代码。生产上会对 tools/list 结果做缓存+版本号,避免每次请求都拉。
工具发现 = 握手后 Client 调 tools/list 拿到所有 Tool 的 schema 和描述,模型按需选、用 tools/call 调用。好处是 Server 加工具、Client 零改造——这是 MCP"解耦 N×M"的关键。
① 发现的是"schema 和描述",模型靠 description 判断该不该调——所以 Tool 的 description 写得好不好直接决定调用准确率。② tools/list 有成本,生产要缓存,别每次推理都拉全量。③ 别以为"模型总能选对 Tool",描述含糊/相似 Tool 多会选错,要做评测。

八、Session 生命周期

8.1 生命周期阶段

  1. 建立连接:stdio 拉起子进程 / HTTP 建立连接。
  2. 初始化握手:initialize + initialized(见 s3)。
  3. 能力使用:tools/list、resources/read、tools/call 等正常交互。
  4. 会话维护:HTTP 场景下用 Mcp-Session-Id 关联请求(同一会话的状态)。
  5. 终止:Client 断开 / Server 关闭,释放资源。

8.2 HTTP 会话标识

Streamable HTTP 下,Server 在初始化响应里返回 Mcp-Session-Id,后续请求都要带这个头,否则 Server 不认。这保证了"有状态"交互(同一会话的上下文、已加载的资源)连贯。

工程上会话要设超时与回收:长时间空闲的 MCP 会话要能安全关闭,医保生产环境会对会话数做上限与监控,防止 Server 被大量悬挂会话拖垮。
Session 生命周期:连接 → 握手 → 使用 →(HTTP 下用 Mcp-Session-Id 关联)→ 终止。HTTP 传输靠 Session-Id 保持有状态;生产要做超时回收与连接数监控。
① stdio 没有 Mcp-Session-Id 概念(进程级会话),别把 HTTP 的会话机制套到 stdio。② 会话不释放会泄漏资源,Server 要能处理 Client 异常断开(如子进程被杀)。③ 面试可能问"HTTP 怎么知道同一会话"——答 Mcp-Session-Id 头。

九、Tool Annotation(工具注解)

9.1 是什么

Tool Annotation 是 Tool 定义上的一组元信息提示字段,用来给 Client/模型/UI 提供"这个工具大概是什么性质"的提示,例如:

9.2 作用

Annotation 帮助UI 决定要不要弹确认框(如 destructive 工具先问用户)、帮助 Host 做展示与风险提示。注意规范明确:这些是提示(hints),不是强制约束。

医保场景:规则校验 Tool 标 readOnlyHint=true(只读、可放心调),而"提交理赔结论"Tool 标 destructiveHint=true(要弹确认)。Annotation 让前端按性质决定交互,提升安全 UX。
Tool Annotation 是工具上的"性质标签"(只读/破坏性/幂等/开放世界),作用是给 UI 和 Host 做提示——比如破坏性工具弹确认框。注意它只是 hint,不是强制约束。
① Annotation 是提示不是保证,Server 完全可以不遵守(比如标了 readOnly 实际去写了库)。② 字段是 hint 语义,名字带 Hint 后缀本身就说明"仅供参考"。③ 别把 Annotation 当成"工具分类的权威来源",真正的分类要看实现。

十、Tool Annotation 不可作为真实鉴权依据

这是面试高频坑:有人以为"看 Tool 的 readOnlyHint 就能决定要不要鉴权/放不放心调"。错。Annotation 是 Server 自报的提示,客户端不能信任它来做安全决策。

安全决策(能否调用 / 要不要鉴权 / 是否允许写)必须基于 真实权限系统,而非 Tool Annotation
医保生产:是否允许 Agent 调用"提交理赔"工具,由 Host 的权限配置(如当前用户角色、该保单状态)决定,绝不看 Tool 自己填的 hint。即便 Server 标成 readOnly,敏感写操作也要独立鉴权。
Tool Annotation 不能当鉴权依据——它是 Server 自报的提示,可被谎报或漏填。是否允许调用、要不要鉴权,必须靠 Host/Client 的权限策略 + Server 真实访问控制,Annotation 只配合作 UX 提示(弹确认框)。
① 这是核心易错点:把 hint 当安全边界 = 安全漏洞。② 面试若说"看 readOnlyHint 就知道这工具安全",直接判错。③ 权限决策要"默认拒绝 + 显式授权",不能"默认信 Annotation"。

十一、OAuth 在 HTTP Transport 中的适用边界

11.1 适用场景

当 MCP 走 Streamable HTTP(Remote Server)时,传输层是标准 HTTP,因此可以套用标准 Web 授权(如 OAuth 2.0 / OIDC)来保护端点:Client 持 token 访问 Server,Server 校验 scope。

11.2 边界与注意

MCP 授权规范(modelcontextprotocol.io 的 Authorization 章节)明确:Remote Server 应使用标准 Web 授权框架;授权是"谁来连 Server",细粒度"能否调某 Tool"仍由 Host/Server 策略决定。
医保跨网络场景:中心化"特药目录 MCP 服务"用 HTTP + OAuth,只有持有效 token 的理赔系统能连;但"能否查某客户保单"这种细粒度权限,仍由 Server 内部按用户身份判定,OAuth 只管"门禁"。
OAuth 适用于 Remote/HTTP 的 MCP Server,保护"谁能连端点"(门禁级)。它不替代细粒度业务授权(谁能调某 Tool/查某数据);Local/stdio 一般无需 OAuth。OAuth 是传输层授权,Tool 级授权另算。
① 别以为"上了 OAuth 就 Tool 级安全了"——OAuth 管端点准入,Tool 级权限是另一层。② 混淆"传输授权"与"业务授权"是常见错误。③ stdio 硬套 OAuth 是过度设计。

十二、MCP Server 来源信任

12.1 信任问题

MCP Server 能执行动作、读数据,所以"这个 Server 从哪来、可不可信"是核心安全议题。Host 在连接前必须评估 Server 来源:官方维护 vs 第三方社区 vs 自建。

12.2 工程做法

医保场景:连接一个第三方"医保政策爬虫 MCP Server"前,先在 Host 配置里加白名单 + 沙箱运行,限制它只能访问公开政策站点、不能碰内网保单库。不可信 Server 默认不连。
MCP Server 来源信任 = "这个 Server 能不能连"。做法:来源白名单、最小权限、首次确认、沙箱隔离、连接后能力审查。不可信 Server 默认拒绝,别让模型自动连陌生 Server。
① "模型发现一个新 Server 就自动连"是危险设计,必须由 Host 做信任决策。② 别只看 Server 名/描述就信——要验证来源与签名。③ 即使 Server 可信,它暴露的高危 Tool 也要二次审查。

十三、面试达标线①:Host/Client/Server 模型 + 初始化握手

考点必须能讲清
三层模型Host 管总(应用+权限)、Client 是 1:1 连接通道、Server 暴露能力;一个 Host 多 Client,一个 Client 一 Server
初始化握手initialize 交换版本+能力 → Server 回版本+能力 → initialized 通知;先握手后调用
版本协商取双方都支持的最高版本(固定验证 2025-11-25),非客户端单方面指定
能力发现握手后 tools/list 拉 schema,模型据此调用;加工具 Client 零改造
达标线①核心:能画出 Host⇄Client⇄Server 关系,讲清 initialize 握手三步(版本协商+能力发现),并能答出固定验证版本 2025-11-25。这是 MCP 的"地基",必须滚瓜烂熟。

十四、面试达标线②:MCP vs Function Calling + Annotation 为何不鉴权

14.1 MCP 与 Function Calling 的区别

维度Function CallingMCP
定位模型调函数的能力(单点)工具/数据接入的标准协议(生态)
集成每家模型私有,N×M 适配统一协议,Server 一次实现多 Client 通用
能力通常只有"函数调用"Tools + Resources + Prompts 三类原语
发现/传输由应用硬编码tools/list 动态发现 + 标准 Transport(stdio/HTTP)

14.2 Tool Annotation 不能当鉴权

Annotation = Server 自报的提示(hint) → 可被谎报/遗漏 → 不能用于安全边界决策

鉴权必须落在 Host/Client 权限策略 + Server 真实访问控制,Annotation 仅作 UX 提示(如弹确认框)。

达标线②核心:MCP 是"标准协议/生态"(解耦 N×M、三类原语、动态发现),Function Calling 是"模型调函数的能力"。Tool Annotation 只是 hint,恶意 Server 会谎报,所以安全决策绝不能看 Annotation,要靠真实权限系统。

十五、W2D4 自测清单

十六、高频面试题速记卡

Q:MCP 和 Function Calling 什么关系?
Function Calling 是"模型调函数的能力"(单点);MCP 是"工具/数据接入的标准协议"(生态),管传输、发现、三类原语,把 N×M 集成降到 N+M。
Q:Host、Client、Server 分别是什么?
Host=跑模型的应用(管权限/会话);Client=Host 内连某个 Server 的 1:1 通道;Server=暴露 Tools/Resources/Prompts 的服务。一个 Host 多 Client,一 Client 一 Server。
Q:初始化握手做什么?
Client 发 initialize(带支持的最高版本+能力),Server 回能支持的最高版本+能力,Client 再发 initialized 通知。先握手后调用。
Q:固定验证的协议版本是多少?
2025-11-25,覆盖 Transport、原语、Tool Annotation、Session。面试要报具体版本号。
Q:stdio 和 Streamable HTTP 怎么选?
Local 用 stdio(子进程+stdin/stdout,无端口);Remote 跨网络用 Streamable HTTP(HTTP+可选 SSE,需鉴权)。
Q:Tools、Resources、Prompts 区别?
Tool=模型控制的动作(可有副作用);Resource=应用控制的只读数据/上下文;Prompt=用户选的提示词模板。做/给/套。
Q:Tool Annotation 能当鉴权依据吗?
不能。它是 Server 自报的 hint,可被谎报/遗漏。鉴权必须靠 Host/Client 权限策略+Server 真实访问控制。
Q:OAuth 在 MCP 里管什么?
仅管 Remote/HTTP 的端点准入(门禁级)。Tool 级/数据级细粒度授权是另一层,stdio 一般无需 OAuth。
Q:MCP Server 来源不信任会怎样?
恶意/缺陷 Server 可执行危险动作或谎报能力。做法:白名单、最小权限、首次确认、沙箱、连接后能力审查。
Q:HTTP 下怎么保持同一会话?
靠 Mcp-Session-Id 头,Server 初始化时下发,后续请求都带,保证有状态交互连贯。
FDE W2D4 学习手册 · MCP 核心(面试级)· 配合《W2D4 评测题.md》自测
📌 待查★ 重要