从 Skill 沉淀到 MCP 服务化,打造跨 IDE 的 AI 设计能力系统
随着 AI Agent 在设计工作流中的应用逐渐深入,我希望 AI 真正参与完整产品设计流程。
尝试在产品设计流程的不同阶段结合岗位工作输出不同的 skill 辅助设计,但在不同 IDE(如 Cursor、Trae、Claude Code 等)中使用时,遇到了几个问题:
最初尝试通过本地映射文件解决同步问题,但仍然存在:换电脑无法同步、配置维护成本高、多环境管理困难。
因此我希望将 Skill 能力服务化,让不同 AI IDE 都能够调用同一套最新的设计能力。
将产品设计经验拆解为独立 Skill,我把不同的设计方向通过不同的技能来解决分析的问题。
为了让 AI 可以精准的调用,我在每个 Skill 通过 SKILL.md 进行规范描述:
PRD 需求文档生成
为功能创建 PRD,提供结构化需求收集与文档生成工作流。
npx skills add chantezy/skills --skill prd-generator
需求内容分析
结构化解析需求文档,识别交互风险与设计机会点,输出分析报告。
npx skills add chantezy/skills --skill requirements-content-analysis
B端设计方案发散
通过 ASCII 示意图构建多方案对比,帮助快速锁定最优设计方案。
npx skills add chantezy/skills --skill b-design-diverge
交互说明生成
生成交互说明文档,涵盖界面元素、状态说明、动效规范。
npx skills add chantezy/skills --skill interaction-spec
交互设计评估
专业量化评审交互方案,输出 10 维度评分表、职级评估分及优化建议。
npx skills add chantezy/skills --skill interaction-design-eval
SKILL 的文档已经满足在日常工作中的调用和内容产出,但是由于会不断更新和数量增多,在不同的 IDE 产品中就需要进行反复的导入和更新,非常不便利。
通过 SKILL 管理工具的方式也只解决了管理的问题,没有解决各个版本的更新问题。
于是我想到通过 MCP(Model Context Protocol) 的方式,有个地方统一去更新内容,而 IDE 产品就负责每次启动进行内容的加载和调用,这样可以减少很多重复工作。
将 Skill 封装为 MCP Server。各个 IDE 产品对于 MCP 的兼容性比 SKILL 要好,我的目标是通过同一个服务,多端 IDE 可以调用,共享最新设计能力。内容更新上是:我 push 到 github 后,npm 自动同步最新的内容。
mcp-product-design
├── src
│
│── index.ts
│ MCP 服务入口
│ 注册 Tool
│
│── skill-loader.ts
│ SKILL.md 解析
│ Skill 加载管理
│
├── scripts
│ skill 同步脚本
│
├── package.json
│
├── tsconfig.json
│
└── README.md
将沉淀的产品设计 Skill 封装为基于 npm 发布的 MCP Server,通过 npm 包管理实现 Skill 能力的统一分发与自动更新。
npm(Node Package Manager)是一个用于管理和分发代码包的平台,类似于"应用商店"。在这个方案中,我将 MCP 服务打包成一个 npm 包并发布到 npm 仓库,AI IDE 通过 npm 自动下载安装并运行最新版本的 MCP 服务。后续 Skill 内容更新后,只需要重新发布 npm 包,使用方重新加载即可获取最新能力,无需手动替换文件。
MCP Server 负责解析和管理 Skill 内容,并通过标准化 Tool 接口向不同 AI IDE 提供设计能力。只需要维护一份 Skill 源文件,发布后 Cursor、Trae、Claude Code 等支持 MCP 的 IDE 均可直接调用最新版本,无需重复配置和手动同步,整体流程为:
npm i @chantezy/mcp-product-design
{
"mcpServers": {
"product-design": {
"command": "npx",
"args": ["-y", "@chantezy/mcp-product-design@latest"]
}
}
}
MCP 包括三个工具,会获取我 push 到 github 的 skill 列表,然后AI根据用户提问内容自动匹配适合的 skill 进行内容输出。
| 工具 | AI 拿到什么 | AI 怎么做 |
|---|---|---|
| list_skills | 5 个技能的名称和描述 | 判断哪个技能匹配用户意图 |
| get_skill | 完整的 SKILL.md 工作流 | 按照工作流里的步骤执行 |
| get_reference | 参考资料内容 | 读取领域知识辅助推理 |
到这一步已经实现了在不同的 IDE 中调用统一 SKILL 的能力,但是有个不够完美的地方是 MCP 本质上还是主动触发的工具,用户需要明确指定调用哪个技能来进行内容输出。
我想要实现的是 AI 可以根据上下文记忆和连贯性,自动规划并调用合适的技能来完成整个设计流程。
OpenAI 自己的数据也印证了AI 发展已经从「跟 AI 对话」转向「编排 Agent 执行任务」。
AI Agent 是指人工智能代理(Artificial Intelligence Agent),是一种能够感知环境进行自主理解,进行决策和执行动作的智能体。AI Agent 具备通过独立思考、调用工具逐步完成给定目标的能力。仅需要给定一个内容,就能够实现针对目标进行独立思考并完成目标任务。
一个基于大模型的 AI Agent 系统可以拆分 LLM(大模型)、记忆(Memory)、任务规划(Planning)以及工具使用(Tool) 的集合。在 LLM 为基础的 AI Agent 系统中,大模型为 AI Agent 系统的大脑负责计算,并需要其他组件进行辅助。
AI Agent 是基于大模型构建的智能执行系统,可以依据模型在意图识别完成复杂任务,具备真正的组合能力,这是与 SKILL 和 MCP 的主要区别。
| 维度 | Skill | MCP | Agent |
|---|---|---|---|
| 本质 | 单一能力模块 | 通信协议/通道 | 智能决策系统 |
| 功能 | 执行具体设计任务(写交互说明、评审方案等) | 提供技能内容的访问接口 | 规划任务、组合技能、输出完整方案 |
| 架构层级 | 工具层 | 传输层 | 控制层 |
| 调用方式 | 被动调用(IDE 触发) | 中介代理(连接 IDE 和技能) | 主动规划(自动判断和组合) |
| 输入 | 用户的具体指令 | IDE 的请求 | 用户自然语言需求 |
| 输出 | 单一技能的执行结果 | 技能内容数据 | 结构化的完整方案 |
| 智能程度 | 按指令执行 | 传递信息 | 具备推理和决策能力 |
| 跨 IDE | ✗ 需在每個 IDE 中单独配置 | ✓ 一次配置,所有 IDE 使用 | ✓ 基于 MCP 实现,跨 IDE |
| 更新方式 | 手动更新文件 | 依赖 Skill 更新 | 依赖 Skill + 系统提示词更新 |
而相对于一般的对话模型,在流程上也有区别:
在本方案中:
当用户在 IDE 中说:
IDE 会自动完成这个匹配。
用户提问
│
▼
┌─────────────────────────────────────┐
│ Agent 层(新增) │
│ ┌─────────┐ ┌─────────┐ ┌───────┐ │
│ │ 意图识别 │ │ 对话历史 │ │任务规划│ │
│ └────┬────┘ └────┬────┘ └───┬───┘ │
│ └───────────┴──────────┘ │
│ │ │
│ ▼ │
│ "需要调用 design_diverge 和 │
│ generate_spec,分两步执行" │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ MCP Tool 层 │
│ ┌─────────┐ ┌─────────┐ ┌───────┐ │
│ │analyze_ │ │ design_ │ │evalua │ │
│ │require │ │ diverge │ │_inter │ │
│ └─────────┘ └─────────┘ └───────┘ │
│ ┌─────────┐ ┌─────────┐ │
│ │generate │ │ prd_ │ │
│ │_spec │ │ generate│ │
│ └─────────┘ └─────────┘ │
└─────────────────────────────────────┘
举一个案例解释:
用户:"帮我分析这个需求,然后做几个设计方案对比"
│
▼
Agent 理解意图
│
├── 第一步:调用 analyze_requirements
│ │
│ ▼
│ 得到分析结果
│
├── 第二步:调用 design_diverge
│ │
│ ▼
│ 得到设计方案
│
└── 第三步:整合结果,给出最终回复
│
▼
返回完整方案
通过 MCP 配置,让 IDE 中的 Agent 自动调用设计能力。
【提示词 + 调用场景 + MCP 工具】
根据具体使用场景定义何时触发相应的 SKILL
不需要手动选择技能,智能体会自动识别并组合调用。
示例:
用户:"帮我分析直播首页需求,然后做设计方案"
智能体内部流程:
| 用户需求 | 调用顺序 | 示例输入 |
|---|---|---|
| 快速验证 | requirements-content-analysis → b-design-diverge | "分析需求然后做设计方案" |
| 完整方案 | requirements-content-analysis → b-design-diverge → interaction-design-eval → interaction-spec | "从需求到交互说明的完整流程" |
| 文档输出 | requirements-content-analysis → prd-generator | "分析需求然后生成 PRD" |
| 设计评审 | b-design-diverge → interaction-design-eval | "做设计方案然后评审" |
| 方案落地 | b-design-diverge → interaction-spec | "做设计方案然后写交互说明" |
最后的实现效果如下:
虽然我相信 AI 对于自然语言的意图识别能力,但是我想在语义模糊的时候做一些规则来限制 token 的消耗浪费,我针对用户的模糊语境增加了两个兜底规则。
trigger我在每个 SKILL 中都增加了 trigger,用一句自然语言描述 Skill 的典型适用场景。Intent Router 可以优先根据 trigger 进行快速匹配,而无需完整加载 Skill 内容。并且设置了已调用SKILL的记忆设置,重复调用无需重复加载。
mcp-server/src/index.ts 的 list_skills 工具里,把 trigger 展示给 AI:
const lines = skills.map(
(s) => `- **${s.name}** — ${s.trigger || "查看描述了解适用场景"}`,
);
根据用户意图,选择最匹配的 skill 调用 get_skill:
如果用户输入模糊,比如:
此时,我们根据上下文判断最可能的流程,如:
最后封装成 MCP 的价值也在于,在绝大多数真实使用场景中 更省 token。
| 对比维度 | MCP 方案(按需加载) | 单 skill 塞进 System Prompt |
|---|---|---|
| 初始加载 | 0 token(不加载不需要的) | 1,500-3,000 token(固定加载) |
| list_skills 调用 | 200 token(模糊意图时需要) | 不需要 |
| get_skill 调用 | 1,500-3,000 token(按需加载) | 0(已预加载) |
| get_reference 调用 | 200-1,500 token(按需加载) | 0(已预加载) |
| 重复调用同一 skill | 0 token(AI 记住已加载) | 1,500-3,000 token(每次对话都重复) |
| 使用 2 个不同 skill | 3,000-6,000 token(分别加载) | 3,000-6,000 token(固定预加载) |
| 使用 3 个不同 skill | 4,500-9,000 token(分别加载) | 4,500-9,000 token(固定预加载) |
| 网络延迟 | 有(每次工具调用往返) | 无(本地已加载) |
| 上下文膨胀 | 低(只加载当前需要的) | 高(全部塞进 system prompt,挤占用户可用空间) |
我在这个过程中从工作流的不同阶段对内容进行组合,利用模型的分析和整理能力完成了一次设计工作方式升级。
从「使用 AI 工具」转变为:构建属于自己的 AI 产品设计工作流。让设计方法、经验和流程成为可复用、可组合、可持续进化的能力,最终实现:
DesignOS 并不是一个 MCP,也不是一个 Agent
而是围绕产品设计构建的能力操作系统。
Skill 是知识载体,MCP 是分发机制,Agent 是执行引擎,
三者共同构成可沉淀、可组合、可持续演进的设计能力体系。