2026-09-04-mcp协议入门(补充)

0 阅读5分钟

MCP 协议入门:AI 界的 USB-C 到底怎么工作(附一次工具调用的完整流程)

前言

昨天写 Function Calling 设计取舍时留了个钩子:MCP 是"AI 界的 USB-C"。这个类比很多文章都在讲,但多数止步于"统一了接口"。这篇把壳拆开讲透:MCP 协议里到底定义了哪几样东西,一次工具调用从配置到结果回传是怎么走完的。全部按我自己 Agent 平台的真实接法讲,文末附传输方式对比表和踩坑清单。

一、三十秒复习:M×N 变 M+N

没有统一协议之前,M 个 AI 应用接 N 个工具,要写 M×N 份胶水代码。MCP(Model Context Protocol,Anthropic 2024 年底开源的模型上下文协议)把 M×N 变成 M+N:工具方实现一次协议,所有应用能接;应用方会讲协议,所有工具能连。跟 USB-C 统一充电口一个道理。

设计思想层面(为什么全行业跟进)前面单独写过,本篇只讲协议本身。

二、协议里就三样东西:插上、认设备、用起来

把 MCP 想成一根 USB-C 线,它只定义了三件事:

1. 传输(怎么插上)。 两种典型方式:stdio(标准输入输出,工具作为本机子进程,你写一行它回一行)和 HTTP/SSE(工具是远程服务,走网络调用)。我做的平台两种都支持,外加 SSE 变体,配置页面选一下即可。

2. 发现(你都有啥)。 客户端连上后第一句话永远是 tools/list,服务端回清单:工具名、用途描述、参数 schema(参数说明书,规定要传什么、什么格式)。像 U 盘插上电脑先弹设备信息。

3. 调用(替我干这个活)。 tools/call,带参数发过去,服务端干完活回传结果(文本/图片/错误)。相当于读写 U 盘。

协议的全部工作就是把这三句话的报文格式定死。服务端实现这三件事就是合格的 MCP server,客户端会讲这三句话就能连全世界的 MCP server。

三、一次调用的完整旅程(五步)

第 1 步,配置期。 管理页面配置 MCP server:选传输方式、填地址或启动命令。全程表单,不写代码。

第 2 步,装配期。 Agent 构建时读绑定关系(这个 Agent 挂的技能绑了哪些 MCP 工具),客户端工厂统一真实建连。一个 server 一条连接,底下所有工具共用。

第 3 步,核对。 建连后拿服务端工具清单比对:配置里说有这个工具,清单里真有吗?名字对不上、server 被禁用、工具下架、连不上,任何一项不过,装配直接失败报错,绝不装一个一调就崩的空壳。宁可构建时报错,不带病上线。

第 4 步,注册运行。 核对通过的工具注册进 Agent 工具列表,模型看到的就是普通工具,无感远程。模型决定调用后,平台把请求转成 tools/call 发给 server,结果转统一格式回传。

第 5 步,兜底。 探针定期真实建连、清点工具数、量耗时,server 挂了标记出来不拖累主对话,恢复自动回来。

四、传输方式对比表

对比项stdioHTTP / SSE
工具形态本机子进程远程服务
连接载体标准输入输出网络
典型场景本地文件、本地脚本团队共享的在线服务
配置内容启动命令 + 参数URL 地址
排障难度看进程日志看网络与超时

五、三个真实踩过的坑

坑一:注册名和远端名不是一回事。 平台内部给工具起名带前缀和编号(方便管理与权限规则对齐),远端 server 上工具叫它自己的名字,两边必须分开管。中间垫一层薄代理做翻译,协议报文原样转发,协议栈不自己写。

坑二:连接不复用,一炸一大片。 早期每个工具连一条连接,工具一多连接数爆炸,还老撞 server 连接上限。改成按 server 复用一条,省资源又稳。

坑三:返回值可能是个大泥潭。 有的 server 一次返回几万字,模型上下文直接撑爆。超阈值就把全文存成"工件"(可点开看的附件),上下文里只放摘要加引用标记,要细节点开看全文。

六、为什么不自己写协议栈

MCP 客户端(报文编码、握手、重连)写起来枯燥还容易错,规范还在演进。我们直接用 AgentScope Java 底座(阿里 Spring AI Alibaba 生态)自带的 MCP 客户端件:官方实现,跟工具注册、权限校验天然咬合,规范升级跟着底座升级。自研代码只留"配置翻译、装配校验、名字代理"一层薄壳。

选成熟底座的好处就在这:生态级协议让底座去追规范,我只管业务。

总结

一句话记住 MCP:插上靠传输,认设备靠发现,干活靠调用;配置不写码,装配先核对,探活来兜底。

接进来只是"能调",怎么保证它不乱调?下一篇:别让 Agent 乱动手,工具权限怎么设计。

你的平台接了几个 MCP server?评论区聊聊。