Agent 实现方法论
From Scratch
学习地图
练习
术语表
← 返回首页
本章教程
本章练习
第 21 章测验
第 21 章测验
对应章节:MCP 接入 v08
共 8 题,答对率 ≥ 80% 即通过。请完成全部题目后点击「提交」。
Q1
第 21 章给产品接 MCP 的核心动机是什么?
让 Agent 能更快地生成代码
每个外部系统都有自己的工具调用方式,注册表里全是「方言」、适配器不可复用;MCP 把「工具如何暴露、发现、调用」标准化,接新系统从写适配器变成 spawn 它的 server
因为模型不支持函数调用,需要协议来模拟
为了取代 ch08 的本地工具注册表
Q2
JSON-RPC 2.0 里,notification 与 request 的根本区别是什么?
notification 更快,但一个会话只能发一次
notification 没有 id,也不需要任何响应;request 有 id 且期望带同一 id 的响应
notification 只能由服务端发送
notification 的响应是一个空的 result
Q3
MCP stdio transport 的消息帧格式是什么?
每行一个 JSON,换行分隔(NDJSON)
Content-Length: <UTF-8 字节数> 头 + 空行 + JSON 体——按字节计数,帧内 JSON 可以含换行、中文等任意字符
先发 4 字节整数长度头,再发 JSON
[object Object]
Q4
为什么响应与请求靠 id 配对,而不是「先发先回」的顺序假设?
因为 JSON-RPC 禁止按顺序应答
请求可以并发发出,响应乱序到达——只有 id 能把响应与在途请求重新配对;每个 JSON-RPC client 都维护一张按 id 索引的 pending 表
因为 id 是数字,排序更快
因为 notification 没有 id,无法按顺序配对
Q5
MCP 客户端生命周期里,notifications/initialized 通知的作用是什么?
告诉 server 客户端要关闭连接
告诉 server 握手完成、可以开始使用工具——它必须在任何 tools/list 和 tools/call 之前发出;它是 notification,没有 id,server 不回复
请求 server 重新执行一次初始化
询问 server 支持哪些协议版本
Q6
MCP 的错误分层——调用不存在的工具 vs 工具存在但运行失败,分别怎么处理?
两种情况都回 JSON-RPC error,code 都是 -32602
[object Object]
[object Object]
两种情况都静默丢弃,不通知客户端
Q7
registerMcpTools 把远程工具并入本地注册表,executor 的本质是什么?
把远程 server 的实现代码复制进注册表
一个转发器:args → client.callTool(name, args) → mcpResultToText 把内容块拍平成字符串;可选命名空间前缀(如 mcp__)防重名,risk 选项让远程工具继承 ch18 的风险分级
只把工具的 schema 注册进去,不提供执行
在本地用不同的名字重新实现一遍远程工具
Q8
下面哪个是 stdio transport 最常见的翻车点?
server 往 stdout 打日志或调试信息,帧解析器把它当成半截帧,后续所有消息全部错位
JSON-RPC 的 jsonrpc 版本号写错
initialize 的 params 里漏了一个字段
工具表太大导致 tools/list 超时
提交