AI Agent 的工具调用:协议抽象 vs 本地执行
导读:当 MCP 被捧为"Agent 的万能接口"时,Perplexity CTO 和 YC CEO 却悄悄转向了 CLI。这场争论看似是新旧之争,实则是一场关于"抽象层级"的深层思辨。读完本文,你会明白:MCP 不是 CLI 的敌人,它们本就该并肩作战。
一、一场被误读的"战争"
2025 年的 AI 工具圈,最热闹的"口水战"莫过于 MCP 与 CLI 之争。
一边是 Anthropic 力推的 MCP(Model Context Protocol) ,号称 AI 时代的"USB 接口"------一次开发,Claude、GPT、Cursor 全平台通用。另一边是诞生于 1960 年代的 CLI(Command Line Interface),Unix 哲学的活化石,看似古老,却在 AI Agent 的场景里展现出惊人的生命力。
Perplexity 的 CTO 公开宣布内部全面转向 CLI;Y Combinator 的 CEO 在构建 Agent 时弃用 MCP;爆火的 OpenClaw 执行任务时几乎全用内部工具和 Shell 命令。这些信号让很多人开始唱衰 MCP,仿佛 CLI 即将完成一场"复古逆袭"。
但这场争论从一开始就问错了问题。
MCP 是一套通信协议 ,CLI 是一种交互形态 。它们不是同一维度的对手,就像"国际邮政系统"和"同城闪送"不会互相取代,只是服务于不同的距离和场景。真正值得探讨的是:在 AI Agent 的工具链中,协议抽象 和本地执行各自该扮演什么角色?以及,如何让它们协同而非互斥?
二、概念澄清:协议与形态的正交性
在深入对比之前,我们必须先破除一个根深蒂固的误解。
2.1 MCP 是什么?
MCP(Model Context Protocol) 的本质是协议(Protocol)。它定义的是"AI 如何发现、描述和调用外部能力"的通信规范------包括工具 Schema、资源 URI、提示模板等元数据格式,以及 Client-Server 之间的请求-响应语义。
它不关心工具内部是怎么实现的,只关心"接口长什么样"。
打个比方:MCP 像是餐厅的前厅服务规范------如何点餐、如何传菜、如何结账。它规范的是"服务流程",而不是"菜怎么做"。
2.2 CLI 是什么?
CLI(Command Line Interface) 的本质是形态(Form Factor) 。它定义的是"用户(或程序)如何通过文本命令与软件交互"的界面范式------管道(|)、重定向(>)、退出码、标准输入输出流。
它不关心命令背后有没有协议,只关心"怎么执行最高效"。
继续用餐厅类比:CLI 像是后厨的烹饪动作------切菜、炒菜、装盘。它关注的是"手艺",而不是"服务流程"。
2.3 关键洞察:两者是正交的
完全可以存在一个 MCP Server,其内部逻辑就是调用 ffmpeg 或 grep;也可以存在一个 CLI 工具 mcp-call,它通过 MCP 协议与远程服务通信。
Claude Code 的"CLI 优先"策略,本质上是用 CLI 的形态绕过了 MCP 协议的上下文开销,而不是在否定 MCP 这套标准本身。这就像一家餐厅可以前厅很规范、后厨很高效------两者各司其职,而非互相替代。
所以,与其争论"MCP vs CLI",不如讨论"协议抽象 vs 本地执行"在不同场景下的取舍。
三、成本模型:用"意图转换总成本"统一衡量
与其争论"MCP 比 CLI 多消耗多少 Token",不如建立一个更完整的**意图转换总成本(Total Intent Translation Cost)**模型。
当用户说"帮我处理这批照片"时,AI Agent 需要把自然语言意图翻译成机器可执行的动作。这个过程中,有三类成本在叠加:
3.1 Token 成本:上下文窗口的"租金"
MCP 的 Schema 确实会占用上下文。一个包含 20 个工具的 MCP Server,其 JSON Schema 可能占用数千 Token。这笔"租金"在以下场景会成为负担:
- 工具数量爆炸:当 Agent 同时挂载 40+ 个工具时,Schema 的累积效应会让上下文窗口不堪重负。
- 高频短交互:每次对话都要重新加载 Schema,像每次进餐厅都要重新听一遍菜单介绍。
但这笔"租金"可以通过三种手段优化:
| 优化手段 | 原理 | 效果 |
|---|---|---|
| Prompt Caching | 现代 LLM API 对静态系统提示提供缓存折扣 | Schema 作为不变内容,后续调用成本可降至 1/10 |
| Lazy Loading | 根据用户意图动态加载相关 Server | 提到"数据库"时才加载 SQL MCP Server,而非一次性挂载全部 |
| Schema 摘要 | 用 LLM 生成工具集的语义摘要 | 用"这个 Server 提供文件操作能力"替代完整的参数列表 |
CLI 的 Token 优势在于极简的接口描述 ------一个 bash 工具只需十几行说明,大模型对常见 CLI(git、curl、ffmpeg)的用法已在预训练阶段内化。但对于冷门 CLI,你仍需在提示中注入文档,这部分成本与 MCP 的 Schema 并无本质区别。
结论:Token 成本是真实存在的痛点,但它是"可优化的工程问题",而非"架构性缺陷"。
3.2 延迟成本:思考-行动循环的"摩擦力"
这是 CLI 真正的杀手锏。
考虑一个"筛选横版照片、加水印、上传服务器"的任务:
MCP 路径(假设每步一个工具):
LLM 思考 → 调用 list_files → 等待返回 →
LLM 思考 → 调用 get_image_info × 10 张 → 等待返回 →
LLM 思考 → 调用 add_watermark × N 张 → 等待返回 →
LLM 思考 → 调用 upload_files → 等待返回 →
LLM 思考 → 生成最终回复
在这个路径中,LLM 是串行调度的瓶颈。每一步都需要重新进入推理循环,即使单次推理只要 500ms,累积起来也是秒级的延迟。
CLI 路径:
bash
exiftool -if '$ImageWidth > $ImageHeight' -p '$FileName' . | \
xargs -I {} magick {} -draw 'image over 0,0 0,0 watermark.png' output/{}.png && \
scp output/*.png user@server:/var/www/photos/
LLM 只做一次"意图翻译",生成一条组合命令。后续由 Unix 管道在本地自治执行 :exiftool 筛选照片,ImageMagick 加水印,scp 上传服务器。这三个专业工具通过 | 和 && 无缝衔接,无需 LLM 介入中间状态。
这就像:MCP 路径是"老板(LLM)亲自指挥每一个员工(工具)干活",CLI 路径是"老板写了一张流程图,交给一个自动化流水线去执行"。显然,后者在批量任务中效率更高。
3.3 工程维护成本:被忽视的"长期负债"
这是最容易被短期性能对比掩盖的维度。
| 维度 | MCP | CLI |
|---|---|---|
| 跨平台复用 | 一次开发,Claude/Cursor/Windsurf/OpenClaw 通用 | 脚本碎片化,每个 Agent 需单独适配 |
| 接口稳定性 | Schema 版本化,向后兼容可控 | 命令参数随版本变化,解析脆弱 |
| 错误处理 | 结构化错误码 + 类型安全 | 依赖文本解析退出码,边界情况多 |
| 团队协作 | 新人通过 Schema 即可理解能力边界 | 需要阅读 Shell 脚本,知识传递成本高 |
| 安全审计 | 调用日志天然结构化 | 需额外封装 script 或 auditd |
一个真实的故事:某团队用 CLI 脚本搭建了内部数据流水线,半年内换了 3 个维护者,每个人都抱怨"看不懂上一个人的正则表达式"。后来改用 MCP 封装,新成员通过 Schema 就能理解每个工具的输入输出,维护成本下降了 70%。
结论 :CLI 在单次调用的 Token 和延迟上占优,但 MCP 在工程规模化上摊薄了长期成本。对于个人脚本,CLI 更轻量;对于团队协作,MCP 更可持续。
四、场景化决策矩阵:没有银弹,只有适配
基于上述成本模型,我们可以画出一张清晰的决策地图。
场景 A:批处理与文件操作 → CLI 管道
特征:输入输出为文件流、操作幂等、流程线性、错误处理简单。
典型案例:
- 视频转码:
ffmpeg -i input.mp4 -c:v libx264 output.mp4 - 日志分析:
cat app.log | grep ERROR | awk '{print $1}' | sort | uniq -c - 图片批处理:
find ./raw -name "*.jpg" -exec magick {} -resize 800x600 ./thumb/{} \; - Git 仓库批量操作:
for repo in */; do cd $repo && git pull && cd ..; done
为什么选 CLI:Unix 管道的设计哲学------"每个工具只做一件事,通过标准输入输出组合"------与 AI 的"一次性生成组合命令"完美契合。LLM 只需做一次意图翻译,后续由专业工具自治完成。
生动类比 :CLI 管道就像一条工业流水线 。每个工位(工具)只做一道工序,传送带(|)把半成品送到下一个工位。厂长(LLM)只需要在开工前画好流程图,不需要站在每个工位旁边指挥。
场景 B:结构化数据与多服务编排 → MCP
特征:涉及 API 认证、结构化数据查询、条件分支、跨服务状态传递。
典型案例:
"查 CRM 中客户张三的近 3 笔订单,若总额超 10 万,调用邮件服务发送促销草稿,并返回给我确认。"
为什么选 MCP:这个任务需要:
- 查询数据库(CRM)------需要 SQL 或 ORM,返回结构化数据
- 条件判断(金额 > 10 万)------需要类型安全的数值比较
- 调用邮件 API(需 OAuth 和模板渲染)------需要认证管理和错误重试
- 生成草稿返回给用户------需要多步推理的中间状态传递
如果用 CLI,你需要写一堆 curl 拼接 JSON、手动处理 Token 刷新、解析嵌套返回。而 MCP 将 CRM 和邮件服务封装为 get_customer_orders 和 send_email 两个类型安全工具,AI 可以优雅地进行多步推理,且每个工具的权限、输入边界、错误语义都是显式定义的。
生动类比 :MCP 就像乐高积木 。每块积木(工具)都有标准化的接口(凸粒和凹槽),你可以自由组合,但不用担心"这块积木能不能插到那块上"。而 CLI 更像是手工陶艺------灵活自由,但要做出复杂的组合结构,需要极高的手艺。
场景 C:高频自动化 → CLI
特征:触发频率高、对延迟极度敏感、逻辑相对固定。
典型案例:
- CI/CD 流水线:每次代码提交触发构建、测试、部署
- 定时监控脚本:每 30 秒检查一次服务健康状态
- IDE 内的实时代码检查:每次保存文件触发 Lint
为什么选 CLI:在每秒触发数十次的场景下,MCP 的网络往返(即使本地 stdio 也有序列化开销)和 LLM 推理成本会被放大到不可接受。
算一笔账 :假设一个 CI 流水线每天触发 1000 次,每次用 MCP 需要 2000 Token(输入)+ 500 Token(输出),按 Claude 3.5 Sonnet 价格( <math xmlns="http://www.w3.org/1998/Math/MathML"> 3 / M T o k 输入, 3/MTok 输入, </math>3/MTok输入,15/MTok 输出),每天成本约 <math xmlns="http://www.w3.org/1998/Math/MathML"> 13.5 ,每年近 13.5,每年近 </math>13.5,每年近5000 。而用 CLI 脚本,成本为 $0。
场景 D:跨团队协作与安全审计 → MCP
特征:多租户环境、权限粒度要求高、操作需留痕、工具需复用。
典型案例:
- 企业级 AI 助手接入内部 ERP、财务系统、生产数据库
- 云端多用户环境,需要防止"一个用户的 Agent 误删另一个用户的数据"
- 金融、医疗等合规行业,所有操作必须可审计
为什么选 MCP:
-
Schema 即文档 :MCP 的 Schema 本身就是一份活的接口文档。新团队成员无需阅读源码,通过 Schema 就能理解每个工具的输入输出、必填字段、枚举值。这大大降低了知识传递成本。
-
权限精细化 :MCP Server 可以在入口处统一实现认证、限流、字段级权限控制。比如
send_email工具可以限制"只能发给公司内部域名",而 CLI 的权限控制依赖操作系统层面的用户组,粒度太粗。 -
审计天然结构化 :MCP 的每次调用都是一次结构化的 JSON 请求-响应,可以直接存入审计数据库。而 CLI 的审计需要额外封装
script命令或配置auditd,且解析文本日志的可靠性远低于结构化数据。
生动类比 :MCP 就像银行的柜台服务 。每个窗口(工具)都有明确的业务范围、操作规范和监控摄像头(审计日志)。客户(AI)只能通过窗口办理业务,不能直接进入金库(系统底层)。而 CLI 更像是自助银行------方便快捷,但一旦出现纠纷,很难追溯责任。
五、混合架构:对外接口,对内引擎
既然两者各有疆域,最务实的架构不是二选一,而是分层融合。
5.1 架构蓝图
objectivec
┌─────────────────────────────────────────┐
│ 用户意图(自然语言) │
└──────────────┬──────────────────────────┘
▼
┌─────────────────────────────────────────┐
│ 接口层:MCP 协议 │
│ • 工具发现(Tool Discovery) │
│ • 权限控制 & 审计日志 │
│ • 跨平台复用(Claude/Cursor/GPT 通用) │
└──────────────┬──────────────────────────┘
▼
┌─────────────────────────────────────────┐
│ 适配层:轻量 MCP Server │
│ • 接收结构化请求(JSON Schema) │
│ • 参数校验 & 安全转义 │
│ • 调用底层 CLI 引擎 │
└──────────────┬──────────────────────────┘
▼
┌─────────────────────────────────────────┐
│ 执行层:CLI 管道 │
│ • ffmpeg / ImageMagick / grep / scp │
│ • Unix 管道组合(|、&&、xargs) │
│ • 本地文件系统 & 系统调用 │
└─────────────────────────────────────────┘
这个架构的精髓在于 :MCP 负责**"对外讲好故事"(标准化接口、安全边界、生态兼容),CLI 负责"对内干好活"**(高效执行、管道组合、零额外开销)。
5.2 具体例子:智能图像处理 Agent
假设我们要构建一个"智能图像处理 Agent",功能包括:筛选横版照片、加水印、上传服务器。
传统 MCP 做法(低效):
- 暴露 4 个工具:
list_files、get_image_info、add_watermark、upload_files - AI 需要 4 轮推理,每次都要等待返回
混合架构做法(高效):
- 对外 :暴露一个 MCP 工具
batch_process_images,参数包括source_dir、filter_criteria、watermark_path、destination - 对内:MCP Server 接收到请求后,将参数安全转义,拼接成一条 CLI 管道:
bash
exiftool -if '$ImageWidth > $ImageHeight' -p '$Directory/$FileName' {source_dir} | \
xargs -I {} magick {} -draw 'image over 0,0 0,0 {watermark_path}' {destination}/{} && \
scp {destination}/* user@server:/var/www/photos/
- 执行完成后,将结果(成功/失败文件列表)结构化返回给 AI
收益:
- AI 客户端只感知到标准的 MCP 接口(跨平台复用、安全可控)
- 实际执行享受 CLI 的极致效率(一次推理、本地自治)
- 维护成本最低------底层 CLI 逻辑可以独立测试和替换,MCP 层只负责"翻译"和"管控"
5.3 谁已经在这么做?
实际上,这种混合架构已经出现在主流工具中:
- Claude Code :对外是 CLI 形态,但内部在调用某些外部服务时,也在探索 MCP 的集成。它的"CLI 优先"是形态选择 ,而非协议排斥。
- Cursor :主打 MCP 生态,但在处理本地文件操作时,底层也是调用系统 CLI(如
git、find)。 - OpenClaw:虽然以 CLI 为主,但在需要与外部服务(如 GitHub API)交互时,也会封装轻量的 MCP-like 接口。
六、未来趋势:协议与执行的融合演进
这场争论不会以"一方消灭另一方"告终,而是两条技术线的双向靠拢。
MCP 的进化方向
-
传输层轻量化:从 SSE(Server-Sent Events)向 stdio 和本地 Unix Socket 扩展,减少网络序列化开销。当 MCP Server 和 Client 在同一台机器上时,延迟可以接近本地函数调用。
-
Schema 压缩:引入工具语义摘要和动态加载。未来的 MCP 可能支持"工具目录"(Tool Registry),Agent 不需要在上下文中加载完整 Schema,而是按需查询。
-
流式执行:支持 Server 端返回"部分结果",让 AI 可以更早介入长流程的中间决策。比如视频转码时,Server 可以每转码完 10% 就汇报一次进度。
CLI 的进化方向
-
结构化输出 :现代 CLI 工具越来越多支持
--json或--output-format=jsonlines,弥补 AI 解析文本输出的脆弱性。gh(GitHub CLI)、flyctl、vercel都内置了机器可读模式。 -
AI 原生设计 :新一代工具开始内置"命令建议"功能。比如
git的git suggest子命令,可以直接生成符合当前仓库状态的命令建议。
终极形态
当 MCP 的传输层足够轻量、CLI 的输出足够结构化时,两者的边界将模糊化------Agent 可能直接通过本地 MCP over stdio 调用一个 CLI 包装器,享受协议的标准化和执行的零开销。
这就像:未来的餐厅,前厅(MCP)和后厨(CLI)之间的隔墙变成了一块透明玻璃------顾客依然享受标准化服务,但能看到厨师的高效操作;厨师依然专注烹饪,但能通过玻璃接收前厅的实时反馈。
七、结语:抽象层级之争,而非技术路线之争
MCP 和 CLI 之争,本质上是**"抽象层级"**之争。
- 协议抽象 的价值在于连接、复用和治理。它让工具像乐高积木一样标准化,让团队协作像流水线一样有序。
- 本地执行 的价值在于速度、简洁和自治。它让单次任务像闪电一样快,让个人开发者像独行侠一样自由。
真正成熟的 AI Agent 架构,应该像一座设计精良的餐厅:
- **前厅(MCP)**用标准化的服务流程接待每一位客人
- **后厨(CLI)**用高效的流水线完成每一道菜品
- 客人不需要知道后厨的喧嚣,厨师也不需要理解前厅的礼仪
- 但正因为两者的专业分工,整家餐厅才能既高效又有序
在 AI 工具链的演进中,最危险的不是选错了技术,而是误以为必须只选一个。