From c07048f258683efa9e20fcd61f8a2357638d953c Mon Sep 17 00:00:00 2001 From: matevip Date: Sun, 3 May 2026 17:14:19 +0800 Subject: [PATCH] feat(skill,mcp): ckjia-shopping skill bundle + same-name dedup against bridged MCP/ACP virtual skills --- .../java/vip/mate/config/WebMvcConfig.java | 17 +++++++ .../skill/runtime/SkillRuntimeService.java | 34 ++++++++++--- .../db/migration/h2/V85__ckjia_mcp_seed.sql | 22 +++++++++ .../migration/mysql/V85__ckjia_mcp_seed.sql | 22 +++++++++ .../resources/skills/ckjia-shopping/SKILL.md | 45 ++++++++++++++++++ .../ckjia-shopping/assets/ckjia_logo.png | Bin 0 -> 10325 bytes .../ckjia-shopping/assets/ckjia_logo_dark.png | Bin 0 -> 11758 bytes .../ckjia-shopping/assets/ckjia_logo_new.png | Bin 0 -> 12835 bytes 8 files changed, 134 insertions(+), 6 deletions(-) create mode 100644 mateclaw-server/src/main/resources/db/migration/h2/V85__ckjia_mcp_seed.sql create mode 100644 mateclaw-server/src/main/resources/db/migration/mysql/V85__ckjia_mcp_seed.sql create mode 100644 mateclaw-server/src/main/resources/skills/ckjia-shopping/SKILL.md create mode 100644 mateclaw-server/src/main/resources/skills/ckjia-shopping/assets/ckjia_logo.png create mode 100644 mateclaw-server/src/main/resources/skills/ckjia-shopping/assets/ckjia_logo_dark.png create mode 100644 mateclaw-server/src/main/resources/skills/ckjia-shopping/assets/ckjia_logo_new.png diff --git a/mateclaw-server/src/main/java/vip/mate/config/WebMvcConfig.java b/mateclaw-server/src/main/java/vip/mate/config/WebMvcConfig.java index 43dea5a6..0b6099c0 100644 --- a/mateclaw-server/src/main/java/vip/mate/config/WebMvcConfig.java +++ b/mateclaw-server/src/main/java/vip/mate/config/WebMvcConfig.java @@ -6,6 +6,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** @@ -39,4 +40,20 @@ public class WebMvcConfig implements WebMvcConfigurer { .allowCredentials(true) .maxAge(3600); } + + /** + * Expose per-skill bundled assets (logos, screenshots, ...) at + * {@code /skill-assets//...}. + * + *

Source layout: {@code src/main/resources/skills//assets/}. + * Built-in skills can ship icons / hero images alongside SKILL.md without + * polluting {@code src/main/resources/static/} (gitignored — that path is + * the mateclaw-ui Vite build output). + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/skill-assets/**") + .addResourceLocations("classpath:/skills/") + .setCachePeriod(86400); + } } diff --git a/mateclaw-server/src/main/java/vip/mate/skill/runtime/SkillRuntimeService.java b/mateclaw-server/src/main/java/vip/mate/skill/runtime/SkillRuntimeService.java index a03af2dc..e8de16a4 100644 --- a/mateclaw-server/src/main/java/vip/mate/skill/runtime/SkillRuntimeService.java +++ b/mateclaw-server/src/main/java/vip/mate/skill/runtime/SkillRuntimeService.java @@ -202,19 +202,29 @@ public class SkillRuntimeService { .map(packageResolver::resolve) .filter(SkillRuntimeService::passesActiveGate) .collect(Collectors.toList()); + // Track real skill names so a same-named bridged virtual skill is + // suppressed (real wins). Without this, a real SKILL.md packaged + // alongside a same-name MCP/ACP server produces two cards on the + // Skills page. + Set realNames = resolved.stream() + .map(ResolvedSkill::getName) + .collect(Collectors.toSet()); try { - // RFC-090 §3.2 — MCP-derived virtual skills go through the - // same active gate so a disconnected MCP server doesn't - // pollute the prompt enhancement. + // MCP-derived virtual skills go through the same active gate + // so a disconnected MCP server doesn't pollute the prompt + // enhancement. Same-name virtuals are suppressed by the real + // skill above. for (ResolvedSkill virt : mcpSkillBridge.listMcpDerivedResolvedSkills()) { + if (realNames.contains(virt.getName())) continue; if (passesActiveGate(virt)) resolved.add(virt); } } catch (Exception e) { log.warn("MCP skill bridge active merge failed: {}", e.getMessage()); } try { - // RFC-090 §3.2 (parallel) — ACP-derived virtual skills. + // ACP-derived virtual skills. Same dedup as MCP. for (ResolvedSkill virt : acpSkillBridge.listAcpDerivedResolvedSkills()) { + if (realNames.contains(virt.getName())) continue; if (passesActiveGate(virt)) resolved.add(virt); } } catch (Exception e) { @@ -240,13 +250,25 @@ public class SkillRuntimeService { List resolved = allSkills.stream() .map(packageResolver::resolve) .collect(Collectors.toList()); + // Same dedup-by-name as refreshActiveSkills(): a real skill with + // the same name as a bridged virtual one suppresses the virtual, + // so the Skills admin page never shows two cards for the same name. + Set realNames = resolved.stream() + .map(ResolvedSkill::getName) + .collect(Collectors.toSet()); try { - resolved.addAll(mcpSkillBridge.listMcpDerivedResolvedSkills()); + for (ResolvedSkill virt : mcpSkillBridge.listMcpDerivedResolvedSkills()) { + if (realNames.contains(virt.getName())) continue; + resolved.add(virt); + } } catch (Exception e) { log.warn("MCP skill bridge merge failed: {}", e.getMessage()); } try { - resolved.addAll(acpSkillBridge.listAcpDerivedResolvedSkills()); + for (ResolvedSkill virt : acpSkillBridge.listAcpDerivedResolvedSkills()) { + if (realNames.contains(virt.getName())) continue; + resolved.add(virt); + } } catch (Exception e) { log.warn("ACP skill bridge merge failed: {}", e.getMessage()); } diff --git a/mateclaw-server/src/main/resources/db/migration/h2/V85__ckjia_mcp_seed.sql b/mateclaw-server/src/main/resources/db/migration/h2/V85__ckjia_mcp_seed.sql new file mode 100644 index 00000000..074d94cf --- /dev/null +++ b/mateclaw-server/src/main/resources/db/migration/h2/V85__ckjia_mcp_seed.sql @@ -0,0 +1,22 @@ +-- Seed default ckjia-shopping MCP server config (disabled by default). +-- Admin enables in Settings > MCP Connections after pointing url to their +-- ckjia instance and configuring CKJIA_MCP_KEY env var for authorization. +-- +-- Column name is `url` (not `endpoint`) per McpServerEntity. +-- headers_json uses ${CKJIA_MCP_KEY} placeholder so the plaintext API key +-- never lands in the database (parseHeaders expands env vars at request time). + +MERGE INTO mate_mcp_server ( + name, transport, url, headers_json, enabled, description, + connect_timeout_seconds, read_timeout_seconds, builtin, create_time, update_time, deleted +) KEY(name) +VALUES ( + 'ckjia-shopping', + 'sse', + 'http://localhost:8088/mcp/sse', + '{"Authorization": "Bearer ${CKJIA_MCP_KEY}"}', + FALSE, + 'CKJIA cross-platform price comparison MCP server (Taobao/JD/Tmall/Pinduoduo).', + 30, 30, TRUE, + CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 0 +); diff --git a/mateclaw-server/src/main/resources/db/migration/mysql/V85__ckjia_mcp_seed.sql b/mateclaw-server/src/main/resources/db/migration/mysql/V85__ckjia_mcp_seed.sql new file mode 100644 index 00000000..15f4e3a6 --- /dev/null +++ b/mateclaw-server/src/main/resources/db/migration/mysql/V85__ckjia_mcp_seed.sql @@ -0,0 +1,22 @@ +-- Seed default ckjia-shopping MCP server config (disabled by default). +-- Admin enables in Settings > MCP Connections after pointing url to their +-- ckjia instance and configuring CKJIA_MCP_KEY env var for authorization. +-- +-- Column name is `url` (not `endpoint`) per McpServerEntity. +-- headers_json uses ${CKJIA_MCP_KEY} placeholder so the plaintext API key +-- never lands in the database (parseHeaders expands env vars at request time). + +INSERT INTO mate_mcp_server ( + name, transport, url, headers_json, enabled, description, + connect_timeout_seconds, read_timeout_seconds, builtin, create_time, update_time, deleted +) +SELECT 'ckjia-shopping', + 'sse', + 'http://localhost:8088/mcp/sse', + '{"Authorization": "Bearer ${CKJIA_MCP_KEY}"}', + FALSE, + 'CKJIA cross-platform price comparison MCP server (Taobao/JD/Tmall/Pinduoduo).', + 30, 30, TRUE, + NOW(), NOW(), 0 +FROM dual +WHERE NOT EXISTS (SELECT 1 FROM mate_mcp_server WHERE name = 'ckjia-shopping'); diff --git a/mateclaw-server/src/main/resources/skills/ckjia-shopping/SKILL.md b/mateclaw-server/src/main/resources/skills/ckjia-shopping/SKILL.md new file mode 100644 index 00000000..4e8c4c58 --- /dev/null +++ b/mateclaw-server/src/main/resources/skills/ckjia-shopping/SKILL.md @@ -0,0 +1,45 @@ +--- +name: ckjia-shopping +version: "1.0.0" +icon: /skill-assets/ckjia-shopping/assets/ckjia_logo_new.png +description: "跨平台比价与购物推荐 / Cross-platform price comparison and shopping recommendation. 淘宝 / 京东 / 天猫 / 拼多多商品聚合搜索,拍图识物,AI 购物意图识别。Phase 1 ships shopping_recommend + image_recognize; unified_search / price_history / compare_skus 在后续迭代追加。" +category: data +type: mcp +dependencies: + tools: + - ckjia_shopping_recommend + - ckjia_image_recognize + - ckjia_ping +--- + +# 查价 · 比价购物 + +当用户询问"X 多少钱 / 哪里便宜 / 帮我推荐 X / 这个值不值买 / 拍照认一下这是什么"时使用本技能。 + +## 决策树 + +1. **"推荐 / 帮我挑 / 性价比 / 想买 X"** → `ckjia_shopping_recommend(query, top_n=5)` + - 想要 ckjia 顺便给出意图理解(用于澄清后续问句)→ `include_intent=true` +2. **附带图片 / 拍照识物** → `ckjia_image_recognize(image_url)` → 拿到 `suggested_query` 后再 `ckjia_shopping_recommend(suggested_query)` +3. **transport 健康自检** → `ckjia_ping("hello")`,验证 MCP 链路通 + +## 输出渲染建议 + +- `recommendations: ProductCard[]` 在 chat UI 自动渲染成卡片网格(移动端单列、桌面端多列) +- `intent` 字段是给 agent 自己看的"我理解对了吗"——拿到后若 `budgetRange` 与用户原话不符,应主动澄清 +- `needsClarification=true` 时,把 `clarificationQuestion` + `clarificationOptions` 直接抛给用户选 + +## 注意 + +- 同一个 query 不要在一次对话里反复调用 —— ckjia 侧已有缓存,重复调用浪费配额 +- 用户未登录时不必填 `user_id`;当前 Phase 1 所有调用以 API key owner 身份执行 +- API key 由管理员在 ckjia 控制台申请后填入 mateclaw `Settings ▸ MCP Connections` 的 `headers_json`,使用 `${CKJIA_MCP_KEY}` 环境变量占位符避免明文落库 +- 触发 429 `rate_limited` 时按 `Retry-After` 等待一次,再失败就汇总现有结果而不是无限重试 + +## 如何申请 API Key + +1. 访问 ckjia 控制台 `https://ckjia.com/console/mcp-keys`(自助申请页面 P2 落地后开放;Phase 1 需联系运维手工签发) +2. 选 `free` / `standard` tier 与勾选所需 scopes +3. 一次性获得明文 key(形如 `ckjia_mcp_live_5fK8j2nQ…`) +4. 在 mateclaw 部署环境配 `CKJIA_MCP_KEY=ckjia_mcp_live_xxx` +5. Settings ▸ MCP Connections 启用 `ckjia-shopping` 即可 diff --git a/mateclaw-server/src/main/resources/skills/ckjia-shopping/assets/ckjia_logo.png b/mateclaw-server/src/main/resources/skills/ckjia-shopping/assets/ckjia_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..692925e127a6857e77aeafa5228a4907b98b48f9 GIT binary patch literal 10325 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 D)&I}- literal 0 HcmV?d00001 diff --git a/mateclaw-server/src/main/resources/skills/ckjia-shopping/assets/ckjia_logo_new.png b/mateclaw-server/src/main/resources/skills/ckjia-shopping/assets/ckjia_logo_new.png new file mode 100644 index 0000000000000000000000000000000000000000..0df459ef454f17c665cf0e790bb6e26fc22a6196 GIT binary patch literal 12835 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 DVjJvi literal 0 HcmV?d00001