CLI:command line Interface,命令行接口。
CLI优势:适合个人领域
(1)token消耗小;(2)执行效率高
MCP优势:适合企业/云端场景
(1)更可控;(2)更安全
一、CLI优势
(1)token消耗小;(2)执行效率高
token消耗小
MCP的token消耗极大,尤其是它的元信息,包括名称、描述、入参格式等等,都会传送到LLM的上下文中,从而消耗大量token。并且传递给大模型的是所有的MCP工具。

如上所示,对于这一个问题,传给LLM的不只是用户的问题,还有可用的MCP工具列表,这样大模型才能够从中选择出与用户问题最为相关的MCP工具 。问题就是发送给大模型的工具列表不仅仅是工具名称,还包括工具详细信息,比如工具可以干什么,调用时需要传入什么参数,格式如何...这些信息会占用大量token。以list_issue为例,它这一个工具就占用了三千多个字符。而一个Github MCP Server就有44个工具,有六万多个字符,占用一万五千个token。

如上所示,对于这一个问题,如果使用CLI,就不需要发44个工具信息了,只需要传递一个bash工具,这个工具说明如下所示:

让LLM生成生成一个命令,生成的命令如下:

问题:为什么LLM知道这个gh命令 ?
因为gh、git、grep这些常见的CLI程序都是LLM在训练阶段就见过了;而对于那些不常见的CLI工具,只需要给LLM一份说明文档就行,实际工程中是通过Agent Skill来实现的,Agent Skill本质上就是给模型看的说明文档。

执行效率高
问题:假设你是个摄影师,文件夹有10张单反照片,现在需要将所有的横板照片找出来,加上专属水印,上传到服务器是,用于网页展示。

上述是MCP的过程,大模型需要思考,并且决定是调用工具还是返回答案,如果调用工具还要思考传入什么操作;除此之外,大模型还要不停接收工具执行结果。

上述是CLI过程 ,LLM生成命令返回,命令开始执行,这三步全部在本地自动跑完,不需要大模型参与。等这三步跑完,结果才返回给LLM,LLM思考后给出答案。CLI链接远短于MCP,效率自然快很多。
问题:为什么CLI可以做到这一点?。
因为CLI程序可以随意组合。如下所示:| 可以将上一个命令的结果传给下一个命令;&&表示如果上一个命令成功完成了,那么就跑下一个命令。
这两个符号将原本独立的工具串联成一个完整的流程。工具和工具之间可以自由组合,像搭积木一样。

这个命令分为三部分,第一部分exiftool用于扫描文件夹中所有照片,筛选出宽大于高的照片,第二部分是ImageMagick处理图像增加水印,将结果输出到output文件夹,第三部分使用scp将output中处理好的照片批量上传到服务器。
MCP很难做到这一点,即使MCP可以将读取目录工具、读取图片信息工具、加水印工具、上传工具写成一个工具也可以实现,但是需要简单变一下:比如筛选出4K的照片 / 改变图片类型,那么每变一次需求,工具就要重新开发。而CLI只需要调整几个参数,重新拼一下即可。
二、MCP优势:
(1)更可控;(2)更安全
更可控
对于该命令,如果某一个图片的文件名包含一个单引号',那么这个cli命令就会报错;这是因为LLM虽然很擅长生成命令,蛋命令越复杂,出错概率越高,且这类错误很隐蔽,很难发现。
而对于MCP,无论图片的名称是什么都不会影响,都不会影响工具的正常执行,不会像CLI那样和命令的本身语法冲突。所以MCP的执行结果更可控,出错概率更低

更安全
万一大模型生成的命令中夹杂了 rm -rf之类的 操作,那么本地文件可能会被误删;即使大模型可能只是想删除临时文件,但是犯错无法控制,万一在云端环境不小心误删,就完蛋了!!!