799 字
约 2 分钟
8
S21-B05 · MCP:模型上下文协议
适用读者:想让"任何工具"都能接给"任何模型"的人。
前置:S21-B03。
实测环境:本地构造 JSON-RPC 2.0 报文验证(2026-11-05)。
覆盖旧文:1952(408) 714(361) 716(339) + MCP 10 卡 = 2,277 点。
覆盖扩展:E-S21-006(stdio vs Streamable HTTP)。
上一篇:S21-B04 · Skills:工具的组合与复用
下一篇:S21-B06 · 记忆与状态。
1. 一句话结论
MCP 是"工具的 USB 接口":用 JSON-RPC 2.0 规定客户端与服务端怎么握手、怎么列工具、怎么调用。它不定义工具有哪些,只定义"怎么接"。
Host(IDE/Agent)
└─ MCP Client ──JSON-RPC──> MCP Server A(文件系统)
──JSON-RPC──> MCP Server B(数据库)
2. 三个核心方法(实测报文)
① 握手 initialize
→ {"jsonrpc":"2.0","id":1,"method":"initialize",
"params":{"protocolVersion":"2025-06-18","capabilities":{}}}
← {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18",
"capabilities":{"tools":{}},"serverInfo":{"name":"demo-server","version":"0.1"}}}
② 列工具 tools/list
← {"jsonrpc":"2.0","id":2,"result":{"tools":[{"name":"read_file",
"description":"读取指定路径的文本文件",
"inputSchema":{"type":"object","properties":{"path":{"type":"string"}},"required":["path"]}}]}}
③ 调工具 tools/call
→ {"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"read_file","arguments":{"path":"/etc/hostname"}}}
← {"jsonrpc":"2.0","id":3,"result":{"content":[{"type":"text","text":"..."}]}}
3. 错误处理:必须区分"参数错"与"方法不存在"(实测)
← {"jsonrpc":"2.0","id":4,"error":{"code":-32602,"message":"missing required argument: path"}}
← {"jsonrpc":"2.0","id":5,"error":{"code":-32601,"message":"method not found"}}
| 码 | 含义 | 对 Agent 的意义 |
|---|---|---|
-32602 |
参数无效 | 模型可自我修正(补参数重试) |
-32601 |
方法不存在 | 别重试(工具没注册) |
-32603 |
内部错误 | 可重试但要限次 |
"为什么要区分":如果所有错误都返回同一码,Agent 会无限重试同一个错误——这与 S21-B02 的"步数上限"是配套的。
4. 两种传输(E-S21-006)
| 传输 | 场景 | 特点 |
|---|---|---|
| stdio | 本地进程 | 简单、零网络配置 |
| Streamable HTTP | 远程/多客户端 | 可鉴权、可水平扩展 |
| 判据 | 选 |
|---|---|
| 工具在本机、单用户 | stdio |
| 工具在远端、多用户/多租户 | Streamable HTTP |
| 需要审计与限流 | HTTP(网关层,S17-B04) |
5. 安全边界
| 风险 | 防护 |
|---|---|
| 工具可执行任意命令 | 最小权限 + 沙箱(J01) |
| 提示词注入诱导越权调用 | 参数校验 + 审批(A02) |
| 服务端不可信 | 工具白名单 + 只读默认 |
6. 五个误区
| 误区 | 真相 |
|---|---|
| "MCP 定义了工具清单" | 只定义协议 |
| "MCP 只有 stdio" | 还有 Streamable HTTP |
| "错误码都一样就行" | 影响 Agent 是否重试 |
| "MCP 能替代 Skill" | Skill 是能力包,MCP 是传输 |
| "接上 MCP 就安全" | 需最小权限与沙箱 |
7. 自检
- MCP 的三个核心方法?
-32602与-32601对 Agent 的差别?- stdio 与 HTTP 传输怎么选?
- MCP 与 Skill 的关系?
- 接上 MCP 后还缺哪些安全措施?
8. 下一篇
S21-B06 · 记忆与状态
协议讲完,下一篇讲 Agent 怎么"记住事"。
本篇属于系列《S21 · Agent 工程与 MCP》。旧文来源:A-1952/714/716 + MCP 10 卡;扩展点 E-S21-006。报文为本机 JSON-RPC 构造验证(非真实 MCP 服务端)。
S21-B05 · MCP:模型上下文协议
https://www.clxhxhhr.top/posts/5483/ 评论
0 条
还没有评论,先写一条吧。