@chantezy/mcp-product-design 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/skill-loader.d.ts +1 -0
- package/dist/skill-loader.js +26 -2
- package/dist/skill-loader.js.map +1 -1
- package/package.json +5 -1
- package/skills/b-design-diverge/SKILL.md +1 -0
- package/skills/interaction-design-eval/SKILL.md +1 -0
- package/skills/interaction-spec/SKILL.md +1 -0
- package/skills/prd-generator/SKILL.md +2 -1
- package/skills/requirements-content-analysis/SKILL.md +1 -0
package/dist/index.js
CHANGED
|
@@ -12,7 +12,7 @@ const server = new McpServer({
|
|
|
12
12
|
name: "mcp-product-design",
|
|
13
13
|
version: pkg.version,
|
|
14
14
|
});
|
|
15
|
-
server.tool("list_skills", "
|
|
15
|
+
server.tool("list_skills", "列出所有可用的产品设计技能及其触发条件。使用策略:1. 当用户明确指定技能时,直接调用 get_skill。2. 当用户意图模糊或无法准确匹配时,先调用 list_skills 列出所有技能标题和触发条件,请用户确认选择。3. 当用户只说'帮我设计'、'分析需求'、'写文档'等模糊表述时,必须调用 list_skills 让用户明确选择。", {}, async () => {
|
|
16
16
|
const skills = listSkills();
|
|
17
17
|
if (skills.length === 0) {
|
|
18
18
|
return {
|
|
@@ -24,8 +24,9 @@ server.tool("list_skills", "列出所有可用的产品设计技能及其触发
|
|
|
24
24
|
],
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
const lines = skills.map((s) => `- **${s.name}**
|
|
27
|
+
const lines = skills.map((s) => `- **${s.name}** — ${s.trigger || "查看描述了解适用场景"}`);
|
|
28
28
|
const text = `# 可用产品设计技能 (${skills.length})\n\n` +
|
|
29
|
+
`请根据用户意图,选择最匹配的 skill 调用 \`get_skill\`:\n\n` +
|
|
29
30
|
lines.join("\n") +
|
|
30
31
|
`\n\n---\n使用 \`get_skill\` 工具并提供技能名称来获取完整的工作流程指令。`;
|
|
31
32
|
return {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAElF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CACT,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/skill-loader.d.ts
CHANGED
package/dist/skill-loader.js
CHANGED
|
@@ -17,16 +17,27 @@ function parseFrontmatter(content) {
|
|
|
17
17
|
// Fallback: simple regex parsing if yaml.load fails
|
|
18
18
|
const nameMatch = match[1].match(/^name:\s*(.+)$/m);
|
|
19
19
|
const descMatch = match[1].match(/^description:\s*(.+)$/m);
|
|
20
|
+
const triggerMatch = match[1].match(/^trigger:\s*(.+)$/m);
|
|
20
21
|
if (nameMatch)
|
|
21
22
|
fm.name = nameMatch[1].trim().replace(/^["']|["']$/g, "");
|
|
22
23
|
if (descMatch)
|
|
23
24
|
fm.description = descMatch[1].trim().replace(/^["']|["']$/g, "");
|
|
25
|
+
if (triggerMatch)
|
|
26
|
+
fm.trigger = triggerMatch[1].trim().replace(/^["']|["']$/g, "");
|
|
24
27
|
}
|
|
25
28
|
return { fm, body: match[2] || "" };
|
|
26
29
|
}
|
|
27
30
|
function normalizeSkillDir(name) {
|
|
28
31
|
return name.toLowerCase().replace(/\s+/g, "-");
|
|
29
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* 净化参考资料文件名,防止路径遍历攻击。
|
|
35
|
+
* 只允许字母、数字、下划线、连字符,过滤掉所有路径分隔符和特殊字符。
|
|
36
|
+
*/
|
|
37
|
+
function sanitizeRef(ref) {
|
|
38
|
+
const sanitized = ref.replace(/[^a-zA-Z0-9_-]/g, "");
|
|
39
|
+
return sanitized || null;
|
|
40
|
+
}
|
|
30
41
|
export function listSkills() {
|
|
31
42
|
if (!fs.existsSync(SKILLS_DIR)) {
|
|
32
43
|
return [];
|
|
@@ -39,9 +50,18 @@ export function listSkills() {
|
|
|
39
50
|
if (fs.statSync(entryPath).isDirectory() && fs.existsSync(skillMdPath)) {
|
|
40
51
|
const content = fs.readFileSync(skillMdPath, "utf-8");
|
|
41
52
|
const { fm } = parseFrontmatter(content);
|
|
53
|
+
let trigger = fm.trigger || "";
|
|
54
|
+
// Auto-extract trigger from description if not explicitly set
|
|
55
|
+
if (!trigger && fm.description) {
|
|
56
|
+
const triggerMatch = fm.description.match(/当[^(时|触发)]*?(?:时|触发)/);
|
|
57
|
+
if (triggerMatch) {
|
|
58
|
+
trigger = triggerMatch[0];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
42
61
|
skills.push({
|
|
43
62
|
name: fm.name || normalizeSkillDir(entry),
|
|
44
63
|
description: fm.description || "",
|
|
64
|
+
trigger,
|
|
45
65
|
directory: entry,
|
|
46
66
|
});
|
|
47
67
|
}
|
|
@@ -73,6 +93,7 @@ export function getSkill(name) {
|
|
|
73
93
|
return {
|
|
74
94
|
name: fm.name || skill.name,
|
|
75
95
|
description: fm.description || skill.description,
|
|
96
|
+
trigger: fm.trigger || skill.trigger || "",
|
|
76
97
|
directory: skill.directory,
|
|
77
98
|
content,
|
|
78
99
|
body,
|
|
@@ -80,6 +101,9 @@ export function getSkill(name) {
|
|
|
80
101
|
};
|
|
81
102
|
}
|
|
82
103
|
export function getReference(name, ref) {
|
|
104
|
+
const safeRef = sanitizeRef(ref);
|
|
105
|
+
if (!safeRef)
|
|
106
|
+
return null;
|
|
83
107
|
const skills = listSkills();
|
|
84
108
|
const normalized = name.toLowerCase().replace(/\s+/g, "-");
|
|
85
109
|
const skill = skills.find((s) => s.name === name ||
|
|
@@ -88,9 +112,9 @@ export function getReference(name, ref) {
|
|
|
88
112
|
s.directory === normalized);
|
|
89
113
|
if (!skill)
|
|
90
114
|
return null;
|
|
91
|
-
const refPath = path.join(SKILLS_DIR, skill.directory, "references", `${
|
|
115
|
+
const refPath = path.join(SKILLS_DIR, skill.directory, "references", `${safeRef}.md`);
|
|
92
116
|
if (!fs.existsSync(refPath)) {
|
|
93
|
-
const tryPath = path.join(SKILLS_DIR, skill.directory, "references",
|
|
117
|
+
const tryPath = path.join(SKILLS_DIR, skill.directory, "references", safeRef);
|
|
94
118
|
if (fs.existsSync(tryPath)) {
|
|
95
119
|
return fs.readFileSync(tryPath, "utf-8");
|
|
96
120
|
}
|
package/dist/skill-loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../src/skill-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-loader.js","sourceRoot":"","sources":["../src/skill-loader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chantezy/mcp-product-design",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Product design skills MCP server - structured design workflow tools for AI agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -26,6 +26,10 @@
|
|
|
26
26
|
],
|
|
27
27
|
"author": "chantezy",
|
|
28
28
|
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/chantezy/skills"
|
|
32
|
+
},
|
|
29
33
|
"dependencies": {
|
|
30
34
|
"@modelcontextprotocol/sdk": "^1.22.0",
|
|
31
35
|
"js-yaml": "^4.1.0",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: interaction-design-eval
|
|
3
3
|
description: 对交互设计/产品方案文档进行专业、量化的评审打分,同时评估方案及设计师本人的职级岗位匹配度。当用户上传设计方案文档、原型说明、PRD交互部分,并要求"评估"、"打分"、"测评"、"评审"该方案时,必须使用本skill。即使用户只说"帮我看看这个方案怎么样"或"这个设计有没有问题",只要附带的是交互/产品设计类文档,也应触发本skill,而不是给出泛泛的主观评价。也适用于"职级评估""成长值评估""能力匹配度"相关的设计师能力盘点场景。输出固定为10维度评分表+职级评估分(成长值)+逐维度问题清单+原文引用+优化建议。
|
|
4
|
+
trigger: 当用户需要评估/打分/评审交互设计方案、测评设计质量、或做设计师职级能力盘点时使用
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# 交互设计方案专业评估
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: interaction-spec
|
|
3
3
|
description: 生成产品交互说明文档,适用于 UI 设计稿、原型图、功能模块的交互逻辑描述。当用户提到"交互说明"、"交互文档"、"标注说明"、"PRD 交互部分"、"组件行为描述"、"状态说明"、"动效规范"、"操作反馈"时,必须使用本 Skill。即使用户只是说"帮我写下这个页面的说明"或"描述一下这个功能怎么用",只要涉及界面操作与系统响应的关系,都应触发本 Skill。
|
|
4
|
+
trigger: 当用户需要编写交互说明文档、描述组件行为与状态、或写页面操作说明时使用
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# 交互说明生成(Interaction Spec)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: prd-generator
|
|
3
|
-
description: 当用户要求创建产品要求文档 (PRD)
|
|
3
|
+
description: 当用户要求创建产品要求文档 (PRD) 时,应使用此技能,例如"为功能 X 创建 PRD"、"编写产品要求文档"、"帮我创建 PRD"或任何涉及编写产品要求规范的请求。 它为收集需求和生成全面的PRD文档提供了结构化的工作流程。
|
|
4
|
+
trigger: 当用户需要创建/编写产品需求文档(PRD)、或涉及产品需求规范时使用
|
|
4
5
|
---
|
|
5
6
|
|
|
6
7
|
# PRD 需求文档生成
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: requirements-content-analysis
|
|
3
3
|
description: 面向产品需求文档(PRD)的结构化内容解析与交互设计导向分析能力。通过对需求目标、核心功能、用户路径及关键场景的快速拆解,提炼影响体验质量的关键要素,识别潜在的交互风险与设计机会点,并输出高度凝练的重点分析报告。该能力有助于设计师在早期阶段建立对需求的系统性认知,提升设计决策的前瞻性与有效性,同时为后续体验方案的制定提供清晰依据。
|
|
4
|
+
trigger: 当用户需要分析需求、拆解需求、梳理需求背景、理解业务目标、识别交互风险时使用
|
|
4
5
|
---
|
|
5
6
|
# 需求内容分析
|
|
6
7
|
|