Back to Articles
Jan 21, 20264 weeks ago

What's the Actual Difference Between MCP and Skills? One Article to Explain Clearly

宝玉@dotey

AI Summary

This article cuts through the confusion in the fast-moving AI Agent space, answering a pressing question for developers: is the Model Context Protocol (MCP) obsolete now that Skills are here? It provides a definitive, nuanced framework that moves beyond hype to clarify the distinct purposes, technical trade-offs, and optimal use cases for each technology. The author argues that MCP and Skills are not competitors but complementary technologies solving different problems, defined by their core purpose and distribution model. The central analogy frames AI Agent as an operating system: MCP is the USB protocol (a universal standard for connecting external services), while Skills are applications (packaged knowledge and workflows for internal use). The key differentiator is distribution: Skills are for internal team use (file-based), while MCP is for external, universal access (URL-based). Key Insights The fundamental technical trade-off is between MCP's "pre-load" model and Skills' "progressive disclosure." MCP requires all tool definitions to be loaded into the AI's context window upfront, causing "context explosion" (e.g., 67,000 tokens consumed before conversation starts). Skills load only metadata initially, with full instructions and references loaded on-demand, drastically reducing context waste. Skills possess a killer feature: executable scripts. A Skill can bundle scripts (Python, Bash, JS) that the AI runs directly. The script code itself never enters the context window; only the results do. This enables complex local operations (file processing, data manipulation) with near-zero context cost and deterministic outcomes, often eliminating the need for an MCP server. A real-world case study on automating X Article publication demonstrates the efficiency gap. A Playwright MCP-based solution consumed over 50,000 tokens due to step-by-step AI decisions and page snapshots. A Skills + CDP script version reduced this to a few hundred tokens by encapsulating the entire workflow into a single script call, bypassing intermediate AI interactions. The future landscape predicts a shift where Skills handle the majority of "teaching AI how to work" — encoding local workflows, domain knowledge, and internal processes — while MCP's role narrows to essential remote connectivity (external APIs, SaaS services, cloud databases). Tool Search for MCP is a patch, not a fix, for its core design limitation. The decision framework for developers involves three questions: 1) Who is the user? (Internal team -> Skills; External users -> MCP). 2) What is the distribution method? (File copy -> Skills; URL access -> MCP). 3) What problem is being solved? (Encode knowledge/workflow -> Skills; Connect to external service -> MCP). The best practice is to use Skills for domain knowledge and MCP for external connections, working in tandem.

一句话解释 MCP 和 Skills 的区别:如果 AI Agent 是操作系统,MCP 就是 USB 协议,Skills 就是应用程序。

一位开发者的困惑

有位网友私信问我:"MCP 是不是已经过时了?现在应该全用 Skills?"

这个问题可能很多人都好奇。我理解这种焦虑。AI Agent 工具圈每隔两周就会冒出新东西,每次新东西出来,就有人喊旧的"已死"。

对于喜欢 Skills 的人可能会想:我写个脚本自己用,干嘛搞那么复杂?我就是要编码一下我的工作流程,让 AI 能理解我们团队的做事方式,Skills 写起来简单,放个文件就行,何必折腾 MCP Server?

喜欢 MCP 的人则会认为:我要做一个服务,让所有人都能用,不只是我自己,不只是我团队。我要让用户输入一个 URL 就能用,甚至未来什么都不用装,直接问 AI"帮我订机票"就行。

仔细看其实这两拨人的需求完全不一样。不是功能差异,是分发方式的差异。Skills 是给自己人用的,MCP 是给全世界用的。

想象你是一家卖服务的公司。你服务的安装说明怎么写?如果你是以 Skills 的方式发布,说明就要说清楚"把 SKILL.md 文件复制到特定目录",可能还需要特定脚本的运行权限,用户都不一定敢安装。但如果是"输入这个 URL"或者"直接跟 AI 说帮我用这个服务",也不需要你在本机安装个 nodejs/python,那就好多了。

但光理解定位还不够。这两个东西在技术层面有本质区别,直接影响你的使用体验和成本。

MCP:AI 世界的 USB 协议

还记得十年前的充电线吗?苹果用 Lightning,安卓用 Micro USB,笔记本用各种奇形怪状的电源头。出门一趟,包里塞满五六根线。

AI 行业在 2024 年之前也是这样。

你想让 Agent 读取 GitHub 仓库?写一套对接代码。想让 ChatGPT 查数据库?再写一套。想让 Cursor 发 Slack 消息?又是一套。10 个 AI 应用要连 20 个工具,理论上需要 200 个定制集成。每家都在重复造轮子,开发者苦不堪言。

2024 年 11 月,Anthropic 开源了 MCP(Model Context Protocol,模型上下文协议)。它做的事情,和 USB-C 统一充电接口一模一样:定义一套标准协议,让任何 AI 都能即插即用地连接任何工具。

有了 MCP,10 个 AI 应用 + 20 个工具 = 30 个 MCP 实现,而不是 200 个定制集成。数学上叫把 M×N 问题变成了 M+N 问题,实践中意味着开发成本断崖式下降。

MCP 的致命问题:上下文爆炸

但 MCP 有一个严重的副作用:吃掉你的上下文窗口。

每个 MCP Server 连接到 AI 时,必须把所有工具的定义(名称、描述、参数、示例)一次性塞进上下文。一个工具的定义大概 500-800 tokens,一个 MCP Server 通常有 10-20 个工具。

来看几个真实数据:

GitHub MCP Server:27 个工具,消耗约 18,000 tokens

Playwright MCP Server:21 个工具,消耗约 13,600 tokens

mcp-omnisearch:20 个工具,消耗约 14,200 tokens

有开发者配了 7 个 MCP Server,还没开始对话,上下文就被吃掉了 67,000 tokens——占 AI 上下文窗口的 33%。更夸张的案例是 82,000 tokens,占 41%。

这意味着什么?你问 AI"2+2 等于几",它回答"4"只需要 5 个 token,但工具定义已经消耗了 15,000 tokens。简单问题的成本被放大了 3000 倍。

更糟糕的是,当上下文被工具定义挤占后,AI 选错工具、传错参数的概率会显著上升。实践中,连接 2-3 个以上的 MCP Server,工具使用准确性就会明显下降。

Claude Code 的解法:Tool Search

Anthropic 意识到了这个问题。2025 年 1 月,Claude Code 推出了 Tool Search 功能:

MCP 工具不再预加载,而是按需发现

当工具定义超过上下文的 10% 时自动启用

AI 需要用某个工具时,先搜索再加载

效果立竿见影:从 77,000 tokens 降到 8,700 tokens,减少 85%。

但这只是在给 MCP 打补丁。问题的根源在于:MCP 的设计假设是"把所有工具摆出来让 AI 挑",这在工具数量少的时候没问题,工具多了就撑不住。

Skills:渐进式披露的操作手册

Skills 从一开始就采用了不同的设计哲学:渐进式披露(Progressive Disclosure)。

怎么理解呢?

想象你招了个新员工。传统做法是入职第一天把公司所有流程文档、规章制度、操作手册全部打印出来堆在他桌上,这就是 MCP 的做法。而 Skills 的做法是:先给一份简短的岗位说明,等他遇到具体问题时,再告诉他去翻哪本手册的哪一页。

技术上,Skills 是这样实现的:

第一层:元数据(启动时加载)

只有名称和简短描述

每个 Skill 约 100 tokens

装 100 个 Skill 也只占 10,000 tokens

第二层:完整指令(相关时加载)

当 AI 判断某个 Skill 与任务相关时,才读取完整的 SKILL.md

建议控制在 5,000 tokens 以内

第三层:参考资料(需要时加载)

详细的技术文档、API 说明、示例代码

按需读取,用多少加载多少

理论上可以包含无限内容

这意味着:一个 Skill 可以打包整套 API 文档、完整的数据字典、几百页的参考手册,但只要任务不需要,这些内容就永远不会占用上下文。

Skills 的杀手锏:自带脚本

Skills 还有一个很多人忽略的能力:它可以自带可执行脚本。

一个典型的 Skill 文件夹结构是这样的:

my-skill/
├── SKILL.md # 核心指令
├── scripts/ # 可执行脚本
│ ├── validate.py
│ ├── generate.sh
│ └── process.js
├── references/ # 参考文档
└── assets/ # 模板、配置文件

关键来了:当 AI 运行 scripts/validate.py 时,脚本代码本身不会加载到上下文,只有执行结果会返回。

这是什么概念?

假设你有一个 500 行的 Python 脚本,用来处理 PDF 表单。用传统方式,AI 要么自己写代码(消耗大量 tokens 生成),要么读取你的脚本再执行(脚本内容占用上下文)。而用 Skills,AI 直接运行预写好的脚本,整个过程可能只消耗 50 tokens 的输出结果。

脚本执行 = 零上下文成本 + 确定性结果

更重要的是:这些脚本通过 Agent 内置的 bash 工具执行,不需要 MCP。

Skills 支持的脚本语言包括 Python、Bash、JavaScript 等,基本上你系统能跑的都能用。这意味着:

文件读写?Skill 脚本搞定

数据处理?Skill 脚本搞定

格式转换?Skill 脚本搞定

本地 API 调用?Skill 脚本搞定

MCP vs Skills:什么时候需要什么?

现在我们可以重新审视这两个概念的定位了。

| | MCP | Skills |

|---|---|---|

| 类比 | USB 协议 | 应用程序 |

| 核心能力 | 连接外部系统 | 编码专业知识 |

| 工具来源 | 外部 MCP Server | 内置工具 + 自带脚本 |

| 上下文消耗 | 预加载,成本高 | 渐进式披露,按需加载 |

| 网络访问 | ✅ 支持 | ❌ 仅本地执行 |

| 分发方式 | URL 接入,面向外部用户 | 文件复制,面向内部团队 |

| 适用场景 | 远程 API、实时数据、对外服务 | 本地流程、专业方法论、内部工具 |

有一句话说得很精辟:

Skills 描述工作流程,MCP 提供执行引擎。但很多时候,操作系统自带的引擎就够用了。

这就像 GitHub Actions:工作流文件(相当于 Skills)定义了构建、测试、部署的步骤,但实际执行的还是 bash 命令。YAML 就像菜谱,写清楚先放油、再下葱、最后翻炒,但菜谱本身不会做菜,真正掌勺的是厨师。

问题是:Agent 这个"操作系统"本身就自带了 bash、read、write 等基础工具。对于大量本地任务,Skills + 内置工具就能完成,根本不需要额外的 MCP Server。

还有个类比我觉得很贴切:Skills 像 Slack 里的斜杠指令(slash commands)。你公司 Slack 里可能有几十个 slash commands,大部分你从来没用过,但对特定的人特定的场景很有用。这就是 Skills 的定位:内部工具,按需使用。

但你不可能把 slash commands 卖给外部用户。要对外,得用 MCP。

随着 Skills 普及,MCP 的需求会大幅减少

这是一个正在发生的趋势。

想想看,什么时候你真正需要 MCP?

需要 MCP 的场景:

连接远程 CRM 系统获取客户数据

调用第三方 SaaS API(Slack、Notion、Jira)

查询云端数据库

访问需要认证的外部服务

做一个服务让外部用户都能用

不需要 MCP 的场景:

读写本地文件 → bash + Skill 脚本

处理 PDF/Word/Excel → Skill 脚本

运行代码分析 → Skill 脚本

执行 Git 操作 → Skill 脚本

生成图表和可视化 → Skill 脚本

优化自己或团队的工作流

事实上,Anthropic 的工程博客提到:他们用"代码执行 + MCP"的方法,把一个 150,000 token 的工作流压缩到了 2,000 tokens——核心思路就是让 AI 写代码调用工具,而不是预加载所有工具定义。

这正是 Skills 的设计方向:用脚本封装能力,用渐进式披露管理知识,最大限度减少上下文消耗。

未来的格局可能是这样的:

少数通用 MCP Server 处理远程连接(数据库、云 API、SaaS 集成)

大量 Skills 编码专业知识和本地工作流

两者在必要时协作,但 Skills 会承担绝大部分"教 AI 怎么做事"的工作

一个真实案例:自动发布 X Article

这是一个真实发生的演进过程,完美展示了从 MCP 到 Skills 的转变。

需求: 把 Markdown 文章自动发布到 X(Twitter)的长文功能 X Article。

方案一:Playwright MCP

王树义老师(@wshuyi )开发了 x-article-publisher-skill,流程是这样的:

Markdown 文件

Python 脚本解析(提取标题、图片位置、HTML)

Playwright MCP 操作浏览器

X Articles 编辑器(自动化填充)

保存草稿

提示词很简洁,功能也很强大。但问题来了:上下文消耗得飞快。

Playwright MCP 有 22 个工具,光工具定义就占用约 8,000-10,000 tokens。更要命的是,每次浏览器交互,MCP 都要返回页面的 accessibility tree(无障碍树)快照——这是为了让 AI 理解当前页面状态。一个复杂页面的快照可能就是几千 tokens。

发布一篇文章,可能需要:打开页面、等待加载、点击编辑器、粘贴内容、上传图片、调整位置、保存草稿……每一步都是一次 MCP 交互,每一次交互都在消耗上下文。

结果:一篇文章发完,上下文可能已经用掉 50,000+ tokens。

方案二:Skills + CDP 脚本(我的改进版本)

我把 Playwright MCP 部分完全改成了脚本,做成了 baoyu-post-to-x:

baoyu-post-to-x/
├── SKILL.md # 简短的使用说明
└── scripts/
└── x-article.ts # 核心脚本,使用 Chrome CDP

核心变化:

脚本直接调用 Chrome CDP(Chrome DevTools Protocol),绕过 MCP

传入 Markdown 文件路径,脚本自己解析内容

脚本自己完成所有浏览器操作:打开页面、填充内容、上传图片、保存草稿

只返回最终结果给 Agent:"发布成功,草稿链接:xxx"

整个过程,AI 只需要做一件事:调用脚本,传入文件路径。

上下文消耗:可能只有几百 tokens。

为什么差距这么大?

| | Playwright MCP | Skills + CDP 脚本 |

|---|---|---|

| 工具定义 | ~10,000 tokens(22 个工具) | 0(脚本不需要工具定义) |

| 每次交互 | 返回页面快照(数千 tokens) | 无中间交互 |

| AI 参与度 | 每一步都要 AI 决策 | 只需调用一次脚本 |

| 总消耗 | 50,000+ tokens | 几百 tokens |

关键洞察:MCP 的设计是让 AI 一步步操作,每一步都要理解、决策、执行。而脚本的设计是把整个流程封装起来,AI 只需要说"开始"和"结束"。

这就是为什么即使 MCP 支持了 Tool Search(按需加载工具),上下文问题也没有根本解决——因为工具定义只是一部分,真正的大头是交互过程中产生的中间结果。

而 Skills 的脚本执行模式,天然避开了这个问题:脚本代码不进入上下文,中间过程不进入上下文,只有最终结果进入上下文。

写在最后:回到那个私信

所以我给那位读者的回复是这样的:

MCP 没死。Skills 也很有用。它们解决的是不同问题。

MCP 是 USB 协议,定义了 AI 与外部世界的连接标准;Skills 是应用程序,把专业知识和工作流程打包成 AI 能理解的操作手册。

Skills 的两大杀手锏——渐进式披露和脚本执行——让它能独立完成大量任务,不依赖 MCP。

渐进式披露解决了"知识太多"的问题:AI 不需要一次性加载所有信息,用到什么加载什么。

脚本执行解决了"交互太多"的问题:复杂流程封装成脚本,AI 只需要一次调用,中间过程不占用上下文。

到底怎么选?问自己三个问题:

谁来用? 如果只有你自己或者团队内部用,Skills 就够了。如果要给外部用户或客户用,MCP 是必选项。

怎么分发? 如果可以接受"把文件放到某个目录"这种安装方式,用 Skills。如果希望用户输入 URL 就能用,用 MCP。

要解决什么问题? 如果是编码领域知识、定义工作流程,Skills 更友好。如果是连接外部服务、对外暴露 API,MCP 才能做到。

最佳实践是两者配合使用:用 Skills 编码你的领域知识,用 MCP 连接外部服务。 比如你们公司有一套特定的工作流程,先查这个系统,再查那个系统,按某个顺序处理。这种领域知识用 Skills 写出来,让 AI 理解。但具体连接那些系统的能力,靠 MCP 提供。两层配合,各司其职。

随着 Skills 生态成熟,MCP 的角色会收窄到"远程连接"这个核心场景——需要实时访问外部 API、需要认证的 SaaS 服务、需要跨网络的数据库连接。而本地文件操作、浏览器自动化、数据处理这些任务,Skills + 内置工具就能搞定,而且效率更高。

对于开发者:优先用 Skills 封装工作流程,复杂逻辑用脚本而非让 AI 一步步操作,只在必须连接远程系统时才用 MCP。

Skills 和 MCP 不是竞争关系,而是不同层次的能力。但如果你只能选一个先学,选 Skills。它更轻量、更高效、更容易上手,能解决日常遇到的大部分问题。