本课重点
本课要掌握六个知识点,落到两个交付上:一个能暴露工具的服务器,以及宿主里把它接进对话的那段编排。下面依次列出知识点、交付内容与验收口径。
1本课要掌握的六个知识点
六个知识点,前三个讲「工具怎么接上来」,后三个讲「接上来以后要补什么」。
- 协议分层。MCP 分能力、传输、报文三层:换掉其中一层,另外两层不必改动。这也是它把集成复杂度从乘积降为求和的原因。
- 工具声明。一个工具由名称、说明、输入结构三项描述,三项都来自发现结果。说明决定模型会不会选它,结构决定参数能不能被校验。
- 候选集与最小权限。一次请求只带必要的工具:先按用途划定上限,再让模型在上限之内自主决定。
- 调用循环。决策归模型、执行归宿主;结果作为工具消息回传后可再来一轮;必须有轮次与累计次数上限,超限后优雅降级而非报错。
- 信任边界。工具返回是数据不是指令,落在数据位;工具说明同样是攻击面。防线分软硬:位置与检查降低概率,授权与配额拦住动作。
- 可观测性。一次调用一条记录,要能回答五个问题;日志、指标、追踪三层各有分工,本课做到第一层。
2要交付什么
两端各一个:一个正确实现协议的服务器,一段实现编排的宿主代码。
| 交付物 | 需包含什么 | 完成后的可验证点 |
|---|---|---|
| 一个 MCP 工具服务 | 初始化握手、列出工具、执行工具三个方法;至少两个可调用的工具;对令牌做校验 | 带令牌能列出你写的工具名、能调用并返回文本;令牌错则被拒 |
| 宿主侧的登记与连接 | 登记服务器、在连接时完成握手与发现、把清单整体替换后标记为已连接 | 连上自建服务能看到它暴露的工具;失败时停在未连接并给出可读原因 |
| 宿主侧的调用编排 | 生成工具声明、解析模型提出的调用、按结构校验后执行、结果检查后回传、循环与上限 | 命中工具时回答明显用到了工具返回;两步任务能连续发起两轮 |
| 界面与记录 | 调用事件先于正文;每次调用留一条记录 | 回答开始前就能看到「用了哪个工具」;记录中三种结果各能看到一条 |
工具只给提示、不给最终答案,与第 5 课「解题引导」的口径一致。令牌只写在环境变量中,不写进代码、不进容器镜像。
3验收标准与验证方法
每条标准都配一个可当场完成的验证动作。
| 验收标准 | 验证方法 |
|---|---|
| 服务器可登记且令牌不回传 | 登记一台服务器:响应里只有「是否已配令牌」这个标记为真,没有令牌这一项 |
| 连接可发现工具 | 点「连接并发现」,能看到它暴露的工具清单;把地址或令牌改错,连接失败且提示可读 |
| 断开后不可再调用 | 断开后清单清空;用引用了它上面工具的技能提问,本次调用被记为「被拒」 |
| 引用在保存前校验 | 写入一个不在清单中的工具名,或指向未连接的服务器,保存被拒并给出可读的错误提示 |
| 模型提出的调用被正确执行 | 用适用条件里的词提问:调用事件里出现该引用与状态,回答明显用到了工具返回的提示;参数由模型填写、宿主按同一结构校验 |
| 循环有终止也有上限 | 需要两步工具的问题能连续发起两轮调用;把轮次上限调小后,超限即停止调用,改用已有信息作答 |
| 越权调用不静默成功 | 调用未连接服务器上的工具:记录里出现「被拒」;调用已被删除服务器上的工具:应答里该引用为「被拒」 |
| 调用可追溯 | 记录含工具引用、服务器名、状态、用户与时间;三种结果各能看到一条 |