Claude Code 学习站

MCP 接入与作用域

考点 2.4 · MCP integration & scopes · 所属域权重 18% · 工具设计与 MCP 集成

本页目录5

这个考点是什么

这个考点考的是 MCP(Model Context Protocol)本身的架构骨架,以及它在 Claude 产品线里落地时的两条不同接入路径。

核心骨架是 host–client–server 三方模型:host(比如 Claude Code、Claude Desktop)为每个连接的 server 创建一个专属的 MCP client,每个 client 与其对应 server 之间是一条独立的专线连接。

协议本身分两层——data layer 用 JSON-RPC 2.0 处理生命周期协商、能力协商、通知,以及 tools/resources/prompts 这些核心 primitives;transport layer 只负责连接建立、消息封装和鉴权,常见的是本地 stdio 和远程 Streamable HTTP(可选 SSE 流式)。

再往上一层是"连接即发现"的能力面:client 连上 server 后通过 tools/listresources/listprompts/list 等动态发现该 server 都提供什么,不需要预先写死。

同时要分清方向——tools/resources/prompts 是 server 暴露给 client 的三个 primitive,而 sampling、elicitation、roots 是反方向的 client 能力,是 server 可以向 client 请求使用的。

落到 Claude 产品上,这个考点还覆盖两条不同的接入方式:

  • 一是 Claude Code/Desktop 这类 host 通过 local/project/user 三层 scope 管理 server 配置与凭据共享;

  • 二是 Messages API 的 MCP connector(mcp_servers 参数),它是绕开自建 client、直连远程 server 的另一套机制,能力边界和前者不同。

为什么考

出题角度集中在几组方向性细节上,干扰项常常只是把关系或归属反过来:是一个 client 多路复用多个 server,还是一个 server 单独专线接一个 client;sampling/elicitation 算不算 server primitive;primitives 归 data layer 还是 transport layer;Messages API 的 MCP connector 是否也能拿到 resources/prompts、能否直连本地 stdio server。

这类题目多为单选或多选,要求逐字对着官方定义核对,只要一个方向记反,整题就错,鉴别力集中在"谁对谁做什么"而不是记不记得术语本身。

核心辨析

  1. 1

    host 与 client 的基数关系

    一个 host 为每个连接的 server 创建一个专属 client,client 与 server 之间是一对一的专线连接,不存在"一个 client 同时多路复用管理多个 server"的说法;方向反过来倒是成立——同一个远程 Streamable HTTP server 可以被多个不同 client 甚至不同 host 各自连接,但每条连接依然彼此独立。

  2. 2

    server primitives(tools/resources/prompts)与 client 侧能力(sampling/elicitation/roots)方向相反:

    • tools 是可执行操作(model-controlled)、resources 是只读上下文数据(application-driven)、prompts 是可复用交互模板(user-controlled),这三者是 server 暴露给 client 的;

    • sampling(请求一次模型补全)和 elicitation(向用户要结构化输入)是 server 反过来向 client 请求的能力,把它们算进"server primitive"是最常见的选项陷阱。

  3. 3

    两层协议里 primitives 归 data layer 而非 transport layer

    data layer 跑 JSON-RPC 2.0,管生命周期/能力协商、tools/resources/prompts、通知;transport layer 只有 stdio(本地进程)和 Streamable HTTP(远程,可选 SSE)两种,只管连接建立、消息封装和鉴权,不涉及 primitives 本身的语义。

  4. 4

    Messages API 的 MCP connector(mcp_servers 参数)是与自建 MCP client 不同的接入方式,当前只透传 tool calls,resources/prompts 不经这条路径暴露;server 必须是公网可达的 HTTPS(Streamable HTTP 或 SSE),本地 stdio server 不能直连;调用需要显式 beta header(如 mcp-client-2025-11-20);且这条路径不在 ZDR(零数据留存)覆盖范围内——这些都是文档写明的限制,不是默认就有的能力。

  5. 5

    工具白名单的当前写法是 mcp_toolsetdefault_config.enabled = false 打底关闭,再在 configs 里对具体工具名逐个 enabled = true 打开;旧版按 server 整体设置 allowed_tools 的写法已 deprecated。

    另外 defer_loading 只控制该工具的描述何时发给模型(配合工具搜索式发现),不等同于禁用或启用这个工具。

反模式对照

常见做法

认为一个 MCP client 可以同时多路复用连接多个 server

正确做法

host 为每个 server 各创建一个专属 client,一个 client 只对应一条专线连接到一个 server

题目常把"一 client 多 server"和"一 server 多 client"两个方向互换作为干扰项,记反方向就全盘皆错。

常见做法

把 sampling、elicitation 当作 server 可以对外暴露的 primitive 去选

正确做法

server primitive 只有 tools/resources/prompts 三个;sampling/elicitation/roots 是 client 侧能力,方向相反

这是素材题目里出现频率最高的选项陷阱,考的就是"谁暴露给谁调用"这一层方向关系。

常见做法

认为 Messages API 的 mcp_servers connector 也能像自建 client 一样使用 resources/prompts,或者直接拿它接本地 stdio server

正确做法

该 connector 当前只支持 tool calls,且 server 必须是公网 HTTPS(Streamable HTTP/SSE)可达,本地 stdio 不能直连,还需带上对应 beta header

官方文档的 Limitations 部分明确列出这几条边界,题目经常反着问、诱导选"支持"来测是否记混两条接入路径的能力面。

常见做法

用旧版按 server 整体设置的 allowed_tools 字段做工具白名单

正确做法

在当前 beta 的 mcp_toolset 里用 default_config.enabled = false 打底,再对具体工具 enabled = true 逐个放行

前者是 mcp-client-2025-04-04 的 deprecated 写法,新版协议下应统一用 mcp_toolset 的 default/per-tool 配置结构。

练这个考点