从困惑到理解:我关于 MCP、Skill 和 CLI 的探索之旅

前言

最近在接触 AI 编程的过程中,我遇到了几个让我困惑的问题:为什么 MCP(Model Context Protocol)会占据那么多上下文?为什么不能像 Skill 那样渐进式披露?Skill 和 MCP 到底有什么区别?为什么大家都开始做 CLI 工具甚至宣称要放弃MCP了?带着这些问题,我开始了探索之旅。

这篇文章记录了我的思考和理解,希望能帮助到有同样困惑的开发者。


一、MCP 为什么会占据大量上下文?

我的困惑

刚开始使用 Claude Desktop 配合 MCP 时,我发现对话没多久上下文就快满了。明明没聊几句,怎么 Token 消耗这么快?

探索发现

经过了解,MCP 的上下文消耗主要来自三个方面:

1. 系统提示词的隐性膨胀

MCP 客户端为了告诉模型“你能用哪些工具”,会在每次对话的系统提示词中,把所有 MCP 服务器的工具定义都塞进去。一个工具的 JSON schema 可能就占几百 Token,如果同时启用 5 个服务器,光工具列表就可能消耗 5000-15000 Token。

2. 工具调用的往返消耗

每次调用 MCP 工具,调用时的参数和返回的原始数据都会永久留在对话历史中。如果某个工具返回了超长的日志或大量数据,上下文会迅速膨胀。

3. 全量加载的设计哲学

MCP 的设计目标是要让模型拥有“完整的能力认知”,这样模型才能自主决定何时调用哪个工具。但这种“全量加载”的设计,确实带来了不小的上下文开销。


二、为什么不用类似 Skill 的渐进式披露?

我的困惑

既然 MCP 的上下文开销这么大,为什么不学 Skill 那样按需加载?用户需要什么工具,再加载什么工具,不是更合理吗?

探索发现

Skill 和 MCP 的定位不同

Skill 是为特定场景设计的,工具数量有限(通常 ≤10 个),而且是用户主动触发才加载,天然适合渐进式披露。

MCP 的目标是成为通用协议,需要在启动时告知模型“你能用哪些能力”,因为 LLM 本身是无状态的,不提前注入,模型根本不知道有哪些工具可用。

LLM 调用范式的限制

当前主流 LLM 的函数调用机制要求:所有可用工具必须在请求时完整声明。API 不支持“先告诉模型 10 个,等模型问再补充”。模型不会主动问“还有别的工具吗”。

Skill 为什么能做到渐进式披露

Skill 的本质是提示词工程 + 工作流编排:

  • 在客户端侧做条件加载,检测到特定命令才注入相关工具
  • 利用上下文注入而非原生 function calling
  • 场景封闭,不需要让模型“知道所有技能”

三、Skill 和 MCP 的区别与优缺点

核心定位差异

维度 Skill MCP
本质 提示词工程 + 工作流编排 标准化协议 + 客户端-服务器架构
目标 为特定场景封装能力包 让模型安全、统一地访问外部工具
触发方式 用户显式调用 模型根据上下文自主决定
生态范围 绑定特定客户端 跨客户端、跨模型的标准协议

Skill 的优缺点

优点

  • 上下文友好,只在激活时注入
  • 用户体验直观,用户主动控制
  • 实现简单,无需搭建服务器
  • 高度定制,可针对场景深度优化

缺点

  • 无法调用外部工具(纯提示词版)
  • 生态割裂,无法跨平台复用
  • 扩展性受限,新增能力需客户端更新
  • 模型自主性差,必须用户触发

MCP 的优缺点

优点

  • 真正的工具调用能力
  • 生态统一,同一服务器可被多客户端使用
  • 用户可扩展,任何人都可编写服务器
  • 模型自主决策

缺点

  • 上下文开销大
  • 复杂度高,需要运行独立进程
  • 安全风险,需配置权限控制
  • 延迟增加,涉及进程间通信

四、CLI vs MCP:为什么 CLI 更受欢迎?

我的困惑

我注意到飞书、钉钉、GitHub、数据库这些服务,很多都同时在提供 MCP Server 和 CLI 工具。而且 Perplexity CTO 公开表示放弃 MCP 转向 CLI,Y Combinator 总裁也说“MCP sucks”。为什么 CLI 这么受欢迎?

探索发现

CLI 的三大优势

1. 上下文成本几乎为零

MCP 启动前就要消耗 5000-15000 Token,而 CLI 模式中,AI 只需要知道命令名称,不提前注入任何 schema。命令执行后,还可以用 jqgrep 在数据进入上下文前就过滤掉大量冗余信息。

2. 可组合性更强

CLI 可以用管道组合命令,在数据进入上下文前完成过滤、转换、聚合。而 MCP 返回什么就是什么,AI 无法在调用后再用管道处理。

3. 可调试性更好

AI 执行 gh pr list,你可以在终端跑完全相同的命令。输入一致、输出一致、错误信息一致。MCP 的调用发生在对话“内部”,需要翻 JSON 传输日志才能调试。

融合方案

行业正在探索的结合方案:

  • MCP2CLI:把 MCP 工具“翻译”成 CLI 命令
  • Single-Tool MCP:只暴露一个工具,输入是 Python/JavaScript 代码,一个工具解决所有问题

五、我的总结

经过这一系列的探索,我形成了一些理解:

技术 核心定位 适用场景
Skill 用户主动加载的提示词增强包 特定场景的提示词优化,固定流程
MCP 模型自主调用的外部工具协议 需要精细权限控制、多步状态管理
CLI 人与 AI 都能用的标准接口 通用操作、调试透明、成本敏感

MCP 不会“死”,但它正在回归到最擅长的位置:需要精细权限控制、多步状态管理、或封装复杂内部系统的场景。

CLI 正在成为 AI 与外部世界交互的默认界面,因为它省钱、省心、好调试、无上限、生态成熟。

Skill 更适合做高频工作流的封装,内部可以调用 CLI 或 MCP 来实现具体操作。


写在最后

这篇文章记录了我从困惑到理解的过程。技术没有银弹,MCP、Skill、CLI 各有各的适用场景。理解它们的设计哲学和权衡,才能在合适的场景选择合适的工具。

如果你也有类似的困惑,希望这篇文章能给你一些启发。欢迎在评论区交流讨论!


本文是作者学习过程中的思考总结,如有不当之处,欢迎指正。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐