MCP 和 Agents Skills 关系
MCP 回顾:
- 统一传输协议:jsonrpc 2.0,明确输入参数(jsonrpc、method、params、id)、输出参数(jsonrpc、result/error、id)格式及字段,否则各家模型公司标准不统一,各家接口服务协议不统一,没有统一规范。
- 统一通信协议:stadio、SSE(service send event)、websocket
Agent Skill 回顾:
- 解决 token 上下文窗口问题,
- 模块化、可复用
- 特定任务、工作流程的结构化封装
- 包含文件:SKILL.md、references/、scripts/、assert/


关系: Skill 与MCP 结合使用,与 MCP 关系类似菜谱+厨具、数据怎么用+数据如何获取。
问题一:大模型是如何发现 Agent Skills 的
开始处理请求时,系统会提供了一个 <agent_skills>部分,里面列出了所有可用的skills,传入到 system_prompt 中:
<agent_skills>
<agent_skill fullPath="/Users/zhangfeibiao/.claude/skills/travel-guide/SKILL.md">
当用户询问"帮我制定旅行攻略"、"create a travel itinerary"、"plan a trip"、
"规划路线"、"make travel攻略"或讨论"旅行攻略"、"旅游计划"、"景点推荐"、
"travel planning"、"itinerary creation"时使用此技能。自动从小红书收集旅行信息
并整合Google Maps数据生成全面的旅行指南。⚠️ 必须为每个景点获取 Google Maps
链接、评分、地址信息、支付方式和地点图片。
</agent_skill>
<!-- 还有其他20多个skills -->
</agent_skills>
信息流可视化(rule 非必须,看 Agent 架构设计):
┌─────────────────────────────────────────┐
│ 系统发送给我的完整上下文 │
├─────────────────────────────────────────┤
│ │
│ <agent_skills> │
│ ├─ travel-guide ⭐ │
│ │ ├─ fullPath: /...skills/... │
│ │ └─ description: "旅行攻略..." │
│ │ │
│ ├─ xlsx │
│ ├─ pdf │
│ └─ ... 30+ skills │
│ │
│ <workspace_rules> │
│ └─ <skills_system> │
│ └─ travel-guide (同上) │
│ │
│ <user_query> │
│ └─ "帮我生成福州3日旅行攻略" │
│ │
└─────────────────────────────────────────┘
│
↓
[我的处理逻辑]
│
关键词匹配: "旅行攻略"
│
在agent_skills中查找...
│
✅ 发现travel-guide ✅
│
读取skill详细信息
│
执行skill的具体步骤
问题二:如果 skills 里面又有很多接口调用,这些接口有的是直接声明url、params,有的会指明调用哪个mcp 的具体 tool,这两种情况下流程是如何实现的?
┌─────────────────────────────────────────────────────┐
│ 大模型 (Claude/OpenAI/千问) │
└───────────────────────────┬─────────────────────────┘
│
【模型只做这3件事】
1. 理解目标 2. 规划步骤 3. 选择并调用 Skill
│
▼
┌─────────────────────────────────────────────────────┐
│ Agent Skills 能力层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 查天气 Skill │ │ 发邮件 Skill │ │ 订机票 Skill │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└───────────────────────────┬─────────────────────────┘
│
【模型只看到:名称、描述、入参、出参】
│
▼
┌─────────────────────────────────────────────────────┐
│ MCP 协议层 (JSON-RPC 2.0) │
└───────────────────────────┬─────────────────────────┘
│
【统一调用入口:skills.xxx + params】
│
┌──────────────┴──────────────┐
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ 类型A:直接HTTP接口 │ │ 类型B:调用MCP Tool │
│ 内部写死 URL、参数 │ │ 指向已注册的MCP工具 │
└─────────────────────┘ └─────────────────────┘
步骤 1:编写 Registry 文件
如上面的 skills_registry.yaml,把所有 Skill 的 “给模型看的元信息” 和 “模型看不到的实现细节” 分开写。
步骤 2:系统启动时加载 Registry
后端服务(如 Python/Go 服务)读取 Registry 文件,解析成内存中的数据结构,同时加载 Rule 规则文件。
步骤 3:提取 Skill 元信息(核心:隐藏实现细节)
系统只保留 metadata 部分(名称、描述、入参 / 出参约束),完全剔除 implementation 部分(URL/Tool 信息),生成 “干净的 Skill 清单”。
步骤 4:封装到 System Prompt / 上下文
把 “干净的 Skill 清单 + Rule 规则” 拼接成模型能理解的文本,放入 System Prompt(模型的 “指令手册”)。
关键:只传元信息,不传实现细节!
步骤 5:传给大模型
步骤 6:模型基于元信息决策调用
模型只看到上述 “干净的清单”,基于语义理解 + Rule 规则,决策调用 weather.get,并按 input_schema 生成参数,最后通过 MCP 协议发送调用请求。