@vocmarket/voc-skill 0.3.38 → 0.3.40

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "voc-intelligence",
3
3
  "description": "VOC intelligence skills for Claude Code: end-to-end VOC business workflows, Xiaohongshu/Douyin/WeChat Channels collection and trend reports, live social VOC collection, Fmode Doubao image analysis, token/recharge checks, evidence-card outputs, prioritized issue pools, single-problem deep dives, competitor maps, 7-day content plans, VOC-backed speaking script co-creation, boss/operator action plans, and multi-turn memory.",
4
- "version": "0.3.38",
4
+ "version": "0.3.40",
5
5
  "author": {
6
6
  "name": "nkkj-BrainHack"
7
7
  }
@@ -915,7 +915,10 @@
915
915
  "desc": "连续翻页时透传上一次返回的 session_id。"
916
916
  }
917
917
  ],
918
- "responseHint": "返回笔记列表,含 note_id、标题、作者、互动数;翻页递增 page 并透传 search_id/session_id。"
918
+ "responseHint": "返回笔记列表,含 note_id、标题、作者、互动数;翻页递增 page 并透传 search_id/session_id。",
919
+ "deprecated": true,
920
+ "replacedBy": "xiaohongshu.app_v2.search_notes",
921
+ "recommendationPriority": -1000
919
922
  },
920
923
  {
921
924
  "id": "xiaohongshu.note_detail",
@@ -952,7 +955,10 @@
952
955
  "desc": "可选:直接传小红书分享文案/链接,与 note_id 二选一。"
953
956
  }
954
957
  ],
955
- "responseHint": "返回单条笔记对象,含正文、图片/视频、话题、互动数。"
958
+ "responseHint": "返回单条笔记对象,含正文、图片/视频、话题、互动数。",
959
+ "deprecated": true,
960
+ "replacedBy": "xiaohongshu.app_v2.get_image_note_detail",
961
+ "recommendationPriority": -1000
956
962
  },
957
963
  {
958
964
  "id": "xiaohongshu.note_comments",
@@ -997,7 +1003,8 @@
997
1003
  "desc": "可选安全令牌,来自 search_notes 返回的 note.xsec_token;部分笔记风控需要。"
998
1004
  }
999
1005
  ],
1000
- "responseHint": "返回评论列表,含 comment_id、文本、点赞、子评论数;翻页用返回的游标。"
1006
+ "responseHint": "返回评论列表,含 comment_id、文本、点赞、子评论数;翻页用返回的游标。",
1007
+ "recommendationPriority": 80
1001
1008
  },
1002
1009
  {
1003
1010
  "id": "xiaohongshu.sub_comments",
@@ -1043,7 +1050,8 @@
1043
1050
  "desc": "分页游标,首页留空,翻页用上一次返回的 start。"
1044
1051
  }
1045
1052
  ],
1046
- "responseHint": "返回某条评论的回复列表;翻页用返回的 start。"
1053
+ "responseHint": "返回某条评论的回复列表;翻页用返回的 start。",
1054
+ "recommendationPriority": 70
1047
1055
  },
1048
1056
  {
1049
1057
  "id": "xiaohongshu.user_info",
@@ -1074,7 +1082,10 @@
1074
1082
  "desc": "用户 id(24 位 hex),来自 search_notes 返回的 note.user.userid;注意不是数字 red_id。"
1075
1083
  }
1076
1084
  ],
1077
- "responseHint": "返回用户资料对象,含粉丝数、获赞收藏、简介。"
1085
+ "responseHint": "返回用户资料对象,含粉丝数、获赞收藏、简介。",
1086
+ "deprecated": true,
1087
+ "replacedBy": "xiaohongshu.app_v2.get_user_info",
1088
+ "recommendationPriority": -1000
1078
1089
  },
1079
1090
  {
1080
1091
  "id": "xiaohongshu.user_notes",
@@ -1113,7 +1124,10 @@
1113
1124
  "desc": "分页游标,首页留空,翻页用上一次返回的 cursor。"
1114
1125
  }
1115
1126
  ],
1116
- "responseHint": "返回该用户的笔记列表;翻页用返回的 cursor。"
1127
+ "responseHint": "返回该用户的笔记列表;翻页用返回的 cursor。",
1128
+ "deprecated": true,
1129
+ "replacedBy": "xiaohongshu.app_v2.get_user_posted_notes",
1130
+ "recommendationPriority": -1000
1117
1131
  },
1118
1132
  {
1119
1133
  "id": "xiaohongshu.topic_notes",
@@ -1190,7 +1204,10 @@
1190
1204
  "desc": "翻页透传上一次返回的 session_id。"
1191
1205
  }
1192
1206
  ],
1193
- "responseHint": "返回话题下笔记列表;翻页透传 last_note_ct/last_note_id/cursor_score/session_id。"
1207
+ "responseHint": "返回话题下笔记列表;翻页透传 last_note_ct/last_note_id/cursor_score/session_id。",
1208
+ "deprecated": true,
1209
+ "replacedBy": "xiaohongshu.app_v2.get_topic_feed",
1210
+ "recommendationPriority": -1000
1194
1211
  },
1195
1212
  {
1196
1213
  "id": "xiaohongshu.search_products",
@@ -1276,7 +1293,10 @@
1276
1293
  "desc": "连续翻页时透传上一次返回的 session_id。"
1277
1294
  }
1278
1295
  ],
1279
- "responseHint": "返回商品列表,含标题、价格、销量、店铺。"
1296
+ "responseHint": "返回商品列表,含标题、价格、销量、店铺。",
1297
+ "deprecated": true,
1298
+ "replacedBy": "xiaohongshu.app_v2.search_products",
1299
+ "recommendationPriority": -1000
1280
1300
  },
1281
1301
  {
1282
1302
  "id": "tiktok.web.fetch_post_detail",
@@ -10405,7 +10425,8 @@
10405
10425
  "app",
10406
10426
  "v2"
10407
10427
  ],
10408
- "requiredParams": []
10428
+ "requiredParams": [],
10429
+ "recommendationPriority": 90
10409
10430
  },
10410
10431
  {
10411
10432
  "id": "xiaohongshu.app_v2.get_video_note_detail",
@@ -10423,7 +10444,8 @@
10423
10444
  "app",
10424
10445
  "v2"
10425
10446
  ],
10426
- "requiredParams": []
10447
+ "requiredParams": [],
10448
+ "recommendationPriority": 90
10427
10449
  },
10428
10450
  {
10429
10451
  "id": "xiaohongshu.app_v2.get_note_comments",
@@ -10479,7 +10501,8 @@
10479
10501
  "app",
10480
10502
  "v2"
10481
10503
  ],
10482
- "requiredParams": []
10504
+ "requiredParams": [],
10505
+ "recommendationPriority": 60
10483
10506
  },
10484
10507
  {
10485
10508
  "id": "xiaohongshu.app_v2.get_user_posted_notes",
@@ -10487,7 +10510,7 @@
10487
10510
  "group": "app-v2",
10488
10511
  "channel": "social",
10489
10512
  "title": "获取用户笔记列表",
10490
- "summary": "获取指定用户已发布的笔记列表,使用游标分页 参数: - user_id: 用户ID,如 \"61b46d790000000010008153\" - share_text: 小红书分享链接(支持APP和Web端分享链接) - 优先使用`user_id`,如果没有则使用`share_t",
10513
+ "summary": "按达人主页拉取已发布笔记。这是「指定达人/作者笔记」的现用入口:user_id 与分享链接二选一,首页 cursor 留空,下一页透传返回的 cursor。不要猜 get_user_note_list 或其他未登记路径。",
10491
10514
  "proxyPath": "xiaohongshu/app_v2/get_user_posted_notes",
10492
10515
  "method": "GET",
10493
10516
  "paramsIn": "query",
@@ -10497,7 +10520,12 @@
10497
10520
  "app",
10498
10521
  "v2"
10499
10522
  ],
10500
- "requiredParams": []
10523
+ "requiredParams": [],
10524
+ "recommendationPriority": 95,
10525
+ "recommendedFor": [
10526
+ "creator_homepage"
10527
+ ],
10528
+ "responseHint": "返回 notes、has_more、cursor。翻页时把 cursor 原样传回,直到 has_more=false。"
10501
10529
  },
10502
10530
  {
10503
10531
  "id": "xiaohongshu.app_v2.get_user_faved_notes",
@@ -10535,7 +10563,8 @@
10535
10563
  ],
10536
10564
  "requiredParams": [
10537
10565
  "keyword"
10538
- ]
10566
+ ],
10567
+ "recommendationPriority": 100
10539
10568
  },
10540
10569
  {
10541
10570
  "id": "xiaohongshu.app_v2.search_users",
@@ -10543,7 +10572,7 @@
10543
10572
  "group": "app-v2",
10544
10573
  "channel": "social",
10545
10574
  "title": "搜索用户",
10546
- "summary": "根据关键词搜索小红书用户,每页返回 20 条结果,支持分页 参数: - keyword: 搜索关键词(必需),如 \"美食博主\" - page: 页码,从 1 开始 - search_id: 搜索ID,翻页时传入首次搜索返回的值 - source: 来源,默认 \"explore_f",
10575
+ "summary": "按达人昵称搜索小红书用户。返回项里的 userid 是 24 位 hex,可直接传给 app_v2/get_user_posted_notes。不要把数字小红书号或主页 URL 当作 user_id。",
10547
10576
  "proxyPath": "xiaohongshu/app_v2/search_users",
10548
10577
  "method": "GET",
10549
10578
  "paramsIn": "query",
@@ -10555,6 +10584,10 @@
10555
10584
  ],
10556
10585
  "requiredParams": [
10557
10586
  "keyword"
10587
+ ],
10588
+ "recommendationPriority": 85,
10589
+ "recommendedFor": [
10590
+ "creator_homepage"
10558
10591
  ]
10559
10592
  },
10560
10593
  {
@@ -10595,7 +10628,8 @@
10595
10628
  ],
10596
10629
  "requiredParams": [
10597
10630
  "keyword"
10598
- ]
10631
+ ],
10632
+ "recommendationPriority": 30
10599
10633
  },
10600
10634
  {
10601
10635
  "id": "xiaohongshu.app_v2.search_groups",
@@ -10715,7 +10749,8 @@
10715
10749
  ],
10716
10750
  "requiredParams": [
10717
10751
  "page_id"
10718
- ]
10752
+ ],
10753
+ "recommendationPriority": 40
10719
10754
  },
10720
10755
  {
10721
10756
  "id": "xiaohongshu.app_v2.get_topic_feed",
@@ -10735,7 +10770,8 @@
10735
10770
  ],
10736
10771
  "requiredParams": [
10737
10772
  "page_id"
10738
- ]
10773
+ ],
10774
+ "recommendationPriority": 40
10739
10775
  },
10740
10776
  {
10741
10777
  "id": "xiaohongshu.app_v2.get_creator_inspiration_feed",
@@ -23234,7 +23270,7 @@
23234
23270
  "platform": "xiaohongshu",
23235
23271
  "channel": "ecommerce",
23236
23272
  "title": "小红书·用户发布笔记",
23237
- "summary": "获取小红书用户发布笔记数据,包括笔记元数据、封面、发布时间、分页游标和互动信号,用于账号监控、创作者研究和内容分析。",
23273
+ "summary": "电商通道的达人主页笔记列表。社媒 app_v2/get_user_posted_notes 不可用时使用。入参是 userId,翻页透传 lastCursor。不要调用无版本号的 get_user_note_list。",
23238
23274
  "method": "GET",
23239
23275
  "paramsIn": "query",
23240
23276
  "proxyPath": "xiaohongshu/get-user-note-list/v1",
@@ -23255,7 +23291,11 @@
23255
23291
  "ecommerce",
23256
23292
  "电商"
23257
23293
  ],
23258
- "billing": 1
23294
+ "billing": 1,
23295
+ "recommendationPriority": 80,
23296
+ "recommendedFor": [
23297
+ "creator_homepage"
23298
+ ]
23259
23299
  },
23260
23300
  {
23261
23301
  "id": "xiaohongshu.get_user_note_list_v2",
package/mcp/src/server.js CHANGED
@@ -66,7 +66,7 @@ function normalizeToolResult(result = {}) {
66
66
  function createServer() {
67
67
  const server = new McpServer({
68
68
  name: 'voc-intelligence',
69
- version: '0.3.38'
69
+ version: '0.3.40'
70
70
  });
71
71
 
72
72
  server.registerTool(
@@ -37,7 +37,7 @@ async function searchVocApis(input = {}) {
37
37
  const matches = (query || input.platform || input.tag)
38
38
  ? searchEndpoints({ query, platform: input.platform, tag: input.tag, limit: input.limit || 20 })
39
39
  : listEndpoints();
40
- const results = matches.map(summarizeEndpoint);
40
+ const results = matches.map(summarizeEndpoint).filter(item => !item.deprecated);
41
41
  const lines = [
42
42
  '## VOC 转发接口清单',
43
43
  '',
@@ -80,6 +80,12 @@ async function getVocApiDoc(input = {}) {
80
80
  });
81
81
  }
82
82
  endpoint = hydrateEndpoint(endpoint);
83
+ if (endpoint.deprecated) {
84
+ const replacement = endpoint.replacedBy ? `请改用 ${endpoint.replacedBy}。` : '请用 voc_api_search 改选现用接口。';
85
+ return errorResult(`接口「${endpoint.id}」已下架。${replacement}`, {
86
+ data: { endpoint: summarizeEndpoint(endpoint) }
87
+ });
88
+ }
83
89
  const paramLines = (endpoint.params || []).map(p => {
84
90
  const flag = p.required ? '必填' : '可选';
85
91
  const def = p.default !== undefined ? `,默认 ${JSON.stringify(p.default)}` : '';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vocmarket/voc-skill",
3
- "version": "0.3.38",
3
+ "version": "0.3.40",
4
4
  "description": "Claude Code VOC intelligence skills for Xiaohongshu, Douyin and WeChat Channels trend/content collection, live social VOC, Fmode image analysis, single-issue deep dives, boss/operator action plans, and multi-turn memory.",
5
5
  "type": "commonjs",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-voc-intelligence",
3
- "version": "0.3.38",
3
+ "version": "0.3.40",
4
4
  "capabilities": {
5
5
  "summary": "三类情报源同源接入:①社媒内容(含抖音/小红书/微信视频号等)②国内电商+创作者情报 ③海外选品。统一 search→doc→call、鉴权计费一致。",
6
6
  "channels": [
@@ -46,6 +46,106 @@ VOC 后端是一个**通用转发网关**(`https://server.fmode.cn/api/voc-soc
46
46
  4. `voc_api_call` 用真实关键词调用;翻页/拉评论时把上一次返回里的 cursor / id 透传进下一次调用。
47
47
  5. 用返回数据继续后续分析(可交给 voc-issue-pool、voc-content-plan 等技能)。
48
48
 
49
+ ## 小红书现用接口(V2)
50
+
51
+ 小红书社媒采集只走下面这些健康的 V2 接口。`voc_api_search` 会把它们排在前面;标了 `deprecated` 的旧接口不要调用,也不要在给用户的说明里提到。
52
+
53
+ | 用途 | 接口 id | proxyPath | 必填 |
54
+ |---|---|---|---|
55
+ | 笔记搜索 | `xiaohongshu.app_v2.search_notes` | `xiaohongshu/app_v2/search_notes` | `keyword` |
56
+ | 图文详情 | `xiaohongshu.app_v2.get_image_note_detail` | `xiaohongshu/app_v2/get_image_note_detail` | `note_id` 或 `share_text` |
57
+ | 视频详情 | `xiaohongshu.app_v2.get_video_note_detail` | `xiaohongshu/app_v2/get_video_note_detail` | `note_id` 或 `share_text` |
58
+ | 一级评论 | `xiaohongshu.note_comments` | `xiaohongshu/app_v2/get_note_comments` | `note_id` |
59
+ | 楼中楼 | `xiaohongshu.sub_comments` | `xiaohongshu/app_v2/get_note_sub_comments` | `note_id` + `comment_id` |
60
+ | 用户资料 | `xiaohongshu.app_v2.get_user_info` | `xiaohongshu/app_v2/get_user_info` | `user_id` |
61
+ | 用户笔记 | `xiaohongshu.app_v2.get_user_posted_notes` | `xiaohongshu/app_v2/get_user_posted_notes` | `user_id` |
62
+ | 话题详情 | `xiaohongshu.app_v2.get_topic_info` | `xiaohongshu/app_v2/get_topic_info` | `page_id` |
63
+ | 话题笔记 | `xiaohongshu.app_v2.get_topic_feed` | `xiaohongshu/app_v2/get_topic_feed` | `page_id` |
64
+ | 商品搜索 | `xiaohongshu.app_v2.search_products` | `xiaohongshu/app_v2/search_products` | `keyword` |
65
+
66
+ 不要手写未登记路径,也不要在路径后面自己加 `/v1`。先用下面的 `id` 调 `voc_api_call`;参数拿不准时再跑 `voc_api_doc`。一次只拉一页,批量翻页前用 `voc_cost_estimate` 估算,结束后用 `voc_usage_report` 核对。
67
+
68
+ ### 按关键词找笔记
69
+
70
+ `sort_type` 只用 `general`、`time_descending`、`popularity_descending`。`note_type` 只用 `不限`、`视频笔记`、`普通笔记`。翻页时递增 `page`,并透传首次返回的 `search_id`、`search_session_id`。
71
+
72
+ ```json
73
+ { "id": "xiaohongshu.app_v2.search_notes", "params": { "keyword": "防晒", "page": 1, "sort_type": "popularity_descending", "note_type": "不限" } }
74
+ ```
75
+
76
+ 从返回里取 `note.id` 和笔记类型。关键词搜索只代表「被搜到的样本」,不能当成某个达人主页的完整历史。
77
+
78
+ ### 笔记详情与评论
79
+
80
+ 视频笔记用视频详情,图文笔记用图文详情。类型不清楚时先调视频详情,没有正文再调图文详情。`note_id` 与 `share_text` 二选一,不要两个都空着。
81
+
82
+ ```json
83
+ { "id": "xiaohongshu.app_v2.get_video_note_detail", "params": { "note_id": "<note_id>" } }
84
+ ```
85
+
86
+ ```json
87
+ { "id": "xiaohongshu.app_v2.get_image_note_detail", "params": { "note_id": "<note_id>" } }
88
+ ```
89
+
90
+ 一级评论用 `note_id`。楼中楼再把一级评论返回的 `comment_id` 传进去,首页 `start` 留空。
91
+
92
+ ```json
93
+ { "id": "xiaohongshu.note_comments", "params": { "note_id": "<note_id>" } }
94
+ ```
95
+
96
+ ```json
97
+ { "id": "xiaohongshu.sub_comments", "params": { "note_id": "<note_id>", "comment_id": "<comment_id>", "start": "" } }
98
+ ```
99
+
100
+ ### 用户、话题、商品
101
+
102
+ 用户资料和达人主页都要 24 位 hex `user_id`。只有昵称时,先走下面的达人主页链路,不要把小红书号或主页 URL 直接当 ID。
103
+
104
+ ```json
105
+ { "id": "xiaohongshu.app_v2.get_user_info", "params": { "user_id": "<24位hex user_id>" } }
106
+ ```
107
+
108
+ 话题笔记先从笔记详情的话题字段拿 `page_id`,再拉话题信息和话题流。`sort` 只用 `trend` 或 `time`。
109
+
110
+ ```json
111
+ { "id": "xiaohongshu.app_v2.get_topic_info", "params": { "page_id": "<page_id>" } }
112
+ ```
113
+
114
+ ```json
115
+ { "id": "xiaohongshu.app_v2.get_topic_feed", "params": { "page_id": "<page_id>", "sort": "trend" } }
116
+ ```
117
+
118
+ 商品搜索按页递增,翻页透传返回的 `search_id`。
119
+
120
+ ```json
121
+ { "id": "xiaohongshu.app_v2.search_products", "params": { "keyword": "防晒", "page": 1 } }
122
+ ```
123
+
124
+ ### 按达人主页采集
125
+
126
+ 用户要「某达人主页的笔记 / 按作者拉笔记 / 补齐某账号历史」时,不要猜 `get_user_note_list`、`/v1` 或其他未登记路径。先查清单,再按下面的链路调用。
127
+
128
+ 1. 只有昵称时,先用 `xiaohongshu.app_v2.search_users` 拿 24 位 hex `user_id`。不要把数字小红书号、昵称或主页 URL 直接当 `user_id`。
129
+ 2. 拉主页笔记优先用 `xiaohongshu.app_v2.get_user_posted_notes`。它走社媒网关,首页 `cursor` 留空,下一页透传上次返回的 `cursor`,直到 `has_more=false`。
130
+ 3. 这条社媒接口翻不完、或明确要电商通道的账号笔记时,改用 `xiaohongshu.get_user_note_list_v1`(`channel=ecommerce`)。入参是 `userId`,翻页透传 `lastCursor`。不要调用无版本号的 `get_user_note_list`。
131
+ 4. 拿到 `note_id` 后,再走上面的图文/视频详情和评论接口。关键词搜索只能证明「这些笔记被搜到」,不能代替达人主页全量列表。
132
+
133
+ 可直接传给 `voc_api_call` 的示例:
134
+
135
+ ```json
136
+ { "id": "xiaohongshu.app_v2.search_users", "params": { "keyword": "达人昵称", "page": 1 } }
137
+ ```
138
+
139
+ ```json
140
+ { "id": "xiaohongshu.app_v2.get_user_posted_notes", "params": { "user_id": "<24位hex user_id>", "cursor": "" } }
141
+ ```
142
+
143
+ ```json
144
+ { "id": "xiaohongshu.get_user_note_list_v1", "params": { "userId": "<24位hex user_id>", "lastCursor": "" } }
145
+ ```
146
+
147
+ 一次只拉一页。批量拉多个达人、多个关键词或持续翻页前,先用 `voc_cost_estimate` 估算次数,跑完用 `voc_usage_report` 核对实际消耗。
148
+
49
149
  ## 创作者侧情报(channel=ecommerce)
50
150
 
51
151
  抖音星图 / 小红书蒲公英(PGY)的创作者数据是 VOC 在**创作者生态**维度的情报源——它服务的是 VOC 一贯的「内容战略、竞对理解、受众洞察、选题与脚本」闭环,而**不是**「替用户挑达人投广告」。同一套数据用来回答这些 VOC 问题:
@@ -16,10 +16,11 @@ live 模式默认保持小规模:
16
16
 
17
17
  ## 接口优先级
18
18
 
19
- live 采集走可用链路,不再依赖已不稳定的旧 App 搜索/详情:
19
+ live 采集只走健康的 V2:
20
20
 
21
- - 搜索:`app_v2/search_notes` → 失败/空结果再降级 `web_v3/fetch_search_notes`
22
- - 详情:优先 `app_v2/get_image_note_detail` / `app_v2/get_video_note_detail`,再回退 `app/get_note_info`
21
+ - 搜索:`app_v2/search_notes`,空结果再降级 `web_v3/fetch_search_notes`
22
+ - 达人主页:`app_v2/get_user_posted_notes`;只有昵称时先用 `app_v2/search_users` 拿 `user_id`
23
+ - 详情:视频笔记用 `app_v2/get_video_note_detail`,图文笔记用 `app_v2/get_image_note_detail`
23
24
  - 评论:`app_v2/get_note_comments`
24
25
 
25
26
  ## 媒体持久化