Skip to content

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 进行通信

为了更直观,我把它们的差异整理了一下

维度RulesSkillsMCP
本质行为约束和规范专业能力扩展外部系统接口
作用层面系统提示词层面知识和工作流层面协议和工具层面
主要功能告诉 AI "应该怎么做"告诉 AI "能做什么"让 AI "连接外部世界"
触发方式自动/手动/按文件AI 智能判断或手动通过工具调用
存储位置.cursor/rules/*.mdc.cursor/skills/*/SKILL.mdMCP 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:测试要求

第三步:配置应用模式

yaml
---
description: TypeScript 代码风格和规范
globs: ["**/*.ts", "**/*.tsx"]
alwaysApply: false
---
# TypeScript 代码风格规范

- 始终使用 TypeScript 严格模式
- 函数命名使用驼峰命名法
- 每个函数必须有 JSDoc 注释
- 禁止删除用户添加的调试代码

避坑指南

  • ❌ 不要写太模糊的规则:"写好的代码"(AI 不知道什么是"好")
  • ✅ 写具体可执行的规则:"函数命名使用动词开头"
  • ❌ 不要在一个文件里写太多规则(难以维护)
  • ✅ 每个文件专注一个主题

Skills 的使用:封装专业工作流

第一步:识别可复用的专业能力

问问自己:哪些专业领域的知识和工作流,我需要在多个项目中复用?

第二步:定义工作流程

Skills 不是简单的知识库,而是包含完整工作流程的"操作手册":

markdown
---
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 框架:

python
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 客户端的配置文件中添加:

json
{
  "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需要文件系统访问
调用外部 APIMCP需要网络访问
项目特定约束Rules项目特定的规则

快速判断方法

  • 需要约束行为?→ Rules
  • 需要扩展能力?→ Skills
  • 需要连接外部?→ MCP

聊完现在,再看看未来

这三个概念其实代表了 AI 编程工具的三个发展方向:

Rules 的演进:更加智能和上下文感知

  • 未来可能会根据代码上下文自动调整规则
  • 支持更精细的控制粒度

Skills 的演进:形成更丰富的生态系统

  • 可能会出现 Skills 市场,像 npm 包一样共享和分发
  • 更好的跨平台兼容性

MCP 的演进:更强大的集成能力

  • 支持更多类型的工具和资源
  • 更好的安全性和权限控制
  • 更高效的通信协议

思维模型升华:从技术到认知框架

从这三个概念中,我们可以提炼出一个可迁移的认知框架:

任何 AI 系统的设计都可以从三个维度思考

  1. 约束层:如何确保 AI 的行为符合预期?(Rules)
  2. 能力层:如何扩展 AI 的专业能力?(Skills)
  3. 连接层:如何让 AI 与外部世界交互?(MCP)

这个框架不仅适用于 Cursor,也适用于其他 AI 编程工具,甚至可以用来思考如何设计自己的 AI 应用。

好了,关于这三个概念我目前的理解大概就是这些

说实话,我现在主要还是用 Rules 来规范代码风格,用 Skills 来处理一些专业领域的工作流(比如技术文章写作),MCP 用得还不多——主要是连接数据库和文件系统。

你们呢?如果用过的朋友,有没有更大胆的用法可以分享一下?比如用 MCP 连接了什么有趣的外部系统,或者创建了什么特别有用的 Skills?

我自己搭建第一个 MCP Server 时,是从这个示例项目开始的:https://github.com/modelcontextprotocol/servers。如果你刚好需要可以参考一下。

你最近在 AI 编程中遇到最有趣的挑战是什么?


延伸阅读