AI 编程中的三大核心概念:Skills、Rules、MCP 到底有什么区别?
昨天我在配置 Cursor 的时候,突然意识到一个问题:我一直在用 Rules 和 Skills,也听说过 MCP,但真要我说清楚它们仨到底有什么区别、什么时候用哪个,我还真有点懵。
这让我想起上周帮一个朋友搭建 AI 编程环境时,他问我:"为什么有些东西要写在 Rules 里,有些要写成 Skills?还有那个 MCP 又是什么?"我当时只能含糊地说"看情况",但心里其实也没底。
所以今天咱们就来彻底搞清楚这三个概念。相信我,理解清楚之后,你在配置 AI 编程工具时会更有章法。
所以,到底什么是 Skills、Rules 和 MCP?
我最开始的理解是:它们都是让 AI 更"听话"的工具——这个理解对,但太笼统了。直到我把它们放在一起对比,才发现它们其实解决的是不同层面的问题。
Rules:AI 的"行为准则"
你可以把 Rules 想象成公司的员工手册。它定义了 AI 在写代码时应该遵循的基本原则和规范。
Rules 的本质:持久性的指令集,作用于系统提示词层面,告诉 AI "应该怎么做"。
比如,你可以写一个 Rule 说:
- "所有函数必须用驼峰命名法"
- "禁止删除用户添加的调试代码"
- "TypeScript 代码必须使用严格模式"
这些规则一旦设置,AI 在所有对话中都会遵循。它不会主动"做"什么,而是被动地"约束"AI 的行为。
存储位置:.cursor/rules/ 目录,文件格式是 .mdc(Markdown with frontmatter)
应用方式:
- 总是应用(Always Apply):所有对话都生效
- 自动附加(Auto Attached):AI 根据上下文判断
- 按文件模式(File-Specific):处理特定文件时生效
- 手动触发(Manual):用
@符号手动调用
Skills:AI 的"专业技能包"
Skills 更像是给 AI 安装的"专业插件"。它不是约束行为,而是扩展能力。
Skills 的本质:可移植的知识包,为 AI 提供特定领域的专业能力,遵循开放标准(agentskills.io)。
比如,你可以创建一个"API 测试专家"的 Skill,里面包含:
- 如何分析 API 端点
- 如何生成测试用例
- 如何执行测试并验证结果
当 AI 遇到 API 测试相关的任务时,它会自动"想起"这个 Skill,然后按照 Skill 里定义的工作流程来执行。
存储位置:.cursor/skills/<skill-name>/SKILL.md
关键特点:
- 🌐 跨平台:遵循开放标准,可以在不同 AI 工具间共享
- 🎯 专业能力:封装特定领域的专业知识和工作流
- 🤔 智能触发:AI 可以判断何时需要某个技能
MCP:AI 的"外部世界接口"
MCP(Model Context Protocol)是 Anthropic 发布的开放标准,它解决的是"AI 如何与外部系统交互"的问题。
MCP 的本质:标准化的协议,让 AI 能够安全地访问外部数据源、调用外部工具和函数。
你可以把 MCP 想象成 AI 的"USB-C 接口"。就像你的手机通过 USB-C 可以连接各种外设一样,AI 通过 MCP 可以连接:
- 数据库(查询数据)
- 文件系统(读写文件)
- API 服务(调用外部接口)
- 开发工具(IDE 插件、代码分析工具)
架构组成:
- MCP Server:提供工具、资源和提示信息的服务器
- MCP Client:在主机内,与服务器保持连接的协议客户端
- MCP Host:发起请求的 LLM 应用程序(如 Cursor、Claude Desktop)
通信方式:基于 JSON-RPC 2.0 协议,通过 stdio 或 HTTP 进行通信
为了更直观,我把它们的差异整理了一下
| 维度 | Rules | Skills | MCP |
|---|---|---|---|
| 本质 | 行为约束和规范 | 专业能力扩展 | 外部系统接口 |
| 作用层面 | 系统提示词层面 | 知识和工作流层面 | 协议和工具层面 |
| 主要功能 | 告诉 AI "应该怎么做" | 告诉 AI "能做什么" | 让 AI "连接外部世界" |
| 触发方式 | 自动/手动/按文件 | AI 智能判断或手动 | 通过工具调用 |
| 存储位置 | .cursor/rules/*.mdc | .cursor/skills/*/SKILL.md | MCP Server(独立进程) |
| 可移植性 | 项目特定 | 跨平台标准 | 跨平台标准 |
| 典型场景 | 代码风格、命名规范 | API 测试、数据库设计 | 数据库查询、文件操作 |
| 类比 | 员工手册 | 专业技能培训 | USB-C 接口 |
看完这个表你就明白了:它们三个其实是在不同层面解决问题。
- Rules 解决的是"一致性"问题:确保 AI 的行为符合你的项目规范
- Skills 解决的是"专业性"问题:让 AI 具备特定领域的知识和能力
- MCP 解决的是"连接性"问题:让 AI 能够访问和使用外部系统和工具
那它们为什么会出现?
这个问题很有意思。让我从实际场景来还原一下它们诞生的逻辑。
Rules 的诞生:解决"每次都要说一遍"的问题
你有没有遇到过这种情况:每次和 AI 对话,你都要重复说"用 TypeScript 严格模式"、"函数要有注释"、"不要删除我的调试代码"?
Rules 就是为了解决这个问题。它让你把这些规范写一次,然后 AI 在所有对话中都会遵循。
问题场景:
你:帮我写个函数
AI:[生成代码,但用了 any 类型]
你:不对,要用严格模式,不能用 any
AI:[重新生成]
你:还要加注释
AI:[再次生成]
...有了 Rules 之后:
你:帮我写个函数
AI:[自动遵循 Rules,生成符合规范的代码]Skills 的诞生:解决"重复解释专业知识"的问题
假设你要让 AI 帮你做 API 测试。每次你都要解释:
- 如何分析 API 端点
- 如何设计测试用例
- 如何验证响应结果
Skills 让你把这些专业知识封装成一个"技能包",AI 遇到相关任务时自动使用。
问题场景:
你:帮我测试这个 API
AI:我需要了解你的测试需求...
你:[解释 API 测试的流程和方法]
AI:[开始测试]有了 Skills 之后:
你:帮我测试这个 API
AI:[自动应用 API 测试 Skill,按照专业流程执行]MCP 的诞生:解决"AI 无法访问外部系统"的问题
AI 模型本身是"封闭"的,它只能基于训练数据生成文本。但实际开发中,我们经常需要:
- 查询数据库
- 读取文件
- 调用 API
- 操作开发工具
MCP 提供了一个标准化的协议,让 AI 能够安全、统一地访问这些外部系统。
问题场景:
你:帮我查询数据库中的用户数据
AI:我无法直接访问数据库,你需要先...
你:[手动查询,然后把结果告诉 AI]
AI:[基于你提供的数据进行分析]有了 MCP 之后:
你:帮我查询数据库中的用户数据
AI:[通过 MCP 直接查询数据库,获取数据并分析]具体怎么用?我总结了一套实践框架
Rules 的使用:从项目规范开始
第一步:识别重复的约束
问问自己:我在和 AI 对话时,哪些要求我经常重复说?这些就是 Rules 的候选。
第二步:按主题分类
不要把所有规则写在一个文件里,按主题分类:
code-style.mdc:代码风格security.mdc:安全规范testing.mdc:测试要求
第三步:配置应用模式
---
description: TypeScript 代码风格和规范
globs: ["**/*.ts", "**/*.tsx"]
alwaysApply: false
---
# TypeScript 代码风格规范
- 始终使用 TypeScript 严格模式
- 函数命名使用驼峰命名法
- 每个函数必须有 JSDoc 注释
- 禁止删除用户添加的调试代码避坑指南:
- ❌ 不要写太模糊的规则:"写好的代码"(AI 不知道什么是"好")
- ✅ 写具体可执行的规则:"函数命名使用动词开头"
- ❌ 不要在一个文件里写太多规则(难以维护)
- ✅ 每个文件专注一个主题
Skills 的使用:封装专业工作流
第一步:识别可复用的专业能力
问问自己:哪些专业领域的知识和工作流,我需要在多个项目中复用?
第二步:定义工作流程
Skills 不是简单的知识库,而是包含完整工作流程的"操作手册":
---
name: api-testing-agent
description: API 测试专家,能够生成测试用例和执行 API 测试
---
你是一个 API 测试专家...
## 工作流程
1. 分析 API 端点
2. 生成测试用例
3. 执行测试并验证结果第三步:确保跨项目可复用
Skills 遵循 agentskills.io 标准,这意味着你可以在不同项目、不同 AI 工具间共享。
避坑指南:
- ❌ 不要把项目特定的规则写成 Skills(应该用 Rules)
- ✅ Skills 应该封装通用的专业能力
- ❌ 不要写太简单的 Skills(应该用 Commands)
- ✅ Skills 应该包含完整的工作流程和专业知识
MCP 的使用:连接外部系统
第一步:确定需要连接的外部系统
问问自己:AI 需要访问哪些外部系统?数据库?文件系统?API?
第二步:创建 MCP Server
以 Python 为例,使用 FastMCP 框架:
from mcp.server.fastmcp import FastMCP
# 创建 MCP 服务器实例
mcp = FastMCP("MyServer")
# 定义工具函数
@mcp.tool()
def query_database(query: str) -> str:
"""执行数据库查询"""
# 实际的数据库查询逻辑
return result
# 运行服务器
if __name__ == "__main__":
mcp.run()第三步:配置客户端连接
在 Cursor 或其他 MCP 客户端的配置文件中添加:
{
"mcpServers": {
"my-database-server": {
"command": "python",
"args": ["/path/to/mcp_server.py"]
}
}
}避坑指南:
- ❌ 不要把所有功能都放在一个 MCP Server 里(难以维护)
- ✅ 按功能模块拆分不同的 MCP Server
- ❌ 不要忽略安全性(MCP Server 可以访问敏感数据)
- ✅ 实现适当的权限控制和审计日志
它们如何协同工作?
在实际使用中,这三个概念往往是协同工作的:
用户请求:"帮我重构这个函数,让它更易读"
1. Rules 生效:
- 保持代码功能不变(安全规则)
- 遵循项目命名规范(代码风格规则)
- 添加必要的注释(文档规则)
2. AI 判断需要:
- Skill: refactoring-skill(重构专业技能)
- MCP Tool: code-analysis(如果需要分析代码复杂度)
3. 执行流程:
- 应用重构技能(Skill)
- 遵循项目规则(Rules)
- 调用代码分析工具(MCP)
- 生成重构后的代码层次关系:
- Rules 是最底层,定义基本行为准则
- Skills 是中间层,提供专业能力
- MCP 是扩展层,连接外部系统
它们不是竞争关系,而是互补关系。
选择指南:什么时候用哪个?
| 需求类型 | 推荐方案 | 原因 |
|---|---|---|
| 代码风格规范 | Rules | 需要持久性约束 |
| 命名规范 | Rules | 项目特定的规范 |
| API 测试工作流 | Skills | 专业领域知识,可复用 |
| 数据库设计 | Skills | 专业能力,跨项目可用 |
| 查询数据库 | MCP | 需要访问外部系统 |
| 读取文件 | MCP | 需要文件系统访问 |
| 调用外部 API | MCP | 需要网络访问 |
| 项目特定约束 | Rules | 项目特定的规则 |
快速判断方法:
- 需要约束行为?→ Rules
- 需要扩展能力?→ Skills
- 需要连接外部?→ MCP
聊完现在,再看看未来
这三个概念其实代表了 AI 编程工具的三个发展方向:
Rules 的演进:更加智能和上下文感知
- 未来可能会根据代码上下文自动调整规则
- 支持更精细的控制粒度
Skills 的演进:形成更丰富的生态系统
- 可能会出现 Skills 市场,像 npm 包一样共享和分发
- 更好的跨平台兼容性
MCP 的演进:更强大的集成能力
- 支持更多类型的工具和资源
- 更好的安全性和权限控制
- 更高效的通信协议
思维模型升华:从技术到认知框架
从这三个概念中,我们可以提炼出一个可迁移的认知框架:
任何 AI 系统的设计都可以从三个维度思考:
- 约束层:如何确保 AI 的行为符合预期?(Rules)
- 能力层:如何扩展 AI 的专业能力?(Skills)
- 连接层:如何让 AI 与外部世界交互?(MCP)
这个框架不仅适用于 Cursor,也适用于其他 AI 编程工具,甚至可以用来思考如何设计自己的 AI 应用。
好了,关于这三个概念我目前的理解大概就是这些
说实话,我现在主要还是用 Rules 来规范代码风格,用 Skills 来处理一些专业领域的工作流(比如技术文章写作),MCP 用得还不多——主要是连接数据库和文件系统。
你们呢?如果用过的朋友,有没有更大胆的用法可以分享一下?比如用 MCP 连接了什么有趣的外部系统,或者创建了什么特别有用的 Skills?
我自己搭建第一个 MCP Server 时,是从这个示例项目开始的:https://github.com/modelcontextprotocol/servers。如果你刚好需要可以参考一下。
你最近在 AI 编程中遇到最有趣的挑战是什么?
