← NewMax Share
2026年7月29日12 分钟阅读Yangyi

MCPSkill、连接器、CLITool Call 有什么区别

#MCP#AI Agent#Skill#工具选型#AI落地

文章摘要

这五个词天天一起出现,混淆的根源是有人在说协议、有人在说动作、有人在说剧本。本文按层级拆开:Tool Call 是模型与外界交互的唯一出口,MCP 让工具可被发现,Skill 是指令剧本,Connector 是外部服务的适配层,CLI 是执行手段。并回答三个高频问题:Skill 必须走 MCP 吗、CLI 和 Connector 依赖 MCP 吗、什么时候该给 CLI 包一层 MCP,附 2026-07-28 版 MCP 无状态化改版梳理。

MCP、Skill、连接器、CLI、Tool Call 这五个词天天一起出现,但它们根本不在同一个层级上。混淆的根源很简单:有人在说协议,有人在说动作,有人在说剧本,还有人在说执行手段

把它们按层级摆好,绝大多数争论会自动消失——包括「Skill 必须走 MCP 吗」「CLI 和连接器依赖 MCP 吗」「什么时候该给 CLI 包一层 MCP」这几个高频问题。本文按「先分层、再串联、最后看趋势」的顺序拆开,最后附上 2026 年 7 月 MCP 无状态化改版对这套分层的影响。

先给结论:五个概念的定位

概念它到底是什么一句话类比所处层级
Tool Call模型「调用外部能力」这个动作本身你伸手按开关模型接口层
MCP一套开放协议,规定模型怎样发现和调用外部工具开关的接口标准(86 型面板)协议层
Skill预写好的指令包 + 脚本,封装一整套任务流程一份操作手册编排层
Connector把外部服务(SaaS / 数据库 / API)接进来的适配器转接头、插座适配器集成层
CLI终端里通过命令行操作程序的方式直接在控制台敲命令执行层

记住这句话就够了:

Tool Call 是动作,MCP 是协议,Skill 是剧本,Connector 是桥梁,CLI 是执行手段。

五者分处不同层级,日常是组合使用的关系,很少需要在它们之间做单选。

Tool Call:万物的统一出口

这是最底层、也最不可绕过的抽象。模型和外部世界打交道,只有这一个出口。

Text
模型 → 发起 Tool Call(工具名 + 参数)        → 系统执行              → 返回 result                    → 模型读取结果,继续推理或回复

关键点在于:模型并不知道 result 是怎么来的。

  • MCP Server 返回的 JSON —— 是 Tool Call 的 result
  • Bash 脚本打印的 stdout —— 是 Tool Call 的 result
  • 读文件工具返回的文本 —— 还是 Tool Call 的 result

对模型来说完全没有区别。这一点很重要:后面所有「要不要走 MCP」的讨论,都不影响这一层。

所以真实的工具版图长这样:

Text
Tool Call ← 统一的「调用—返回」机制(最底层抽象)  ├─ 内置工具(Bash / Read / Edit / Write)  ← 直接执行,直接返回  ├─ MCP 工具(mcp__xxx__yyy)               ← 走 MCP 协议,返回结构化结果  └─ Skill                                   ← 一层封装,内部可以:       ├─ 调 Bash 跑脚本       ├─ 调 MCP 工具       └─ 什么都不调,纯 prompt 指导模型自己推理

MCP:让工具「可被发现」的协议

MCP(Model Context Protocol)由 Anthropic 在 2024 年 11 月推出,解决的是一个 N×M 问题

过去:M 个模型 × N 个工具 = M×N 套对接代码 现在:M 个模型 + N 个工具 = M+N 套实现

它常被叫做「AI 时代的 USB-C」。让模型调用工具这件事,Function Calling 早就能做到了;MCP 真正带来的是标准化的发现机制

  • 工具列表(tools/list)——我这有哪些能力
  • 资源(resources)——我这有哪些数据可读
  • 提示词(prompts)——我这有哪些预设模板

一次编写,处处可调。换模型不用重写工具定义,这才是 MCP 的核心价值。

MCP 只是通路之一

这是最容易误解的地方。MCP 只是把外部能力接入 AI 对话的一种标准化方式,此外还有别的路。后面三节会反复证明这一点。

Skill:剧本,不是引擎

Skill 本质上是**「一段指令(prompt)+ 可选的脚本 / 资源文件」**的打包。它回答的是:这个任务第一步干什么、第二步干什么、有哪些坑要避开。

Skill 一定要走 MCP 吗

不一定。Skill 有两种执行路径:

Text
方式 A(经 MCP 加载):  Tool Call → mcp__skill-handler__Skill → 把 Skill 指令载入上下文 → 模型按指令行动方式 B(纯文件加载 / 直接执行脚本):  Skill 指令里写着「用 Bash 执行 xxx.sh」  → 模型直接调 Bash 工具运行脚本  → 全程不经过任何 MCP Server

拿一个飞书操作 Skill 举例,它的实际执行是混合的:

  1. 第一步走 MCP —— 通过 skill-handler 这个 MCP Server 把 Skill 指令加载进来
  2. 第二步不走 MCP —— 指令说「用 lark-cli 命令去操作」,模型直接用 Bash 跑 CLI

结论:MCP 只是 Skill 的加载 / 触发方式之一,可以完全绕开。 Skill 完全可以纯粹是一组 markdown 指令,让模型直接调内置的 Bash / Read / Write 完成任务。而脚本跑完的 stdout,同样以 Tool Call result 的形式回到模型手里——和 MCP 返回的 JSON 在模型眼里是同一种东西。

Skill 和 MCP 的真正分工

MCPSkill
解决什么能不能调(连通性)该怎么调(方法论)
内容形态协议 + Server 实现指令文本 + 脚本
谁在消费客户端程序模型本身
更新成本要改代码、重启服务改一个 markdown 文件即可

一个常见且高效的组合是:MCP 提供原子能力,Skill 提供组合方法。

CLI:最古老、也最不依赖 MCP 的一层

CLI 比 MCP 早了几十年。gitcurlawsghpsql——这些工具在 AI 出现之前就存在,之后也不会因为 MCP 而消失。

CLI 依赖 MCP 吗

完全不依赖。模型调用 CLI 有两条路:

Text
路径 1(直接执行,最常见):  Tool Call: Bash("gh pr list --state open")    → 系统跑命令 → stdout 作为 result 回到模型    → 全程零 MCP路径 2(包一层 MCP):  Tool Call: mcp__github__list_pull_requests({state: "open"})    → MCP Server 内部可能还是在调 gh 或 REST API    → 返回结构化 JSON

那为什么还有人给 CLI 包一层 MCP

包这一层不会改变「能不能调」,它买的是另外四件事:

好处说明
结构化输出CLI 吐的是给人看的文本,MCP 返回的是模型好解析的 JSON
权限收窄Bash 是万能的(也意味着危险),MCP 工具只暴露你允许的那几个操作
自描述MCP 工具自带参数 schema,模型不用猜 flag 怎么写
跨环境Bash 需要本地装好 CLI;MCP Server 可以跑在远端

代价也很明确:多一层维护、多一层延迟、灵活性下降(CLI 的组合能力 |&&xargs 在 MCP 里没有对应物)。

经验法则:一次性的、探索性的操作直接用 CLI;高频的、需要权限管控的、要给别人复用的,包成 MCP。

Connector:MCP 出现之前就有,之后也不会消失

Connector(连接器)是个更老的概念,泛指任何把外部服务接进来的适配层。iPaaS 时代(Zapier、MuleSoft、Airbyte)就是干这个的。

Connector 依赖 MCP 吗

不依赖。真实关系反过来看更准确:

Text
外部服务(飞书 / Slack / Postgres / Stripe)   Connector(认证、限流、重试、分页、数据格式转换)   ┌────┴────┬──────────┐   │         │          │ MCP     CLI 工具    SDK / 直接 HTTP   │         │          │   └────┬────┴──────────┘    Tool Call      模型

Connector 是被 MCP 包装的对象。 一个 MCP Server 的内部实现,往往就是一个 Connector:它处理 OAuth token 刷新、API 限流、分页拉取、字段映射——这些活儿和 MCP 一点关系都没有,MCP 只负责把它「暴露给模型」。

同一个 Connector 可以有多个出口:

  • 暴露成 MCP Server → 给 AI 用
  • 暴露成 CLI → 给人用 / 给脚本用
  • 暴露成 SDK → 给应用代码用

完整的层级图与一次真实调用

Text
┌─────────────────────────────────────────┐│  外部世界:SaaS / 数据库 / 文件系统 / API  │└────────────────┬────────────────────────┘        ┌────────┴────────┐        │   Connector     │  认证、限流、重试、数据转换        └────────┬────────┘     ┌───────────┼───────────┐     │           │           │ ┌───┴───┐  ┌────┴────┐  ┌───┴────┐ │  MCP  │  │   CLI   │  │直接 HTTP│   ← 三条并列的接入方式 └───┬───┘  └────┬────┘  └───┬────┘     │           │           │     └───────────┼───────────┘        ┌────────┴────────┐        │     Skill       │  指令剧本:告诉模型怎么组合上面这些        └────────┬────────┘        ┌────────┴────────┐        │   Tool Call     │  模型与外界交互的唯一出口        └────────┬────────┘            ┌────┴────┐            │  模型   │            └─────────┘

以「把这份报告上传到飞书文档」为例,一次任务会把五个概念全用上:

步骤发生了什么涉及概念
1模型判断需要外部能力,发起调用Tool Call
2载入 feishu-cli 指令包,知道了操作方法和坑Skill(经 MCP 加载)
3按指令执行 lark-cli drive upload ...CLITool Call 的一种)
4lark-cli 内部处理 OAuth、走飞书 Open APIConnector
5stdout 回到模型,模型判断成功并回复用户Tool Call result

五个概念各司其职,谁也没有取代谁。

延伸:2026 年 MCP 走向无状态

2026 年 7 月 28 日,MCP 发布了 2026-07-28 版规范,官方定性为「协议诞生以来最大、最系统性的一次修订」。

核心一句话:MCP 从「双向有状态长连接」转向「无状态请求 / 响应」,变得更像一个普通的 HTTP 服务。

核心变化对照

旧版(2025-11-25 及更早)新版(2026-07-28)
握手必须先 initialize / initialized彻底移除,改为可选的 server/discover
会话Mcp-Session-Id 头绑定会话完全移除,每个请求自包含
能力协商连接时交换一次随每次请求放在 _meta 里传
水平扩展需要粘性会话 / 共享 session store / 网关拆包普通轮询负载均衡即可,可跑 Serverless

新版的一次调用:

HTTP
POST /mcp HTTP/1.1MCP-Protocol-Version: 2026-07-28Mcp-Method: tools/callMcp-Name: searchContent-Type: application/json{"jsonrpc":"2.0","id":1,"method":"tools/call", "params":{"name":"search","arguments":{"q":"otters"}, "_meta":{"io.modelcontextprotocol/clientInfo":{"name":"my-app","version":"1.0"}}}}

Mcp-Method / Mcp-Name 提到 HTTP header 的意义很大:网关、WAF、计费系统不用拆 JSON body 就能知道 Agent 在调什么工具、有没有权限。

需要状态的场景怎么办

官方给的答案是 HTTP 用了二十年的老办法——显式句柄:

Text
调用 create_basket  → 返回 basket_id: "bsk_a1b2c3"调用 add_item(basket_id="bsk_a1b2c3", sku="shoes")

状态由服务端存,ID 作为普通参数由模型传回来。相比隐藏在连接里的 session,句柄的好处是模型能「看见」它,因而可以推理它、组合它、跨步骤传递它。这套设计理念叫**「按需复杂度」**:核心保持精简,有状态性只在真正需要时才出现。

其他要点

  • MRTR(多轮往返请求):服务端返回 resultType: "input_required",客户端补齐信息后重试原调用
  • 可缓存列表tools/list 等响应带 ttlMscacheScope,列表不再随连接变化
  • 扩展框架:首批正式纳入 MCP Apps(服务器直接提供交互式 HTML 界面)、Tasks(长周期任务标准化)、EMA(企业托管授权)
  • 授权对齐企业标准:MCP Server 正式作为 OAuth 2.1 资源服务器;强制 RFC 9728、RFC 8707、RFC 9207;从 DCR 转向 CIMD(客户端元数据文档),可直接对接 Entra / Okta
  • 弃用项(≥12 个月窗口):旧 HTTP+SSE 传输、Roots、Sampling、Logging
  • SDK:TypeScript / Python / Go / C# 已更新,Rust 在 beta

这次更新恰好印证了分层

  • 无状态化之后,MCP 越来越像「一个标准化的 HTTP API 网关协议」。它主动放弃了自己管连接状态,把责任还给现成的 HTTP 基础设施(负载均衡、OAuth、分布式追踪)
  • 换句话说,MCP 向 Connector 那一层的成熟做法靠拢了,不再自己发明分布式系统方案
  • Tool Call 这一层完全没变——模型侧感知不到这次改动,变的全是传输层和部署层

下层剧烈重构,上层毫发无伤。这正是分层的意义。

小结:什么时候用什么

场景推荐
一次性的、探索性的操作直接 CLI(Bash)
高频、需要权限管控、要给他人复用包成 MCP Server
有固定流程和已知坑位的复杂任务写成 Skill
需要接入外部 SaaS / 数据库先写好 Connector,再决定暴露成 MCP 还是 CLI
只是想让模型做点什么你只需要 Tool Call,其余都是实现细节

三条避坑经验:

  1. 不要为了 MCP 而 MCP。 一个能跑的 CLI 加一段清晰的 Skill 指令,往往比一个半成品 MCP Server 更实用。
  2. Skill 该写的是方法论和踩坑记录,API 参数表 MCP 自己会带,重复抄一遍只会增加维护负担。
  3. Connector 是最该好好写的一层。 认证、重试、分页、限流这些活儿,不管上面套 MCP 还是 CLI 都躲不掉。

这套分层判据同样适用于更上层的工具选型问题——先看约束条件,再看能力上限,可参考 WorkBuddy 和 Codex 怎么选 里的决策表。

下一步可以做的事很具体:把手上正在纠结「要不要做成 MCP」的那个需求,按上表的场景列对号入座一次,多数情况下答案会立刻清楚。

参考链接

  1. MCP 2026-07-28 版规范发布公告

    官方对本次无状态化改版的说明,含变更清单与弃用政策

  2. Model Context Protocol 官方规范站

    MCP 协议规范与各语言 SDK 文档入口

继续阅读

查看全部 →

让 NewMax 帮你把这些方法落地

下载 NewMax,让 AI 在你的电脑上真正动手干活——读写文件、操作软件、跑完整个工作流。