AI 编辑器扩展机制详解:MCP、Rule、Skills
本文系统性地介绍 AI 编辑器的三大扩展机制,帮助开发者理解如何通过这些机制扩展 AI 能力、规范 AI 行为、封装 AI 技能。
目录
概述
现代 AI 编辑器(如 Cursor、GitHub Copilot、Codebuddy 等)不仅是代码补全工具,更是一个可扩展的智能开发平台。通过三大扩展机制,开发者可以:
| 机制 |
作用 |
类比 |
| MCP |
让 AI 能连接外部系统 |
给 AI 装"手脚" |
| Rule |
让 AI 按规范工作 |
给 AI 立"规矩" |
| Skills |
让 AI 拥有专业能力 |
给 AI 教"本事" |
复制代码
┌─────────────────────────────────────────────────────────────┐
│ AI 编辑器扩展生态 │
├─────────────────┬─────────────────┬─────────────────────────┤
│ MCP │ Rule │ Skills │
│ 外部工具连接 │ 行为约束规则 │ 能力技能包 │
│ (执行层) │ (约束层) │ (能力层) │
└─────────────────┴─────────────────┴─────────────────────────┘
一、MCP - 工具连接协议
1.1 什么是 MCP?
MCP (Model Context Protocol) 是一个开放协议,让 AI 助手能够直接调用外部工具和数据源。
1.2 核心价值
在没有 MCP 之前:
复制代码
用户 → AI → "帮我获取测试用例"
↓
AI 只能说:请运行命令 `npx ts-node index.ts fetch`
↓
用户手动执行命令
↓
用户把结果粘贴给 AI
↓
AI 分析结果
有了 MCP 之后:
复制代码
用户 → AI → "帮我获取测试用例"
↓
AI 直接调用 MCP 工具 fetch_test_cases()
↓
MCP Server 执行操作,返回结构化数据
↓
AI 直接拿到结果,继续处理
1.3 架构图
复制代码
┌─────────────┐ MCP 协议 ┌─────────────┐
│ AI 编辑器 │ ←──────────────→ │ MCP Server │
│ (Cursor等) │ JSON-RPC 通信 │ (你的工具) │
└─────────────┘ └─────────────┘
│ │
│ 调用工具 │ 执行操作
↓ ↓
"fetch_test_cases" 读取文件/调用API
│
↓
返回结果
1.4 核心组件
| 组件 |
作用 |
示例 |
| MCP Server |
提供工具的服务端 |
自定义的工具服务 |
| MCP Client |
AI 编辑器内置的客户端 |
Cursor、Copilot 等 |
| Tool |
具体的功能单元 |
fetch_test_cases、read_file |
| Resource |
可访问的数据源 |
文件、数据库、API |
1.5 代码示例
MCP Server 定义工具:
typescript
复制代码
// mcp-server.ts
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: 'fetch_test_cases',
description: '从后端接口获取测试用例',
inputSchema: {
type: 'object',
properties: {
use_mock: { type: 'boolean' }
}
}
}
]
}
})
AI 直接调用:
javascript
复制代码
// AI 自动调用,无需用户干预
fetch_test_cases({ use_mock: true })
// 返回结构化数据
{
"success": true,
"data": [...],
"total": 5
}
1.6 常见 MCP 工具
| 工具类别 |
示例工具 |
用途 |
| 文件操作 |
read_file, write_file |
读写文件 |
| 代码执行 |
execute_command |
执行命令 |
| 数据库 |
query_database |
查询数据库 |
| API 调用 |
fetch_api |
调用外部 API |
| 版本控制 |
git_status, git_commit |
Git 操作 |
二、Rule - 行为约束规则
2.1 什么是 Rule?
Rule 是约束 AI 行为的规则,让 AI 按特定方式和规范工作。
2.2 核心价值
复制代码
用户请求 ──→ AI 检查 Rule ──→ 按 Rule 约束执行
↓
"必须先写测试"
"代码风格要符合 xxx"
"禁止使用某些 API"
2.3 Rule 类型
| 类型 |
触发方式 |
说明 |
| always |
始终生效 |
全局约束,每次交互都生效 |
| manual |
手动触发 |
用户明确要求时才生效 |
| requested |
按需调用 |
AI 根据上下文决定是否应用 |
2.4 Rule 示例
markdown
复制代码
# 编码规范 Rule
## 代码风格
- 所有函数必须有 JSDoc 注释
- 禁止使用 any 类型
- 变量命名使用 camelCase
- 常量使用 UPPER_SNAKE_CASE
## 安全规则
- 禁止硬编码密钥和敏感信息
- SQL 查询必须参数化
- 用户输入必须校验和转义
## 工作流规则
- 修改代码前先写测试
- 提交前检查 lint 错误
- 重要修改需要代码审查
## 禁止事项
- 不要删除现有注释
- 不要修改 .env 文件
- 不要直接修改 node_modules
2.5 Rule 文件结构
复制代码
项目根目录/
├── .cursor/
│ └── rules/ # Cursor 规则目录
│ ├── coding.md # 编码规范
│ ├── security.md # 安全规范
│ └── workflow.md # 工作流规范
├── .github/
│ └── copilot-instructions.md # GitHub Copilot 规则
└── .codebuddy/
└── rules/ # Codebuddy 规则目录
2.6 Rule 作用范围
| 范围 |
说明 |
示例 |
| 用户级 |
对所有项目生效 |
个人编码偏好 |
| 项目级 |
只对当前项目生效 |
项目代码规范 |
| 文件级 |
只对特定文件生效 |
组件开发规范 |
三、Skills - 能力技能包
3.1 什么是 Skills?
Skills 是封装好的能力包,包含 Prompt 模板、工具调用和领域知识,让 AI 拥有特定领域的专业能力。
3.2 核心价值
复制代码
用户请求 ──→ AI 加载 Skill ──→ 使用 Skill 中的能力处理
↓
Prompt 模板
工具调用
领域知识
3.3 Skills 组成要素
| 要素 |
说明 |
示例 |
| Prompt 模板 |
预定义的指令模板 |
代码审查清单、设计模板 |
| 工具调用 |
自动调用的工具 |
lint、test、format |
| 领域知识 |
专业领域的知识 |
最佳实践、常见问题 |
| 输出格式 |
标准化的输出结构 |
Markdown、JSON |
3.4 Skills 示例
markdown
复制代码
# Skill: code-review
## 触发条件
用户说"帮我审查代码"或"review this code"时激活
## 执行步骤
1. 读取目标代码文件
2. 执行 lint 检查
3. 执行单元测试
4. 按清单逐项审查:
- 代码风格
- 安全问题
- 性能问题
- 可维护性
5. 输出分级报告
## 审查清单
### 安全性
- [ ] 无 SQL 注入风险
- [ ] 无 XSS 漏洞
- [ ] 敏感数据已脱敏
### 性能
- [ ] 无 N+1 查询
- [ ] 无内存泄漏风险
- [ ] 算法复杂度合理
### 可维护性
- [ ] 函数职责单一
- [ ] 命名语义清晰
- [ ] 注释恰当
## 输出格式
### Blocker(必须修复)
- 问题 1:描述 + 位置 + 修复建议
### Major(重要问题)
- 问题 1:描述 + 位置 + 修复建议
### Minor(小问题)
- 问题 1:描述 + 位置 + 修复建议
3.5 常见 Skills 类型
| 类型 |
说明 |
示例 Skill |
| 开发类 |
代码开发相关 |
组件生成、API 设计 |
| 质量类 |
代码质量保障 |
代码审查、故障排查 |
| 文档类 |
文档编写相关 |
API 文档、README 生成 |
| 流程类 |
开发流程相关 |
Git 工作流、CI/CD 配置 |
| 分析类 |
代码分析相关 |
性能分析、依赖分析 |
四、三者关系与协作
4.1 协作流程图
复制代码
┌──────────────────────────────────────────────────────────────┐
│ 用户请求 │
│ "帮我审查这段代码" │
└─────────────────────────┬────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ Rule (约束层) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ • "审查时必须检查安全问题" │ │
│ │ • "输出必须按 Blocker/Major/Minor 分级" │ │
│ │ • "每个问题必须包含位置和修复建议" │ │
│ └────────────────────────────────────────────────────────┘ │
└─────────────────────────┬────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ Skill (能力层) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 加载 code-review 技能包 │ │
│ │ • Prompt: 如何审查代码的指令 │ │
│ │ • 知识: 常见代码问题清单 │ │
│ │ • 步骤: 逐个检查点执行 │ │
│ └────────────────────────────────────────────────────────┘ │
└─────────────────────────┬────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ MCP (执行层) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 调用工具执行具体操作 │ │
│ │ • read_file: 读取代码文件 │ │
│ │ • read_lints: 获取 lint 错误 │ │
│ │ • execute_command: 执行测试 │ │
│ └────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ 输出结果 │
│ • Blocker: 1 个(SQL 注入风险) │
│ • Major: 2 个(缺少错误处理) │
│ • Minor: 3 个(命名不规范) │
└──────────────────────────────────────────────────────────────┘
4.2 职责划分
| 机制 |
职责 |
回答的问题 |
| Skill |
决定做什么 |
"要完成什么任务?" |
| Rule |
决定怎么做 |
"要遵循什么规范?" |
| MCP |
负责具体执行 |
"如何执行操作?" |
4.3 类比理解
| 机制 |
现实类比 |
AI 编辑器类比 |
| MCP |
程序员的电脑和工具 |
AI 操作外部系统的能力 |
| Rule |
公司的规章制度 |
AI 必须遵守的规范 |
| Skills |
程序员的专业技能 |
AI 的领域专业能力 |
4.4 配合示例
场景:开发一个 Vue 组件
复制代码
1. Skill: 加载 "Vue 组件开发" 技能包
- 获取组件模板
- 获取最佳实践
2. Rule: 应用项目规范
- 组件命名规范
- Props 定义规范
- 样式规范
3. MCP: 执行具体操作
- read_file: 读取现有组件
- write_file: 创建新组件
- execute_command: 运行 lint
五、实际应用场景
5.1 场景一:代码审查
| 步骤 |
使用机制 |
具体内容 |
| 1 |
Skill |
加载 code-review 技能包 |
| 2 |
Rule |
应用安全规范、代码风格规范 |
| 3 |
MCP |
调用 read_file、read_lints、execute_command |
5.2 场景二:API 开发
| 步骤 |
使用机制 |
具体内容 |
| 1 |
Skill |
加载 api-design 技能包 |
| 2 |
Rule |
应用 API 设计规范、安全规范 |
| 3 |
MCP |
调用 write_file、execute_command |
5.3 场景三:故障排查
| 步骤 |
使用机制 |
具体内容 |
| 1 |
Skill |
加载 debug 技能包 |
| 2 |
Rule |
应用排查流程规范 |
| 3 |
MCP |
调用 search_content、execute_command、read_file |
5.4 场景四:技术方案设计
| 步骤 |
使用机制 |
具体内容 |
| 1 |
Skill |
加载 system-design 技能包 |
| 2 |
Rule |
应用架构设计规范 |
| 3 |
MCP |
调用 search_content、read_file、write_file |
六、最佳实践
6.1 MCP 最佳实践
| 实践 |
说明 |
| 工具单一职责 |
每个工具只做一件事 |
| 明确输入输出 |
使用 TypeScript 定义清晰的类型 |
| 错误处理 |
所有工具都应有完善的错误处理 |
| 文档完善 |
每个工具都应有清晰的描述和使用说明 |
| 安全控制 |
敏感操作需要用户确认 |
6.2 Rule 最佳实践
| 实践 |
说明 |
| 分类管理 |
按类型(编码、安全、流程)分类存放 |
| 简洁明确 |
规则表述要清晰,避免歧义 |
| 适度约束 |
不要过度约束,保留灵活性 |
| 版本控制 |
Rule 文件应纳入 Git 版本控制 |
| 团队共识 |
Rule 应是团队共同认可的规范 |
6.3 Skills 最佳实践
| 实践 |
说明 |
| 场景明确 |
每个 Skill 针对明确的场景 |
| 步骤清晰 |
执行步骤应清晰可循 |
| 输出标准 |
输出格式应标准化 |
| 可复用 |
设计时应考虑复用性 |
| 持续优化 |
根据使用反馈持续改进 |
6.4 组合使用最佳实践
复制代码
┌─────────────────────────────────────────────────────────────┐
│ 推荐的组合策略 │
├─────────────────────────────────────────────────────────────┤
│ 1. 先定义 Rule,建立规范基础 │
│ 2. 再封装 Skills,沉淀团队能力 │
│ 3. 最后开发 MCP,连接必要系统 │
│ 4. 三者配合,形成完整的 AI 辅助开发体系 │
└─────────────────────────────────────────────────────────────┘
七、总结
7.1 一句话总结
| 机制 |
一句话 |
| MCP |
给 AI 装"手脚",让它能操作外部系统 |
| Rule |
给 AI 立"规矩",让它按规范工作 |
| Skills |
给 AI 教"本事",让它拥有专业能力 |
7.2 协作关系
复制代码
Skill 决定做什么 → Rule 决定怎么做 → MCP 负责具体执行
7.3 价值体现
| 机制 |
价值 |
| MCP |
扩展 AI 能力边界,让它能做更多事 |
| Rule |
规范 AI 行为,确保输出符合预期 |
| Skills |
封装团队能力,提升开发效率和一致性 |
7.4 未来展望
随着 AI 编辑器的发展,三大机制将更加成熟:
- MCP:更多标准化工具,更便捷的接入方式
- Rule:更智能的上下文感知,更灵活的约束机制
- Skills:更丰富的技能生态,更精准的场景匹配
掌握这三大机制,将帮助开发者更好地利用 AI 编辑器,提升开发效率和代码质量。
参考资料