最近AI Agent圈子又因为CLI躁动了。不少开发者抛弃MCP,转向 CLI + Skills 混合模式:用CLI干重活,用轻量Skill做结构化控制。
CLI到底是什么?
简单来说,CLI就是让大模型直接生成命令行指令,然后由Agent在本地或受控环境中执行。
举几个直观的例子:
“帮我把今天下载的PDF全部重命名为‘会议记录-日期-序号.pdf’”,大模型输出
find . -name "*.pdf" -mtime -1 | xargs -I {} mv {} "会议记录-$(date +%Y%m%d)-{}.pdf"“把这个项目的依赖更新到最新,但只更新patch版本”
npm outdated --parseable | cut -d: -f2 | xargs -I {} npm install {}@latest --saveAgent拿到命令后,直接丢给shell执行,拿到输出再喂回大模型。整个流程极简粗暴,却异常高效。
CLI vs MCP
相比MCP,CLI有几个优势:
1. Token消耗大幅降低
MCP每次调用都要把当前可用的所有工具列表、参数 schema、描述全塞进上下文。
而CLI呢?
git、curl、jq、awk、rsync、docker……这些通用命令大模型自带知识,根本不用传文档。
遇到较新的CLI(如Playwright),只需要把帮助文档喂给大模型,token也不会比MCP高。
目前社区讨论中认为,MCP在简单任务上token消耗是CLI的10-32倍,而且因为上下文限制等原因,失败率更高。
2. 不依赖MCP Server,维护成本低
MCP需要专门维护一个Server来暴露工具接口。
CLI直接用现有的服务器就能跑,基本零额外成本。
3. 灵活性更强
MCP的每个工具都是孤立的函数,你要实现“查找→过滤→批量重命名→压缩”这样的流程,往往需要多次往返大模型。
CLI却可以让大模型一次性生成管道命令,甚至是带逻辑的多行脚本
Bashfind /data -name "*.log" -mtime +7 | xargs grep -l "ERROR" | xargs -I {} sh -c 'mv {} {}.old && gzip {}.old'一条命令搞定,中间结果不需要来回传输,提升了效率,也节省了token。
很多MCP做不到、或者需要写一大堆glue code的事,CLI用一行shell就能干。
Claude Code、Gemini CLI 等产品直接内置强大的bash工具,一些实测表明,一条工具就能顶替以前50+个MCP工具
但CLI也不是万能的,它的痛点也很明显:
1. 约束弱,结果不稳定
大模型也许会给出最优的命令,但对于复杂的命令,有时候会生成非最优命令或者错误命令,比如路径没加引号、特殊字符没转义、甚至直接 rm -rf /* 这种灾难操作。
2. 安全风险更高
让大模型生成命令,本质上是把root权限间接交给了它。理论上必须配合严格的沙箱、权限控制、最小化原则才能用。
3. 调试体验较差
命令执行失败后,错误信息有时很原始,大模型需要多轮才能定位问题,不像MCP的结构化返回那么明确。
最后
现在一些人有非黑即白的误区——要么all in MCP,要么all in CLI。
但我认为:CLI和MCP是互补,不是替代。CLI的本质是用最低成本、最高灵活度把大模型已有的“终端知识”激活,它不会完全取代MCP。真正聪明的做法是分场景选用。