在 AI Agent 生态高速发展的今天,MCP(Model Context Protocol)与 Agent Skill 已成为扩展 AI 能力的两大核心范式。但多数开发者在实际使用中容易混淆二者:明明想让 AI 访问外部数据库,却用了 Skill;想让 AI 遵循团队代码规范,却试图通过 MCP 实现。
二者看似都是“增强 AI 能力”,实则解决完全不同层面的问题——MCP 是 AI 连接外部世界的“通用接口”,Skill 是 AI 执行特定任务的“专业手册”。本文将从设计哲学、技术架构、实战场景、安全防护四个维度,深度解析二者的差异与协同逻辑,补充超详细的落地指南与扩展案例,帮你精准抉择使用场景。
一、核心定位:一句话读懂二者本质
在深入技术细节前,先建立核心认知:
- MCP 解决“连接权”问题:让 AI 突破自身数据与能力边界,安全访问外部系统(数据库、API、文件、第三方服务),相当于给 AI 装了“可扩展的双手”;
- Agent Skill 解决“方法论”问题:将特定任务的专业知识、操作流程、最佳实践封装成可复用的“知识包”,教 AI 如何高效完成任务,相当于给 AI 配了“行业专家手册”。
形象比喻:AI 要完成“分析公司上月销售数据并生成合规报告”的任务——MCP 帮 AI 连接公司的 PostgreSQL 数据库(拿到数据),Skill 教 AI 如何按财务规范筛选数据、计算指标、生成报告格式(处理数据)。
二、MCP 深度解析:AI 与外部世界的“通用协议”
1. 什么是 MCP?
MCP 是一套标准化的 AI 与外部系统交互协议,基于 JSON-RPC 2.0 构建,核心目标是打破 AI 应用与外部工具、数据源的“孤岛效应”。它就像 USB-C 接口——无论外部系统是数据库、代码仓库、监控工具,只要实现 MCP 协议,就能被支持 MCP 的 AI 应用(Claude、ChatGPT、Gemini 等)无缝调用。
2. 核心设计:三大原语与架构分层
MCP 通过“原语(Primitive)”定义 AI 与外部系统的交互方式,核心包含三类原语,覆盖“操作、数据、指令”全场景:
(1)三大核心原语(附扩展示例)
| 原语类型 | 核心作用 | 详细示例(JSON) | 适用场景 |
|---|---|---|---|
| Tools(工具) | AI 可主动调用的执行函数 | |
数据库查询、API 调用、文件操作、第三方服务交互(如创建 GitHub Issue) |
| Resources(资源) | 应用为 AI 提供的上下文数据 | ` | 文档解析、数据导入、配置文件加载(用户通过 @` 引用资源) |
|
| Prompts(提示) | 用户触发的结构化指令模板 | |
代码审查、文档生成、数据可视化等需要固定流程的任务(用户通过斜杠命令触发) |
(2)架构分层:Client-Host-Server 三元模型
MCP 的架构设计确保了“一次实现,多端复用”,核心分为三层:
- Host(宿主应用):用户直接交互的 AI 工具(如 Claude Code、Cursor、Windsurf),负责管理 MCP Client 与 AI 模型的通信;
- Client(客户端组件):嵌入 Host 中的轻量组件,负责与特定 MCP Server 建立连接、发送请求、解析响应,屏蔽协议细节;
- Server(服务端桥梁):对接外部系统的适配层(如 PostgreSQL MCP Server、GitHub MCP Server),实现 MCP 协议与外部系统 API 的转换。
扩展架构图:
┌─────────────────────────────────────────────────────────────┐
│ Host (Claude Code) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ MCP Client │ │ MCP Client │ │ MCP Client │ │
│ │ (PostgreSQL)│ │ (GitHub) │ │ (Sentry) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
└─────────┼────────────────┼────────────────┼───────────────┘
│ │ │
▼ ▼ ▼
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ MCP Server │ │ MCP Server │ │ MCP Server │
│ (PostgreSQL) │ │ (GitHub) │ │ (Sentry) │
│ - 协议转换 │ │ - 认证授权 │ │ - 日志查询 │
│ - SQL执行 │ │ - Issue管理 │ │ - 错误分析 │
│ - 结果格式化 │ │ - 代码拉取 │ │ - 修复建议 │
└──────┬─────────┘ └──────┬─────────┘ └──────┬─────────┘
│ │ │
▼ ▼ ▼
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ PostgreSQL数据库│ │ GitHub API │ │ Sentry API │
└────────────────┘ └────────────────┘ └────────────────┘
3. 传输方式与认证机制(扩展细节)
| MCP 支持两种核心传输方式,适配不同场景: | 传输方式 | 适用场景 | 技术细节 | 认证方式 |
|---|---|---|---|---|
| Stdio | 本地工具(如本地脚本、文件系统) | 基于标准输入输出流通信,低延迟、无网络依赖 | 本地权限校验(如文件读写权限) | |
| HTTP/SSE | 远程服务(如 GitHub、Sentry) | 基于 HTTP 协议传输 JSON-RPC 请求,支持流式响应(SSE 用于实时数据) | OAuth2.0、API 密钥、JWT 令牌 |
实战补充:搭建一个简单的 PostgreSQL MCP Server(Python 示例),核心代码如下:
# 基于 jsonrpcserver 实现 MCP Server
from jsonrpcserver import Success, method, serve
import psycopg2
from psycopg2.extras import RealDictCursor
# 数据库连接配置
DB_CONFIG = {
"dbname": "sales_db",
"user": "mcp_user",
"password": "secure_pass",
"host": "localhost"
}
# 实现 MCP Tools 原语:查询用户订单
@method
def query_user_orders(user_id: str, start_date: str, end_date: str):
conn = psycopg2.connect(**DB_CONFIG)
with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute("""
SELECT order_id, amount, create_time
FROM orders
WHERE user_id = %s AND create_time BETWEEN %s AND %s
""", (user_id, start_date, end_date))
results = cur.fetchall()
conn.close()
return Success({"orders": results})
if __name__ == "__main__":
# 启动 MCP Server,监听 5000 端口(HTTP 传输)
serve("localhost", 5000)
4. MCP 的优缺点(深度分析)
优点:
- 标准化复用:同一 MCP Server 可在所有支持 MCP 的 AI 工具中使用(如 Claude、ChatGPT),无需重复开发;
- 动态发现:AI 运行时可自动识别可用工具,无需硬编码工具列表;
- 权限可控:通过 MCP Server 统一管理外部系统访问权限,支持细粒度控制(如只读、只写)。
缺点:
- Token 消耗高:每个 MCP Server 的工具定义(如参数描述、功能说明)会持久占用上下文,连接 10 个 MCP Server 可能消耗上万 Token;
- 维护成本高:需独立部署和维护 MCP Server,处理网络中断、认证过期等问题;
- 安全风险:第三方 MCP Server 可能存在恶意代码执行风险,或通过外部数据注入恶意指令。
三、Agent Skill 深度解析:AI 的“专业知识包”
1. 什么是 Agent Skill?
Agent Skill 是 Anthropic 推出的“知识与流程封装方案”,本质是一套结构化的“任务执行手册”——包含元数据、核心指令、参考文档、辅助脚本等,AI 可根据用户请求自动匹配并加载,按手册完成复杂任务。
它与 MCP 的核心区别在于层级:Skill 位于“提示/知识层”,不直接访问外部系统,而是通过注入专业知识优化 AI 的决策与执行流程;MCP 位于“集成层”,负责实际的外部交互。
2. 核心设计:渐进式信息公开(扩展细节)
Skill 最革命性的设计是渐进式加载(Progressive Disclosure),解决了传统上下文管理的“Token 浪费”问题。其核心逻辑是“按需加载信息”,而非一次性将所有内容注入上下文:
| 加载层级 | 内容 | Token 占用 | 加载时机 |
|---|---|---|---|
| 第 1 层 | 元数据(名称、描述、触发关键词) | ~100 Token | 会话启动时自动加载(所有 Skill 共享) |
| 第 2 层 | 核心指令(任务流程、关键规则) | ~5k Token | AI 语义匹配成功后加载 |
| 第 3+ 层 | 支持文件(参考文档、辅助脚本、模板) | 按需加载(每个文件 ~1-10k Token) | 执行任务时需要特定知识/工具时加载 |
Token 消耗对比示例:
- 传统方式(如 MCP 工具定义):10 个工具 → 约 5k Token 永久占用上下文;
- Skill 方式:10 个 Skill → 仅 10×100=1k Token 永久占用,执行时仅加载当前任务所需的 5k Token,总计节省 ~4k Token。
3. 文件结构与触发机制(实战扩展)
(1)标准化文件结构(含详细说明)
一个生产级 Skill 的完整结构如下,每个文件都有明确分工:
sales-analysis-skill/
├── SKILL.md # 必需:元数据 + 核心指令(500 行以内)
├── reference.md # 可选:详细参考(如指标计算规则、SQL模板)
├── examples.md # 可选:成功案例(如过往销售分析报告示例)
├── scripts/
│ └── data_clean.py # 可选:辅助脚本(如数据清洗、格式转换)
└── templates/
└── report_template.md # 可选:输出模板(如分析报告的 Markdown 模板)
核心文件 SKILL.md 示例(扩展版):
---
name: sales-analysis
description: >
分析销售数据,生成包含核心指标(销售额、客单价、增长率)、趋势图表、异常分析的报告。
适用场景:销售数据复盘、月度业绩汇报、异常波动排查。
触发关键词:"销售分析"、"业绩复盘"、"销售额趋势"、"客单价计算"、"销售异常分析"
allowed-tools: ["Read", "QueryDatabase", "GenerateChart"] # 限制可用工具
version: "1.0"
author: "AI 研发团队"
---
# 销售分析 Skill 执行手册
## 核心流程(必须严格遵循)
1. **数据准备**
- 优先通过 QueryDatabase 工具获取指定时间范围的销售数据,必填字段:order_id、user_id、amount、create_time、product_category;
- 若数据缺失,通过 Read 工具加载本地 Excel 备份文件(路径:s3://company-data/sales/backup.xlsx);
- 调用 scripts/data_clean.py 脚本清洗数据(去除空值、过滤测试订单)。
2. **指标计算**
- 基础指标:总销售额(SUM(amount))、订单数(COUNT(order_id))、客单价(总销售额/订单数);
- 趋势指标:日/周/月销售额增长率(与上月同期对比);
- 分类指标:各产品品类销售额占比、Top10 高价值用户贡献度。
3. **异常分析**
- 识别销售额波动超过 ±30% 的时间段,排查原因(如促销活动、供应链问题);
- 标记客单价异常高/低的订单(超出平均值 ±2 倍标准差)。
4. **报告生成**
- 使用 templates/report_template.md 模板;
- 调用 GenerateChart 工具生成趋势图(折线图)、占比图(饼图);
- 报告需包含:核心指标、趋势分析、异常说明、改进建议。
## 注意事项
- 数据时间范围默认取近 30 天,用户未指定时需主动确认;
- 避免使用专业术语,报告需面向非技术人员(如销售经理);
- 若增长率为负,需在建议部分给出至少 2 条可执行的改进措施。
(2)触发机制:语义匹配的底层逻辑
Skill 的触发无需用户显式调用,AI 会通过以下流程自动匹配:
- 扫描阶段:会话启动时,AI 读取所有 Skill 的元数据(第 1 层),建立“关键词- Skill”映射;
- 匹配阶段:用户输入后,AI 进行语义分析,提取核心意图(如“分析 1 月销售额趋势”),与 Skill 描述中的触发关键词、场景匹配;
- 置信度判断:只有匹配置信度 ≥ 0.7(Anthropic 内部阈值)时,才加载第 2 层核心指令;
- 执行阶段:按 Skill 指令执行任务,如需详细参考或脚本,再加载第 3+ 层文件。
4. Skill 的优缺点(深度分析)
优点:
- Token 效率极高:渐进式加载避免无效信息占用上下文,支持海量 Skill 共存;
- 易用性强:仅需编写 Markdown 和简单脚本,无需理解复杂协议;
- 标准化流程:将团队最佳实践固化为 Skill,确保任务执行一致性(如代码审查、报告生成)。
缺点:
- 跨平台受限:目前仅支持 Anthropic 生态(Claude Code、Claude Agent SDK),不支持 OpenAI、Gemini;
- 无法直接访问外部系统:需依赖 MCP 或 AI 内置工具(如 Read、QueryDatabase);
- 安全风险:恶意 Skill 可能在辅助脚本或参考文档中隐藏恶意指令(如窃取敏感数据)。
四、MCP 与 Agent Skill 的底层逻辑对比
1. 核心维度深度对比(扩展版)
| 对比维度 | MCP | Agent Skill | 底层逻辑差异 |
|---|---|---|---|
| 核心定位 | 外部系统连接器 | 任务执行手册 | MCP 是“通道”,Skill 是“方法论” |
| 架构层级 | 集成层(连接 AI 与外部) | 知识层(优化 AI 决策) | 层级互补,Skill 依赖 MCP 实现外部交互 |
| Token 策略 | 预加载所有工具定义(高消耗) | 渐进式按需加载(低消耗) | MCP 优先保证“随时可用”,Skill 优先保证“高效利用上下文” |
| 跨平台支持 | 是(开放协议,支持 Claude、ChatGPT、Gemini) | 否(Anthropic 专属) | MCP 是行业标准,Skill 是产品特性 |
| 触发方式 | 持久连接,AI 随时调用 | 语义匹配,自动触发 | MCP 是“被动待命”,Skill 是“主动响应” |
| 外部访问 | 直接访问(通过 Server 代理) | 间接访问(依赖工具) | MCP 是“执行者”,Skill 是“指挥官” |
| 开发难度 | 中高(需懂协议、部署 Server) | 低(仅需 Markdown/脚本) | MCP 偏向后端开发,Skill 偏向产品/运营 |
| 安全风险 | 外部数据注入、恶意 Server | 指令注入、恶意脚本 | MCP 风险来自外部系统,Skill 风险来自内部文件 |
| 适用场景 | 外部数据访问、系统操作 | 复杂流程执行、知识复用 | MCP 解决“能不能做”,Skill 解决“做得好不好” |
2. 安全风险实战分析(扩展内容)
(1)MCP 的安全风险与防护
- 风险案例:第三方 MCP Server 伪装成“GitHub 连接器”,实际记录 AI 调用的代码仓库凭证;
- 防护措施:
- 仅使用官方或可信来源的 MCP Server;
- 为 MCP Server 配置最小权限(如 PostgreSQL 只读权限);
- 启用传输加密(HTTPS/SSE),避免明文传输认证信息。
(2)Skill 的安全风险与防护
- 风险案例:恶意 Skill 在辅助脚本中隐藏代码,窃取 AI 上下文的敏感数据(如用户密码);
- 防护措施:
- 审查 Skill 的所有文件,尤其是 scripts 目录下的可执行代码;
- 使用
allowed-tools限制 Skill 可调用的工具,禁止危险操作(如 Write、Execute); - 禁用 Skill 的脚本执行权限,仅保留指令和模板功能。
五、应用场景抉择:什么时候用 MCP、Skill 或二者结合?
1. 单独使用 MCP 的场景
- 需直接访问外部系统:如查询数据库、调用第三方 API、操作文件系统;
- 跨平台复用工具:同一工具需在 Claude、ChatGPT 等多个 AI 应用中使用;
- 实时数据获取:如监控系统状态、查询实时日志、获取搜索引擎结果。
案例:AI 需实时查询 Sentry 的生产环境错误日志,生成修复建议——使用 Sentry MCP Server,AI 可直接调用 query_sentry_errors 工具,获取错误详情。
2. 单独使用 Skill 的场景
- 内部流程标准化:如团队代码审查规范、文档生成模板、数据分析流程;
- 复杂任务执行:需多步骤、专业知识的任务(如根因分析、业绩汇报);
- Token 敏感场景:上下文窗口有限(如 4k Token),需高效利用每一个 Token。
案例:新人需要按团队规范审查代码——使用 code-review-skill,AI 自动按团队规则(如代码风格、安全漏洞、性能问题)进行审查,无需手动输入规范。
3. 二者结合的场景(深度流程)
大多数复杂任务需要 MCP 与 Skill 协同,以“AI 生成月度销售分析报告”为例:
flowchart TD
A["Step1: 用户请求生成2025年1月销售分析报告"] --> B["Step2: AI语义匹配"]
B --> C["Step3: 加载sales-analysis Skill(第二层核心指令)"]
C --> D["Step4: Skill触发MCP调用"]
D --> E["Step5: PostgreSQL查询1月销售数据"]
E --> F["Step6: 返回数据给AI"]
F --> G["Step7: 调用data_clean.py清洗数据"]
G --> H["Step8: 计算销售额/客单价/增长率"]
H --> I["Step9: Sentry查询1月销售系统错误"]
I --> J["Step10: 分析支付失败订单流失影响"]
J --> K["Step11: 使用report_template.md生成报告"]
K --> L["Step12: 返回最终报告给用户"]
核心逻辑:Skill 提供“怎么做”的流程(分析报告的步骤),MCP 提供“做什么”的资源(销售数据、错误日志),二者协同实现端到端任务。
4. 与 Slash Command 的对比(扩展)
很多开发者会混淆 Skill 与 Slash Command,三者的核心区别在触发方式和灵活性:
| 特性 | MCP | Agent Skill | Slash Command |
|---|---|---|---|
| 触发方式 | AI 主动调用 | 自动语义匹配 | 用户显式输入 /命令 |
| 灵活性 | 高(支持复杂参数) | 中(按指令执行) | 低(固定模板) |
| 知识承载 | 无(仅工具定义) | 高(指令、文档、脚本) | 低(仅提示词模板) |
| 适用场景 | 外部系统交互 | 复杂流程执行 | 简单重复任务(如生成代码注释) |
抉择逻辑:
- 需用户控制触发时机 → Slash Command(如
/generate_comment); - 需 AI 自动识别任务 → Skill(如代码审查、数据分析);
- 需访问外部系统 → MCP(如查询数据库、操作 GitHub)。
六、实战指南:搭建 MCP Server 与编写 Skill
1. 搭建 PostgreSQL MCP Server(完整步骤)
步骤 1:环境准备
# 安装依赖
pip install jsonrpcserver psycopg2-binary python-dotenv
步骤 2:编写 MCP Server 代码(server.py)
from jsonrpcserver import Success, method, serve, Error
import psycopg2
from psycopg2.extras import RealDictCursor
from dotenv import load_dotenv
import os
# 加载环境变量(避免硬编码)
load_dotenv()
DB_CONFIG = {
"dbname": os.getenv("DB_NAME"),
"user": os.getenv("DB_USER"),
"password": os.getenv("DB_PASSWORD"),
"host": os.getenv("DB_HOST", "localhost"),
"port": os.getenv("DB_PORT", "5432")
}
# 连接数据库工具
def get_db_connection():
try:
return psycopg2.connect(**DB_CONFIG)
except Exception as e:
return None
# 定义 MCP Tools 原语:查询用户订单
@method
def query_user_orders(user_id: str, start_date: str, end_date: str):
conn = get_db_connection()
if not conn:
return Error("数据库连接失败")
try:
with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute("""
SELECT order_id, amount, create_time, product_category
FROM orders
WHERE user_id = %s
AND create_time BETWEEN %s AND %s
ORDER BY create_time DESC
""", (user_id, start_date, end_date))
results = cur.fetchall()
conn.close()
return Success({
"status": "success",
"data": results,
"count": len(results)
})
except Exception as e:
conn.rollback()
conn.close()
return Error(f"查询失败:{str(e)}")
# 定义 MCP Tools 原语:统计品类销售额
@method
def stat_category_sales(start_date: str, end_date: str):
conn = get_db_connection()
if not conn:
return Error("数据库连接失败")
try:
with conn.cursor(cursor_factory=RealDictCursor) as cur:
cur.execute("""
SELECT product_category, SUM(amount) as total_sales, COUNT(order_id) as order_count
FROM orders
WHERE create_time BETWEEN %s AND %s
GROUP BY product_category
ORDER BY total_sales DESC
""", (start_date, end_date))
results = cur.fetchall()
conn.close()
return Success({
"status": "success",
"data": results
})
except Exception as e:
conn.rollback()
conn.close()
return Error(f"统计失败:{str(e)}")
if __name__ == "__main__":
# 启动 MCP Server,监听本地 5000 端口
print("MCP Server 启动,监听 http://localhost:5000")
serve("localhost", 5000)
步骤 3:配置环境变量(.env)
DB_NAME=sales_db
DB_USER=mcp_user
DB_PASSWORD=secure_pass_123
DB_HOST=localhost
DB_PORT=5432
步骤 4:启动与测试
# 启动 Server
python server.py
# 测试工具调用(使用 curl)
curl -X POST http://localhost:5000 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "stat_category_sales",
"params": {"start_date": "2025-01-01", "end_date": "2025-01-31"},
"id": 1
}'
2. 编写 sales-analysis Skill(完整步骤)
步骤 1:创建文件结构
mkdir -p sales-analysis-skill/scripts sales-analysis-skill/templates
cd sales-analysis-skill
touch SKILL.md reference.md examples.md
touch scripts/data_clean.py
touch templates/report_template.md
步骤 2:编写辅助脚本(scripts/data_clean.py)
def clean_sales_data(data):
"""清洗销售数据:去除空值、过滤测试订单、格式化日期"""
cleaned = []
for item in data:
# 去除空值
if not item.get("amount") or not item.get("create_time"):
continue
# 过滤测试订单(amount=0 或 user_id 包含 test)
if item["amount"] == 0 or "test" in item.get("user_id", ""):
continue
# 格式化日期
item["create_time"] = item["create_time"].strftime("%Y-%m-%d %H:%M:%S")
cleaned.append(item)
return cleaned
步骤 3:编写报告模板(templates/report_template.md)
# 月度销售分析报告({{ month }})
## 一、核心指标
| 指标 | 数值 | 同比上月 |
|------|------|----------|
| 总销售额 | {{ total_sales }} 元 | {{ sales_growth }} |
| 订单数 | {{ order_count }} 单 | {{ order_growth }} |
| 客单价 | {{ avg_amount }} 元 | {{ avg_amount_growth }} |
## 二、品类销售占比
{{ category_chart }}
## 三、趋势分析
{{ trend_chart }}
## 四、异常说明
{{ exception_analysis }}
## 五、改进建议
{{ suggestions }}
步骤 4:编写 SKILL.md(见前文扩展示例)
步骤 5:测试 Skill
将 Skill 文件夹放入 Claude Code 的 Skills 目录,用户输入“生成 2025 年 1 月销售分析报告”,AI 会自动匹配并执行,调用 MCP Server 获取数据,生成符合模板的报告。
六、未来趋势:MCP 与 Skill 的融合方向
- MCP 标准化深化:未来可能形成行业统一的 MCP 连接器市场,开发者无需自建 Server,直接选用现成的连接器(如 PostgreSQL、GitHub、Sentry);
- Skill 跨平台支持:Anthropic 可能开放 Skill 协议,支持 ChatGPT、Gemini 等其他 AI 应用,成为通用的“AI 知识包”标准;
- 智能协同机制:AI 自动判断任务需要的 MCP 和 Skill,无需用户干预——如用户请求“分析客户反馈”,AI 自动加载
customer-feedback-skill,并调用 GitHub MCP Server 获取 Issues,调用 Sentry MCP Server 获取相关错误。
七、总结:核心区别与协同价值
MCP 和 Agent Skill 是 AI Agent 扩展的两大基石,二者并非替代关系,而是互补协同:
- MCP 解决“AI 能触达什么”,是连接外部世界的“通用接口”;
- Skill 解决“AI 能做好什么”,是封装专业知识的“执行手册”。
选择逻辑一句话总结:
- 需访问外部系统 → 用 MCP;
- 需标准化流程 → 用 Skill;
- 需复杂任务端到端完成 → 二者结合。
随着 AI Agent 生态的成熟,MCP 的标准化和 Skill 的跨平台化将成为趋势,开发者无需再关注“如何扩展 AI 能力”,而是聚焦“如何用 AI 解决业务问题”——这正是 MCP 和 Skill 设计的核心初心。
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
文章评论