Skip to content

第 18 周 · Day 7:周复盘——把六天的 MCP 串成一条链 ​

手册任务:周复盘 + 整理。整理 MCP 工具接入清单与调用链笔记,写 300 字周记,当日产出:MCP 笔记 + 周记。 本篇解决的问题只有一个:这六天你分别学了协议、Server、Client、Resources、护栏、审批六块东西,怎么确认它们在脑中是一块,而不是六块。

今日目标 ​

  1. 凭记忆整理「接入一个新 MCP Server」九步清单,补漏后存档,作为下周的施工图
  2. 画 MCP 调用链全景图,每一环标注本周对应的 Day
  3. 按四段模板写一篇 300 字周记
  4. 过一遍 10 题自检清单,答不上来的标记出来,回读对应 Day 的教程

概念讲解:链状知识和树状知识,复盘方法不一样 ​

复盘的方法论第 1 周讲透了:识别不等于提取,输出倒逼输入。这套结论全程通用,忘了就回读第 1 周 Day 7。今天要补的是本周特有的一点:知识的形状变了,复盘的输出物得跟着变。

第 1 周的 monorepo 是树状知识,三个节点一条边,一张架构图收口。本周的 MCP 是链状知识。单看每一环都不难:协议是 JSON 消息,Server 是几个装饰器,护栏是一层校验,审批是一个暂停点。难的是它们按顺序咬合:用户一句话进来,要经过 Agent 决策、协议传输、护栏过滤、业务查询、脱敏回填,一环掉链子,整条链就断。

所以链状知识的检验标准不是"每一环能不能讲清楚",而是"相邻两环的接口能不能说清楚"。今天的三件输出物都是冲着连线去的:

输出物逼出什么附加价值
九步接入清单流程顺序是否内化,安全步骤是否漏下次接入的施工图
调用链全景图相邻环节的输入输出是否接得上排障时的对照图
周记 + 自检概念细节与规范变化的记忆下周安全自查的输入

清单有个额外身份:它不只为复盘服务。做完存档,以后每接一个新 Server,打印出来逐项打勾。清单是外置的记忆,专治"当时明明知道"。

方法不变,内容换了

画图、写作、自测三件套照旧,这是第 18 次走这套流程。变的是图从结构图换成链路图,自检题从类型系统换成协议与安全。

核心知识 ​

1. 「接入一个新 MCP Server」九步清单 ​

为什么用清单?因为九步里,漏掉前五步服务跑不起来,你会立刻发现;漏掉后四步服务照常跑,直到出事才发现。最危险的漏步永远是不报错的那种。

打印版,每步带完成标准:

text
□ 1. 装 SDK           完成标准:pip install fastmcp,一个包同时提供 Server 与 Client 能力
□ 2. 定义 tools/resources 完成标准:@mcp.tool() 暴露操作,@mcp.resource() 暴露只读数据源
□ 3. 写 docstring     完成标准:docstring 会成为给 LLM 看的工具描述,参数含义逐个写清
□ 4. 接 Inspector 调试  完成标准:npx @modelcontextprotocol/inspector 连上,手动调通每个工具
□ 5. 接 LangGraph     完成标准:MultiServerMCPClient 拉到工具列表,交给 create_react_agent,Agent 能选中调用
□ 6. 加输入校验       完成标准:类型注解 + Pydantic,构造非法参数能被拦下并返回可读错误
□ 7. 标高危          完成标准:写操作、删除、对外发送的工具在 metadata 打 high_risk 标
□ 8. 过审批链         完成标准:复用第 13 周的审批 UI,高危工具先弹审批,人确认后才执行
□ 9. 进评估集         完成标准:工具调用样例进第 16 周的评估集,回归时自动跑

九步的设计逻辑:1 到 4 步在 Server 侧自证可用,第 5 步接入 Agent,6 到 8 步是安全三件套,第 9 步接进第 16 周建好的评估闭环。走完第九步,这个工具才从"接完了"变成"被看住了"。

别让 6 到 9 步在赶工时被砍

后四步不写也"能跑",最容易被砍。但输入校验挡注入,高危标记挡误操作,审批挡越权,评估集挡回归。出的事,几乎都发生在这四步的缺口上。

2. MCP 调用链全景笔记 ​

这张图是今天的核心产出。照第 1 周的办法,先给文字版清单再动笔:

text
主链(从左到右的箭头链,10 个节点):
  用户提问
  → LangGraph Agent(Day 3:Agent 是 Client 的宿主)
  → ReAct 决策(Day 3:LLM 从工具列表里选工具、定参数)
  → 审批闸门(Day 6:高危工具暂停,等人点确认)
  → MCP Client(Day 3:把调用打包成协议消息)
  → 协议传输(Day 1:Streamable HTTP 上的 JSON-RPC)
  → MCP Server(Day 2:FastMCP 路由到具体函数)
  → 输入护栏(Day 5:Pydantic 校验参数合法性)
  → 业务库(Day 2:订单、文档等真实数据源)
  → 输出脱敏(Day 5:PII 在返回前清洗)
  → 回上下文(Day 3:结果作为 ToolMessage 回填,进入下一轮决策)

旁路(1 条,从协议节点分叉):
  Resources 只读通道(Day 4):知识库文档按 URI 读取,走数据通道,不算工具调用

标注(2 处,写在图旁):
  推拉分界:Resource 可订阅推送,Tool 调用永远是请求响应
  信任边界:Client 侧与 Server 侧之间是边界,校验压在入口,脱敏压在出口

Day 号直接写在节点下方,这是本周复盘的硬要求:每一环你都得能说出它是哪天学的,说不出的那环就是欠账。

画完自问三个接口问题:ReAct 决策吐出来的是什么(工具名加参数 JSON);协议层传的是什么(JSON-RPC 请求);护栏拦下的请求去哪了(返回错误信息给 Agent,让它改道,而不是整个崩掉)。三个都答得出,链就通了。

3. 300 字周记 ​

四段模板第 1 周讲过:最大收获、卡得最久、还含糊、下周前补。第 18 周示例,照这个密度写:

text
① 本周最大收获:MCP 把 N×M 的集成矩阵压成了 N+M。Agent 侧实现一次
Client,业务侧实现一次 Server,中间靠协议对接。我们不再为每个业务写
专属胶水,业务也不再关心是哪个 Agent 来调。
② 卡得最久:Client 的连接生命周期。工具列表是连接时拉取的,Server 加
了新工具我一直调不到,折腾半天才发现要重连刷新列表。
③ 还含糊:无状态新规范里 Header 路由和 Tasks 扩展只看了个大概;
Resource 的订阅推送也没实际跑过。
④ 下周前补:拿一个真实工具把九步清单完整走一遍,重点走 6 到 9 步,
安全三件套和评估闭环不能只在笔记里见过。

4. 第 18 周知识自检清单 ​

规则照旧:每题先口头回答,说完整了再点开答案对照。

问题 1:MCP 解决的 N×M 变 N+M,N 和 M 各指什么?(Day 1)

答案

N 个 Agent 应用(Host),M 个外部工具或数据源。没有 MCP 时,每对组合都要单独写一遍集成,共 N×M 份胶水代码。有了 MCP,每个 Host 实现一次 Client,每个业务方实现一次 Server,双方按协议对接,总共 N+M 份。协议把两边的耦合拆开了。

问题 2:MCP 三大原语是什么?各自给 LLM 提供什么?(Day 1)

答案

Tools:模型可调用的操作,可能有副作用,比如查订单、取消订单。Resources:可读取的数据源,只读,比如知识库文档、配置。Prompts:预置的提示模板,把固定用法封装成可复用的入口。粗略记:Tools 是做,Resources 是读,Prompts 是说。

问题 3:一个能力该暴露成 Tool 还是 Resource,判据是什么?(Day 4)

答案

看两点:有没有副作用,要不要模型决策。有副作用(写库、下单、发消息)或需要模型判断何时调用的,用 Tool。只读、幂等、单纯往上下文里供数据的(文档、配置、表结构),用 Resource。一个快判据:GET 语义给 Resource,写语义给 Tool。

问题 4:2026-07-28 版规范改成无状态协议,具体变了哪几点?(Day 1)

答案

四点:移除了 initialize 握手,连接不再需要初始化流程;引入 Header 路由,请求改由 HTTP 头携带路由与能力信息;新增 Tasks 扩展,用来承载长任务;Roots 和 Sampling 列入废弃计划。看旧教程时最大的坑是照抄 initialize 流程,新版已经不需要。

问题 5:用 FastMCP 起一个最小 Server 要几行?(Day 2)

答案

三行起步:mcp = FastMCP("orders") 实例化,@mcp.tool() 装饰一个普通函数,函数体写业务逻辑。再一行 mcp.run() 跑起来。注意参数类型注解和 docstring 不是装饰:docstring 会被当作工具描述发给 LLM,注解决定输入校验的形状。

问题 6:MCP Client 的连接生命周期有哪些坑?(Day 3)

答案

三个典型:一是工具列表在连接时拉取,Server 更新了工具不重连,Agent 看到的还是旧列表;二是 stdio 传输下忘记关闭连接,会留下僵尸 Server 进程;三是 streamable HTTP 下不用 async with 上下文管理 Client,会话过期后调用悄悄失败。另外按新规范连接没有 initialize 了,别照旧教程多写握手。

问题 7:Resource 的推和拉两种模式各是什么?怎么选?(Day 4)

答案

拉:Client 主动 read,按 URI 读当前内容。简单,但两次读取之间可能拿到旧数据。推:Client 订阅资源,内容变化时 Server 发更新通知,Client 再重读。数据新鲜但要多维护一条订阅。选择依据是变化频率:一次性参考文档用拉就够,高频变化的数据源用推。

问题 8:输出脱敏为什么在工具层(Server 侧)做,而不是只在 Agent 层做?(Day 5)

答案

两个理由。一是覆盖面:接这个 Server 的可能不止你一个 Agent,别的团队直连时 Agent 层的脱敏管不到,只有 Server 出口统一清洗才兜得住所有人。二是职责:哪些字段是 PII,最清楚的是拥有数据的一方,脱敏规则跟着数据走,而不是跟着某个调用方走。Agent 层可以再加一道,但不能只靠它。

问题 9:高危工具的标记方案怎么做?(Day 6)

答案

在工具定义处显式打标,比如 metadata 里写 high_risk: true,判定依据是写操作、删除、对外发送、花钱这类不可逆或影响外部的动作。运行时审批链读这个标记,命中就转入人工确认。关键是标记跟着工具定义走,集中在一处,不散落在各个 Agent 的代码里,否则改工具时标记必然被漏改。

问题 10:审批请求里为什么要带上 Server 名?(Day 6)

答案

因为工具名只在单个 Server 内唯一。不同团队都可能暴露叫 cancel_order 的工具,只给工具名,审批人不知道这次操作动的是哪套系统、哪个权限范围。带上 Server 名才能定位"谁家的哪个工具",审批人才有判断风险的信息,事后审计也才能追到责任方。

10 题全对也别飘

全对说明本周及格。九步清单、调用链图、周记三件产出做完,本周才算收口。

动手任务:完成本周复盘 ​

按顺序做完五步,预计 90 分钟。

第一步:凭记忆写九步清单(20 分钟)

合上教程,从装 SDK 写到进评估集,顺序不能乱。写完对照上文补漏,补上的那几步就是薄弱环。存成 week18-mcp-checklist.md,能打印就打印。

第二步:画调用链全景图(25 分钟)

打开 excalidraw.com,10 个主链节点加 1 条 Resources 旁路,Day 号写在节点下方,两处标注写在图旁。凭记忆画,卡住翻 Day 1 到 Day 6 确认,合上继续。导出 week18-mcp-callchain.png 存档。

第三步:写 300 字周记(15 分钟)

四段缺一不可。第三段"还含糊"别敷衍,它就是下周安全自查的靶子。

第四步:做自检 10 题(15 分钟)

逐题口头回答,答不上的记下题号和对应 Day,回读该 Day 教程的对应小节。涉及规范版本的题务必回读 Day 1,以 2026-07-28 版为准。

第五步:git 收口(15 分钟)

未提交的内容按类型分开提交,然后打标签:

bash
git add server/
git commit -m "feat(mcp): 订单工具接入护栏与审批"
git add docs/
git commit -m "docs: 第 18 周复盘,接入清单与调用链笔记"
git tag week18-done

原则不变:一个提交只做一件事。

常见踩坑 ​

清单抄完就归档。 清单的价值在接入时逐项打勾,不在存档这个动作。下次接 Server 时打印出来贴手边,走一步勾一步,跳步要有明确理由。

调用链只画快乐路径。 图上一路绿灯,没有审批拦停的分支,没有护栏拒绝的走向。真实系统里这两个"断点"才是安全所在,必须画上。

拿旧规范教程对答案。 网上大量 MCP 教程基于旧版规范,带 initialize 握手流程。对答案前先看教程的规范版本,本周按 2026-07-28 无状态版学习,别被旧流程带偏。

周记不写"还含糊"。 本周概念密度全项目最高,"全都懂了"概率极低。诚实列出,它是下周自查的工作清单。

下周预览 ​

下周主题:Agent 安全自查。本周的护栏和审批是围着新接入的 MCP 工具建的,下周要把同一套标准推广到整个工具面:存量工具补校验、补高危标记、补审批路径,做一次全面清点。九步清单的第 6 到 9 步,就是下周自查的工作定义。开始前,把周记第三段留的账清掉。

延伸阅读 ​

  • MCP 官方文档:协议规范以这里为准,注意当前版本是 2026-07-28 的无状态协议
  • FastMCP 文档:Server 实现主参考,docstring 与工具描述的关系讲得最清楚
  • 本周首页:周日程与规范版本提醒
  • 复盘方法论出处:第 1 周 Day 7,识别与提取的区别、四段周记模板都在那篇

第 18 周到此收口。