首页 项目 博客 简历 联系 English
返回列表
2026年7月11日 约 2,538 字 预计 6 分钟读完

MCP 太重时,Skill + CLI 可以顶上一部分场景

比较 MCP、Skill 与 CLI 的工具半径和工程成本,说明本地确定性任务为何适合 Skill + CLI,以及跨系统复用时 MCP 的价值。

#AI Agent#MCP#Agent Skill#CLI#工具工程

MCP 太重时,Skill + CLI 可以顶上一部分场景

围绕 MCP 有一个很常见的观点:MCP Server 需要部署、协议适配、工具描述、鉴权、权限控制和治理,很多任务用 CLI 就能完成,再用 Skill 把流程组织起来,成本更低。

这个观点有很强的工程现实感。

很多本地任务本来就有成熟 CLI。比如测试、构建、格式化、静态检查、Markdown 转换、图片压缩、日志解析。Agent 直接调用命令行,拿退出码和标准输出判断结果,确实比写一个 MCP Server 轻很多。

但 Skill + CLI 覆盖的是一类场景,MCP 覆盖的是另一类场景。它们之间的差异不在“谁更先进”,而在工具半径不同。

方案更适合解决核心价值
CLI一个动作怎么稳定执行确定性、本地友好、容易调试
Skill一类任务怎么按流程完成复用经验、组织步骤、统一输出
MCP外部能力怎么被多个 Agent 接入标准化连接、工具发现、生态复用

轻量场景里,Skill + CLI 很好用。工具数量多、接入方多、跨系统复用需求强时,MCP 的价值会重新出现。

各自的特色

MCP 的目标是让 AI 应用通过统一协议接外部工具。这个方向很适合工具生态化,但它也会带来额外工程成本。

接一个 MCP Server,至少要考虑这些事:

  • Server 怎么启动。
  • Host 怎么连接。
  • 工具描述怎么写。
  • 参数 Schema 怎么维护。
  • 鉴权怎么做。
  • 权限怎么收口。
  • 调用日志怎么记录。
  • 错误怎么标准化返回。

对企业工具平台来说,这些都值得做。对一个本地 Markdown 检查、代码格式化、测试执行任务来说,这套东西很容易显得偏重。

CLI 的优势正好在这里。很多开发工具天然就是命令行接口:

npm test
pytest
ruff check .
eslint .
tsc --noEmit
markdownlint README.md
git diff --stat

这些命令已经有稳定输入、稳定输出、退出码、日志和 CI 集成方式。Agent 通过 shell 调用它们,再根据结果继续判断,就能完成很多确定性任务。

Skill 在这里补上另一层能力:它告诉 Agent 什么时候调用这些 CLI、按什么顺序调用、结果怎么判断、最后怎么输出。

所以这场争论可以拆成一句话:

Skill + CLI 的优势在轻量和确定性,MCP 的优势在标准化连接和生态复用。

CLI 的优势:确定性动作

CLI 是最成熟的自动化接口之一。

它适合 Agent 调用,主要有几个原因。

能力CLI 的优势
输入明确参数、文件路径、环境变量都比较清楚
输出明确标准输出、错误输出、退出码可判断
容易调试人可以直接在终端复现
容易组合Shell、脚本、CI 都能串起来
成本低不需要单独部署协议服务
本地友好文件处理、构建、测试天然适配

比如一次 Python 项目检查,可以直接走:

ruff check .
pytest
mypy .

Agent 不需要理解 ruff 内部怎么工作,只需要知道:

  • 命令怎么运行。
  • 退出码是否为 0。
  • 错误输出里有哪些文件和行号。
  • 修复后是否需要重跑。

这就是 CLI 的确定性。它把一个动作压成了稳定接口。

很多任务如果只需要“执行一个动作并读取结果”,CLI 会比 MCP 更直接。

CLI 的短板:它只管动作

CLI 擅长做动作,但它不理解任务目标。

pytest 只负责跑测试。它不知道当前任务是修 bug、补功能、发版前检查,还是做一次代码审查。

markdownlint 只负责检查 Markdown。它不知道这篇文章准备发到知乎、CSDN,还是内部知识库。

git diff 只负责展示变更。它不知道哪些变更需要重点审查。

所以 CLI 需要一个上层流程来组织。

这正是 Skill 的位置。

Skill 在这里补的,是流程

Skill 可以把多个 CLI 动作组织成一个任务流程。

比如一个“发布前检查”Skill,可以这样设计:

1. 接收文章路径
2. 调 markdownlint 检查 Markdown 格式
3. 调自定义脚本检查标题、图片、本地路径
4. 调转换脚本生成发布正文
5. 汇总错误和警告
6. 严重错误直接停止
7. 通过后输出发布前检查报告

这里 CLI 负责确定性动作:

markdownlint article.md
node check-local-images.js article.md
node export-publish-body.js article.md

Skill 负责流程规则:

  • 哪些命令先跑。
  • 哪些错误算阻断。
  • 哪些警告只提示。
  • 输出报告长什么样。
  • 哪一步需要人工确认。

可以把三层关系看成这样:

作用
Agent理解用户目标,选择合适能力
Skill规定任务流程、判断规则和输出格式
CLI执行确定性动作并返回结果

这个组合很适合内部工作流。尤其是流程固定、动作确定、输入输出明确的任务。

Skill + CLI 适合哪些场景

Skill + CLI 适合本地、确定性、内部流程型任务。

典型场景包括:

  • 代码格式化。
  • 静态检查。
  • 单元测试。
  • 构建前检查。
  • Markdown 转换。
  • 图片压缩。
  • 日志解析。
  • 数据清洗。
  • 发布前检查。
  • 本地文件批处理。

这些场景有共同特征。

特征说明
输入输出明确文件、参数、退出码都能判断
环境可控多数在本机、仓库或 CI 里执行
权限简单主要操作本地文件或已授权资源
复现方便人可以在终端手动运行
流程稳定适合写成 Skill 步骤

这里用 MCP 也能做,但经常会显得绕。

比如只是检查一个 Markdown 文件,直接执行:

markdownlint article.md

再让 Skill 解释结果就够了。为它单独包一层 MCP Server,收益并不明显。

MCP 适合哪些场景

MCP 的优势在工具连接和生态复用。

当工具变成远程系统、共享系统或多应用复用能力时,MCP 会更合适。

典型场景包括:

  • GitHub。
  • Jira。
  • 数据库。
  • 企业知识库。
  • 浏览器自动化。
  • 云服务控制台。
  • 监控系统。
  • 内部业务系统。

这些场景有几个特点:

特征MCP 的价值
多个 AI 应用要接同一工具统一封装一次,多处复用
工具需要被发现和描述Server 可以暴露工具列表和 Schema
需要统一鉴权Server 侧集中处理认证和授权
工具状态复杂Server 可以维护会话和连接
团队需要治理工具描述、版本、权限、审计可以集中管理

比如 GitHub 场景。

如果只是本地看 diff,CLI 很方便:

git diff
git log --oneline

但如果要获取 PR 评论、CI 状态、Issue 关联、Review 记录,再把结果写回 GitHub,MCP Server 会更合适。它可以把 GitHub API、鉴权、分页、错误处理、返回格式统一封装起来。

这时 MCP 的价值不在“执行一个命令”,而在“把一个外部系统稳定接进 Agent 环境”。

关键区别:工具半径不同

CLI、Skill、MCP 的差异,可以用工具半径来理解。

方案半径关心的问题
CLI单机 / 脚本半径这个动作怎么稳定执行
Skill任务流程半径这类任务怎么按步骤完成
MCP工具生态半径外部能力怎么被多个 Agent 统一接入

CLI 解决动作确定性。

Skill 解决经验复用。

MCP 解决工具接入标准化。

真实项目里,它们经常组合使用:

用户目标
-> Agent 选择 Skill
-> Skill 调 CLI 做本地检查
-> Skill 通过 MCP 调远程工具
-> Agent 汇总结果并给出下一步

把三者放在同一层比较,容易得出偏激结论。放到不同层后,边界会清楚很多。

一个例子:代码审查

假设要做一个代码审查 Agent。

只做本地审查时,Skill + CLI 很够用。

Skill 规定流程:

1. 读取当前 diff
2. 识别改动文件
3. 运行静态检查
4. 运行相关测试
5. 汇总风险
6. 输出 review 报告

CLI 执行动作:

git diff
npm test
eslint .
tsc --noEmit

这种情况下,CLI 的输出已经足够稳定。Skill 负责把这些动作组织起来,Agent 负责解释结果和提出建议。

如果审查要接 GitHub PR,情况就变了。

它可能需要:

  • 获取 PR 标题和描述。
  • 获取评论线程。
  • 获取 CI 状态。
  • 查询关联 Issue。
  • 写回 Review 评论。
  • 读取仓库权限。

这些动作跨越远程系统、鉴权、分页、写操作和审计。用 MCP Server 封装 GitHub 能力,会比散落的一堆 CLI 命令更稳。

所以同一个“代码审查”任务,轻量版本可以 Skill + CLI,平台化版本更适合 Skill + MCP + CLI。

一个判断矩阵

做方案时,可以先问几个问题。

问题更倾向
只是处理本地文件CLI
只是跑测试、构建、格式化CLI
需要把多个命令组织成流程Skill + CLI
需要复用团队经验和输出格式Skill
需要接远程系统MCP
多个 AI 应用要复用同一工具MCP
需要统一鉴权和审计MCP
一类任务同时需要本地检查和远程查询Skill + CLI + MCP

这个矩阵比“谁替代谁”更实用。

我的判断

Skill + CLI 确实能顶上一部分 MCP 需求。

尤其是本地、确定性、团队内部的自动化流程,Skill + CLI 往往更轻、更稳、更容易调试。文件处理、代码检查、测试、构建、发布前检查,都可以优先从这条路线开始。

但这种替代有前提:

  • 工具主要在本地。
  • 调用方比较少。
  • 权限边界简单。
  • 输入输出稳定。
  • 跨应用复用需求不强。

一旦工具变成远程服务,多个 Agent 应用都要接,或者需要统一鉴权、工具发现、权限治理和审计,MCP 的价值会重新出现。

所以我更倾向于把三者放在不同层:

层级方案作用
动作层CLI稳定执行一个具体动作
流程层Skill组织一类任务的执行顺序和判断规则
连接层MCP把外部系统标准化接进 Agent

轻量场景先用 Skill + CLI。工具生态扩大、共享需求增强、权限治理复杂后,再引入 MCP。

这条路线也更符合工程演进:先用最简单的方式跑通确定性动作,再把重复流程沉淀成 Skill,最后把跨系统、跨应用的能力上升为 MCP Server。