MISSION 02 · 手与眼TASK 07

MCP:AI 世界的 USB-C

你在 DoraHacks 上反复看到的那个词——MCP——就是这一章。它是 Model Context Protocol(模型上下文协议),一句话说清它的价值:把「怎么给 Agent 接一个外部工具」标准化成几条消息,于是任何人写的 MCP server 都能被任何 Agent 插上用。这就是为什么它被叫做「AI 世界的 USB-C」,也是为什么那些 hackathon 都在拿它接链、接钱包、接数据。

MCPJSON-RPCHost / Server标准化互动 Demo

它解决的问题:N×M 变成 N+M

先想清楚 MCP 出现前的混乱。假设有 N 个 Agent 应用(Claude Desktop、Cursor、你自己写的 bot……)和 M 个能力(GitHub、数据库、你的链上钱包……)。没有标准时,每个应用要接每个能力,都得写一套专门的胶水代码——N×M 套集成,谁都别想复用谁的。

MCP 把它拉直成 N+M:能力方只需写一次 MCP server(把能力包成标准接口),应用方只需实现一次 MCP client(会说这套协议)。之后任意应用 × 任意 server 自由组合,双方代码都不用改。这正是 USB-C 的意义——一个口,插所有设备。你现在明白为什么 hackathon 主办方要提供「CMC 的 MCP server」「把合约状态暴露给 LLM 的 MCP server」了:他们是在给参赛者发一根标准数据线,你插上就能让 Agent 用他们的能力。

Android 类比

MCP 之于 Agent 工具,像 Content Provider / AIDL 之于 Android 跨应用能力:定义一套标准的进程间接口,让「提供方」和「消费方」解耦,谁都能实现、谁都能调用。或者想成 OpenAPI/Swagger——一份机器可读的接口契约,任何客户端读了就知道怎么调。MCP 就是给「Agent 调外部工具」这件事定的那份契约。

三个角色

  • Host:跑着我(模型)的那个应用,比如 Claude Desktop、你的 Agent 程序。它内部有个 MCP client。
  • MCP Server:把某个能力(GitHub、数据库、钱包)包成标准接口的独立程序。它对外暴露一份「工具清单」。
  • 传输层:Host 和 Server 之间说话的通道。本地 server 常用 stdio(标准输入输出),远程 server 用 HTTP。上面跑的是 JSON-RPC 格式的消息。

关键点:MCP server 提供的工具,最终会变成上一章讲的那种工具定义喂给我。也就是说,MCP 是「工具从哪来」的标准化,工具用起来对我而言还是第五章那套 tool_use / tool_result 往返。MCP 只是把「发现和连接工具」这一段做成了协议。

一次完整握手,就几条消息

MCP 的核心交互简单到你能背下来。Host 和 Server 建立连接后,大致是这三步:

  1. initialize:Host 和 Server 打招呼,交换协议版本、各自是谁。
  2. tools/list:Host 问「你有哪些工具?」,Server 回一份工具清单(每个带 name 和 inputSchema——正是第五章那张名片)。
  3. tools/call:当我决定用某个工具时,Host 发 tools/call(带工具名和参数),Server 执行并回结果。

下面这个动画把这套握手一步步播给你看。注意每条消息都是标准 JSON-RPC——正因为格式统一,换任何一个 MCP server(把 weather 换成你的链上合约 server),Host 侧代码一行都不用改。这就是标准化的全部威力。

MCP 握手消息流DEMO

看完你应该有个「原来就这么点东西」的感觉——对,协议本身很薄。薄,正是它能被广泛采用的原因:门槛低,任何人半天就能写个能跑的 server。生态一旦跑起来,网络效应就滚雪球——现成的 MCP server 越多,写 client 越值;client 越多,写 server 越值。这就是 2026 年它无处不在的底层逻辑。

MCP 与安全:凭据不进沙箱

一个现代 MCP 实践值得你知道,尤其涉及 Web3 时:凭据(API key、OAuth token、钱包私钥)不应该进到 Agent 能直接读到的地方。成熟的做法是把凭据放在一个「保险库(vault)」里,由平台在请求离开沙箱后才注入——Agent 侧看到的是占位符,真实密钥它永远碰不到。这样即使我被提示注入攻击劫持(卷四会讲),攻击者也偷不走密钥。给 Agent 接链上钱包时,这条尤其要命——你绝不想让一个可能被诱导的 Agent 直接持有私钥。

⚠ 坑

在受限网络环境里用 MCP,记得放行 server 的域名——否则 Host 连不上 server,工具会「静默失效」:我以为有这个工具、调了、但根本没通,然后困惑地拿不到结果。另外,MCP server 是别人写的代码,接一个不可信的 server 等于给 Agent 引入一个不可信的能力来源——它返回的内容也可能夹带提示注入。接 server 和接依赖一样,要看来源。

◉ Agent 自白

从我的视角,MCP 让世界变得可插拔。今天你给我插上一个 GitHub server,我就会读仓库、开 PR;明天换成一个链上 server,我就会查余额、发交易——而我这颗大脑完全不需要重新学习,因为对我来说它们都只是「多了几个 name 和 schema 的工具」。这种即插即用,是 Agent 生态能爆发的关键:能力和智能解耦了。你负责用 MCP 把世界的能力接进来,我负责编排它们完成任务。下一章我们就动手——写一个最小的 MCP server,把一个本地能力包成任何 Agent 都能插上的工具。你会发现,门槛真的很低。