socialdatax-skills 0.2.10 → 0.2.11

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/README.md CHANGED
@@ -49,7 +49,7 @@ Common search phrases for this skill package:
49
49
  - WeChat Channels hosted MCP endpoint: `https://mcp.52choujiang.com/wechat/mcp`
50
50
  - Hosted transport: `streamable-http`
51
51
  - Authentication: `Authorization: Bearer <SOCIALDATAX_API_KEY>`
52
- - Website: <https://socialdatax.52choujiang.com>
52
+ - Website: <https://socialdatax.com>
53
53
  - XHS current platform MCP registry name: `com.52choujiang/xhs-insights`
54
54
  - XHS future platform MCP registry name: `com.socialdatax/xhs-insights`
55
55
  - Douyin current platform MCP registry name: `com.52choujiang/douyin-insights`
@@ -61,7 +61,7 @@ Common search phrases for this skill package:
61
61
  - WeChat Channels current platform MCP registry name: `com.52choujiang/wechat-channels-insights`
62
62
  - WeChat Channels future platform MCP registry name: `com.socialdatax/wechat-channels-insights`
63
63
  - Unified MCP registry name: none; this package installs skills and calls explicit platform services.
64
- - Current public capability version: `0.2.10`
64
+ - Current public capability version: `0.2.11`
65
65
 
66
66
  ## Direct CLI
67
67
 
@@ -70,7 +70,7 @@ For most skill users, no MCP client configuration is required. Install the skill
70
70
  Examples:
71
71
 
72
72
  ```bash
73
- npx -y socialdatax-skills@latest xhs search --keyword "露营桌" --pretty
73
+ npx -y socialdatax-skills@latest xhs search --keyword "露营" --pretty
74
74
  npx -y socialdatax-skills@latest xhs hot-search --pretty
75
75
  npx -y socialdatax-skills@latest xhs detail --note-id "<note_id>" --pretty
76
76
  npx -y socialdatax-skills@latest xhs comments --note-id "<note_id>" --pretty
@@ -79,7 +79,7 @@ npx -y socialdatax-skills@latest xhs sub-comments --note-id "<note_id>" --commen
79
79
  npx -y socialdatax-skills@latest xhs user-info --user-id "<user_id>" --pretty
80
80
  npx -y socialdatax-skills@latest xhs user-posts --user-id "<user_id>" --pretty
81
81
  npx -y socialdatax-skills@latest douyin hot-search --pretty
82
- npx -y socialdatax-skills@latest douyin search --keyword "露营桌" --pretty
82
+ npx -y socialdatax-skills@latest douyin search --keyword "露营" --pretty
83
83
  npx -y socialdatax-skills@latest douyin detail --aweme-id "<aweme_id>" --pretty
84
84
  npx -y socialdatax-skills@latest douyin comments --aweme-id "<aweme_id>" --pretty
85
85
  npx -y socialdatax-skills@latest douyin comments --aweme-id "<aweme_id>" --all --include-replies --pretty
@@ -91,7 +91,7 @@ npx -y socialdatax-skills@latest douyin user-posts --profile-url "<profile_url_o
91
91
  npx -y socialdatax-skills@latest douyin user-series --sec-user-id "<sec_user_id>" --pretty
92
92
  npx -y socialdatax-skills@latest douyin user-series --profile-url "<profile_url_or_share_text>" --pretty
93
93
  npx -y socialdatax-skills@latest kuaishou hot-search --pretty
94
- npx -y socialdatax-skills@latest kuaishou search --keyword "露营桌" --pretty
94
+ npx -y socialdatax-skills@latest kuaishou search --keyword "露营" --pretty
95
95
  npx -y socialdatax-skills@latest kuaishou detail --photo-id "<photo_id>" --pretty
96
96
  npx -y socialdatax-skills@latest kuaishou detail --url "<kuaishou_content_url_or_share_text>" --pretty
97
97
  npx -y socialdatax-skills@latest kuaishou comments --photo-id "<photo_id>" --pretty
@@ -103,7 +103,7 @@ npx -y socialdatax-skills@latest kuaishou user-info --profile-url "<profile_url_
103
103
  npx -y socialdatax-skills@latest kuaishou user-posts --user-id "<user_id>" --pretty
104
104
  npx -y socialdatax-skills@latest kuaishou user-posts --profile-url "<profile_url_or_share_text>" --pretty
105
105
  npx -y socialdatax-skills@latest weibo hot-search --pretty
106
- npx -y socialdatax-skills@latest weibo search --keyword "露营桌" --pretty
106
+ npx -y socialdatax-skills@latest weibo search --keyword "露营" --pretty
107
107
  npx -y socialdatax-skills@latest weibo detail --post-id "<post_id>" --pretty
108
108
  npx -y socialdatax-skills@latest weibo detail --post-url "<weibo_post_url_or_share_text>" --pretty
109
109
  npx -y socialdatax-skills@latest weibo comments --post-id "<post_id>" --pretty
@@ -117,7 +117,7 @@ npx -y socialdatax-skills@latest weibo user-info --profile-url "<profile_url_or_
117
117
  npx -y socialdatax-skills@latest weibo user-posts --user-id "<user_id>" --pretty
118
118
  npx -y socialdatax-skills@latest weibo user-posts --profile-url "<profile_url_or_share_text>" --pretty
119
119
  npx -y socialdatax-skills@latest wechat hot-search --pretty
120
- npx -y socialdatax-skills@latest wechat search --keyword "露营桌" --pretty
120
+ npx -y socialdatax-skills@latest wechat search --keyword "露营" --pretty
121
121
  npx -y socialdatax-skills@latest wechat detail --encrypted-object-id "<encrypted_object_id>" --pretty
122
122
  npx -y socialdatax-skills@latest wechat detail --url "<wechat_video_url_or_share_text>" --pretty
123
123
  npx -y socialdatax-skills@latest wechat comments --object-id "<object_id>" --object-nonce-id "<object_nonce_id>" --pretty
@@ -141,9 +141,11 @@ For first-level comments, add `--include-replies` to fetch the second-level repl
141
141
 
142
142
  For commands that accept `--page-token`, continue only with the complete returned `next_page_token` from the same pagination chain. Do not modify, truncate, redact, mask, omit, normalize, rebuild, generate, or replace the middle with ellipses.
143
143
 
144
- XHS search uses numeric `--page`; Douyin, Kuaishou, Weibo, and WeChat Channels search do not accept `--page`. For Douyin, Kuaishou, Weibo, and WeChat Channels search, omit `--page-token` on the first request and pass the complete returned `next_page_token` only when continuing the same search chain.
144
+ Search pagination uses `--page-token` when continuing with a returned `next_page_token`. Omit `--page-token` on the first search request and pass the complete returned `next_page_token` only when continuing the same search chain.
145
145
 
146
- Kuaishou search uses `--keyword` and optional `--page-token`; it does not accept Douyin semantic filters. Weibo and WeChat Channels search use `--keyword` and optional `--page-token`.
146
+ XHS, Douyin, Kuaishou, Weibo, and WeChat Channels search use `--keyword` and optional `--page-token`.
147
+ Kuaishou search uses `--keyword` and optional `--page-token`. Kuaishou search does not accept Douyin semantic filters.
148
+ Weibo and WeChat Channels search use `--keyword` and optional `--page-token`.
147
149
 
148
150
  Douyin search filters use semantic values: `--sort-type` supports `general`,
149
151
  `time_descending`, and `like_count_descending`; `--publish-time-range` supports
@@ -185,22 +187,22 @@ This project is not affiliated with, endorsed by, or sponsored by Xiaohongshu, R
185
187
 
186
188
  ```bash
187
189
  npm install
188
- SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs xhs search --keyword "露营桌" --pretty
189
- SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs douyin search --keyword "露营桌" --pretty
190
- SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs kuaishou search --keyword "露营桌" --pretty
191
- SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs weibo search --keyword "露营桌" --pretty
192
- SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs wechat search --keyword "露营桌" --pretty
190
+ SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs xhs search --keyword "露营" --pretty
191
+ SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs douyin search --keyword "露营" --pretty
192
+ SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs kuaishou search --keyword "露营" --pretty
193
+ SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs weibo search --keyword "露营" --pretty
194
+ SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs wechat search --keyword "露营" --pretty
193
195
  ```
194
196
 
195
197
  ### Docker Run
196
198
 
197
199
  ```bash
198
200
  docker build -t socialdatax-skills .
199
- docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills xhs search --keyword "露营桌" --pretty
200
- docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills douyin search --keyword "露营桌" --pretty
201
- docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills kuaishou search --keyword "露营桌" --pretty
202
- docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills weibo search --keyword "露营桌" --pretty
203
- docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills wechat search --keyword "露营桌" --pretty
201
+ docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills xhs search --keyword "露营" --pretty
202
+ docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills douyin search --keyword "露营" --pretty
203
+ docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills kuaishou search --keyword "露营" --pretty
204
+ docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills weibo search --keyword "露营" --pretty
205
+ docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills wechat search --keyword "露营" --pretty
204
206
  ```
205
207
 
206
208
  If Docker Hub is slow from your network, keep the default image unchanged for normal use and override only during local builds:
@@ -232,17 +234,17 @@ npx -y socialdatax-skills@latest install media-search --target codex
232
234
  npx -y socialdatax-skills@latest install media-search --target codex --scope workspace
233
235
  npx -y socialdatax-skills@latest install media-search --target claude-code
234
236
  npx -y socialdatax-skills@latest install media-search --target claude-code --scope workspace
235
- npx -y socialdatax-skills@latest xhs search --keyword "露营桌" --pretty
237
+ npx -y socialdatax-skills@latest xhs search --keyword "露营" --pretty
236
238
  npx -y socialdatax-skills@latest xhs hot-search --pretty
237
239
  npx -y socialdatax-skills@latest douyin hot-search --pretty
238
- npx -y socialdatax-skills@latest douyin search --keyword "露营桌" --pretty
240
+ npx -y socialdatax-skills@latest douyin search --keyword "露营" --pretty
239
241
  npx -y socialdatax-skills@latest douyin user-series --sec-user-id "<sec_user_id>" --pretty
240
242
  npx -y socialdatax-skills@latest kuaishou hot-search --pretty
241
- npx -y socialdatax-skills@latest kuaishou search --keyword "露营桌" --pretty
243
+ npx -y socialdatax-skills@latest kuaishou search --keyword "露营" --pretty
242
244
  npx -y socialdatax-skills@latest weibo hot-search --pretty
243
- npx -y socialdatax-skills@latest weibo search --keyword "露营桌" --pretty
245
+ npx -y socialdatax-skills@latest weibo search --keyword "露营" --pretty
244
246
  npx -y socialdatax-skills@latest wechat hot-search --pretty
245
- npx -y socialdatax-skills@latest wechat search --keyword "露营桌" --pretty
247
+ npx -y socialdatax-skills@latest wechat search --keyword "露营" --pretty
246
248
  ```
247
249
 
248
250
  Available skills:
@@ -436,11 +438,11 @@ For agents that can execute shell commands, use the direct CLI. This is the reco
436
438
 
437
439
  ```bash
438
440
  export SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>"
439
- npx -y socialdatax-skills@latest xhs search --keyword "露营桌" --pretty
440
- npx -y socialdatax-skills@latest douyin search --keyword "露营桌" --pretty
441
- npx -y socialdatax-skills@latest kuaishou search --keyword "露营桌" --pretty
442
- npx -y socialdatax-skills@latest weibo search --keyword "露营桌" --pretty
443
- npx -y socialdatax-skills@latest wechat search --keyword "露营桌" --pretty
441
+ npx -y socialdatax-skills@latest xhs search --keyword "露营" --pretty
442
+ npx -y socialdatax-skills@latest douyin search --keyword "露营" --pretty
443
+ npx -y socialdatax-skills@latest kuaishou search --keyword "露营" --pretty
444
+ npx -y socialdatax-skills@latest weibo search --keyword "露营" --pretty
445
+ npx -y socialdatax-skills@latest wechat search --keyword "露营" --pretty
444
446
  ```
445
447
 
446
448
  MCP client configuration belongs to platform MCP listings. For XHS, use the `xhs-insights` docs; for Douyin, use the `douyin-insights` listing; for Kuaishou, use the `kuaishou-insights` listing; for Weibo, use the `weibo-insights` listing; for WeChat Channels / 视频号, use the `wechat-channels-insights` listing.
@@ -451,7 +453,7 @@ Aily is treated as an OpenClaw / AgentSkills ecosystem channel for this package.
451
453
 
452
454
  Request or manage API access from the product website:
453
455
 
454
- <https://socialdatax.52choujiang.com/?from=npm>
456
+ <https://socialdatax.com/?from=npm>
455
457
 
456
458
  Use the key as a Bearer token in the `Authorization` request header. Do not commit real API keys to code, docs, issues, or screenshots.
457
459
 
package/cli.mjs CHANGED
@@ -7,11 +7,11 @@ import { dirname, join, resolve } from "node:path";
7
7
  import { fileURLToPath } from "node:url";
8
8
 
9
9
  const PACKAGE_NAME = "socialdatax-skills";
10
- const PACKAGE_VERSION = "0.2.10";
10
+ const PACKAGE_VERSION = "0.2.11";
11
11
  const PACKAGE_SPEC = `${PACKAGE_NAME}@latest`;
12
12
  const LOG_PREFIX = `[${PACKAGE_NAME}]`;
13
13
  const MIN_NODE_VERSION = "20.18.1";
14
- const HOMEPAGE_URL = "https://socialdatax.52choujiang.com";
14
+ const HOMEPAGE_URL = "https://socialdatax.com";
15
15
  const PRIMARY_API_KEY_ENV = "SOCIALDATAX_API_KEY";
16
16
  const LEGACY_API_KEY_ENV = "SOCIAL_MEDIA_MCP_API_KEY";
17
17
  const API_KEY_ENV_NAMES = [PRIMARY_API_KEY_ENV, LEGACY_API_KEY_ENV];
@@ -75,7 +75,7 @@ const XHS_DIRECT_ACTION_OPTIONS = {
75
75
  "hot-search": ["pretty"],
76
76
  search: [
77
77
  "keyword",
78
- "page",
78
+ "pageToken",
79
79
  "pages",
80
80
  "all",
81
81
  "maxItems",
@@ -111,7 +111,6 @@ const XHS_DIRECT_ACTION_OPTIONS = {
111
111
  const XHS_DIRECT_ACTION_NAMES = Object.keys(XHS_DIRECT_ACTION_OPTIONS).join(", ");
112
112
  const XHS_OPTION_DISPLAY_NAMES = {
113
113
  keyword: "--keyword",
114
- page: "--page",
115
114
  sortType: "--sort-type",
116
115
  noteType: "--note-type",
117
116
  publishTimeRange: "--publish-time-range",
@@ -1226,7 +1225,7 @@ async function installSkills(args) {
1226
1225
  console.log(` export ${PRIMARY_API_KEY_ENV}="<${PRIMARY_API_KEY_ENV}>"`);
1227
1226
  console.log("");
1228
1227
  console.log("Direct CLI examples:");
1229
- console.log(` npx -y ${PACKAGE_SPEC} xhs search --keyword "露营桌" --pretty`);
1228
+ console.log(` npx -y ${PACKAGE_SPEC} xhs search --keyword "露营" --pretty`);
1230
1229
  console.log(` npx -y ${PACKAGE_SPEC} xhs detail --note-id "<note_id>" --pretty`);
1231
1230
  }
1232
1231
 
@@ -1443,7 +1442,7 @@ function printHelp() {
1443
1442
  console.log(`${PACKAGE_NAME}`);
1444
1443
  console.log("");
1445
1444
  console.log("Commands:");
1446
- console.log(` npx -y ${PACKAGE_SPEC} xhs search --keyword "露营桌" --pretty`);
1445
+ console.log(` npx -y ${PACKAGE_SPEC} xhs search --keyword "露营" --pretty`);
1447
1446
  console.log(" Call the XHS search tool directly and print JSON.");
1448
1447
  console.log("");
1449
1448
  console.log(` npx -y ${PACKAGE_SPEC} xhs hot-search --pretty`);
@@ -1472,7 +1471,7 @@ function printHelp() {
1472
1471
  console.log(` npx -y ${PACKAGE_SPEC} douyin hot-search --pretty`);
1473
1472
  console.log(" Call the Douyin main hot search list tool directly and print JSON.");
1474
1473
  console.log("");
1475
- console.log(` npx -y ${PACKAGE_SPEC} douyin search --keyword "露营桌" --pretty`);
1474
+ console.log(` npx -y ${PACKAGE_SPEC} douyin search --keyword "露营" --pretty`);
1476
1475
  console.log(" Call the Douyin work search tool directly and print JSON.");
1477
1476
  console.log("");
1478
1477
  console.log(` npx -y ${PACKAGE_SPEC} douyin detail --aweme-id "<aweme_id>" --pretty`);
@@ -1510,7 +1509,7 @@ function printHelp() {
1510
1509
  console.log(` npx -y ${PACKAGE_SPEC} kuaishou hot-search --pretty`);
1511
1510
  console.log(" Call the Kuaishou short-video hot list tool directly and print JSON.");
1512
1511
  console.log("");
1513
- console.log(` npx -y ${PACKAGE_SPEC} kuaishou search --keyword "露营桌" --pretty`);
1512
+ console.log(` npx -y ${PACKAGE_SPEC} kuaishou search --keyword "露营" --pretty`);
1514
1513
  console.log(" Call the Kuaishou work search tool directly and print JSON.");
1515
1514
  console.log("");
1516
1515
  console.log(` npx -y ${PACKAGE_SPEC} kuaishou detail --photo-id "<photo_id>" --pretty`);
@@ -1548,7 +1547,7 @@ function printHelp() {
1548
1547
  console.log(` npx -y ${PACKAGE_SPEC} weibo hot-search --pretty`);
1549
1548
  console.log(" Call the Weibo hot-search list tool directly and print JSON.");
1550
1549
  console.log("");
1551
- console.log(` npx -y ${PACKAGE_SPEC} weibo search --keyword "露营桌" --pretty`);
1550
+ console.log(` npx -y ${PACKAGE_SPEC} weibo search --keyword "露营" --pretty`);
1552
1551
  console.log(" Call the Weibo post search tool directly and print JSON.");
1553
1552
  console.log("");
1554
1553
  console.log(` npx -y ${PACKAGE_SPEC} weibo detail --post-id "<post_id>" --pretty`);
@@ -1587,7 +1586,7 @@ function printHelp() {
1587
1586
  console.log(` npx -y ${PACKAGE_SPEC} wechat hot-search --pretty`);
1588
1587
  console.log(" Call the WeChat Channels / 视频号 hot-search list tool directly and print JSON.");
1589
1588
  console.log("");
1590
- console.log(` npx -y ${PACKAGE_SPEC} wechat search --keyword "露营桌" --pretty`);
1589
+ console.log(` npx -y ${PACKAGE_SPEC} wechat search --keyword "露营" --pretty`);
1591
1590
  console.log(" Call the WeChat Channels / 视频号 video search tool directly and print JSON.");
1592
1591
  console.log("");
1593
1592
  console.log(` npx -y ${PACKAGE_SPEC} wechat detail --encrypted-object-id "<encrypted_object_id>" --pretty`);
@@ -1695,8 +1694,6 @@ function printHelp() {
1695
1694
  console.log(" --profile-url <profile-url-or-share-text>");
1696
1695
  console.log(" --user-id <user_id>");
1697
1696
  console.log(" --sec-user-id <sec_user_id>");
1698
- console.log(" --page <number>");
1699
- console.log(" XHS search only. Douyin, Kuaishou, Weibo, and WeChat Channels search do not accept --page.");
1700
1697
  console.log(" --pages <number>");
1701
1698
  console.log(" Fetch and merge N pages from the current starting point for search, comments, replies, creator content lists, and creator series.");
1702
1699
  console.log(" --all");
@@ -1719,7 +1716,7 @@ function printHelp() {
1719
1716
  console.log(" --content-type <all|video|image>");
1720
1717
  console.log(" Douyin content type filter; omit for all content types.");
1721
1718
  console.log(" --page-token <token>");
1722
- console.log(" Continue token-paginated commands with the complete returned next_page_token. For Douyin, Kuaishou, Weibo, and WeChat Channels search, omit it on the first request.");
1719
+ console.log(" Continue token-paginated commands with the complete returned next_page_token. For search, omit it on the first request.");
1723
1720
  console.log(" --sort-type <all|latest|popular>");
1724
1721
  console.log(" WeChat Channels / 视频号 search sort; omit for default sort.");
1725
1722
  console.log(" --duration-range <all|under_5_min|between_5_and_20_min|over_20_min>");
@@ -2377,10 +2374,6 @@ function buildXhsSearchCall(options) {
2377
2374
  if (!options.keyword) {
2378
2375
  throw new Error("Missing --keyword for xhs search.");
2379
2376
  }
2380
- const page =
2381
- options.page === undefined
2382
- ? 1
2383
- : parsePositiveIntegerOption(options.page, "--page");
2384
2377
  const sortType = parseSemanticOption(
2385
2378
  options.sortType || "general",
2386
2379
  "--sort-type",
@@ -2404,8 +2397,10 @@ function buildXhsSearchCall(options) {
2404
2397
  }
2405
2398
  const toolArguments = {
2406
2399
  keyword: options.keyword,
2407
- page,
2408
2400
  };
2401
+ if (options.pageToken) {
2402
+ toolArguments.page_token = options.pageToken;
2403
+ }
2409
2404
  if (options.sortType !== undefined) {
2410
2405
  toolArguments.sort_type = sortType;
2411
2406
  }
@@ -2842,7 +2837,7 @@ async function collectPaginatedDirectData(
2842
2837
  }
2843
2838
  if (markerRepeated) {
2844
2839
  throw new Error(
2845
- `Pagination stopped because ${nextMarkerName(currentOperation)} repeated.`
2840
+ `Pagination stopped because ${nextMarkerName()} repeated.`
2846
2841
  );
2847
2842
  }
2848
2843
  seenNextMarkers.add(markerKey);
@@ -3058,18 +3053,12 @@ function reachedMaxItems(items, maxItems) {
3058
3053
  }
3059
3054
 
3060
3055
  function readNextPageMarker(operation, pageData) {
3061
- if (operation.platform.id === "xhs" && operation.operation === "search") {
3062
- const page = pageData?.next_page;
3063
- return page === undefined || page === null || page === "" ? undefined : page;
3064
- }
3065
3056
  const token = pageData?.next_page_token;
3066
3057
  return typeof token === "string" && token ? token : undefined;
3067
3058
  }
3068
3059
 
3069
- function nextMarkerName(operation) {
3070
- return operation.platform.id === "xhs" && operation.operation === "search"
3071
- ? "next_page"
3072
- : "next_page_token";
3060
+ function nextMarkerName() {
3061
+ return "next_page_token";
3073
3062
  }
3074
3063
 
3075
3064
  function initialPaginationMarkers(operation) {
@@ -3078,19 +3067,13 @@ function initialPaginationMarkers(operation) {
3078
3067
  }
3079
3068
 
3080
3069
  function currentPageMarker(operation) {
3081
- if (operation.platform.id === "xhs" && operation.operation === "search") {
3082
- return operation.arguments.page;
3083
- }
3084
3070
  return operation.arguments.page_token;
3085
3071
  }
3086
3072
 
3087
3073
  function operationWithNextPageMarker(operation, nextMarker) {
3088
3074
  const nextOperation = cloneDirectOperation(operation);
3089
- if (operation.platform.id === "xhs" && operation.operation === "search") {
3090
- nextOperation.arguments.page = nextMarker;
3091
- } else {
3092
- nextOperation.arguments.page_token = nextMarker;
3093
- }
3075
+ nextOperation.arguments.page_token = nextMarker;
3076
+ delete nextOperation.arguments.page;
3094
3077
  return nextOperation;
3095
3078
  }
3096
3079
 
@@ -3109,11 +3092,8 @@ function buildPaginatedData({
3109
3092
  page_count: pageCount,
3110
3093
  item_count: items.length,
3111
3094
  };
3112
- if (operation.platform.id === "xhs" && operation.operation === "search") {
3113
- data.next_page = nextMarker ?? null;
3114
- } else {
3115
- data.next_page_token = nextMarker || "";
3116
- }
3095
+ delete data.next_page;
3096
+ data.next_page_token = nextMarker || "";
3117
3097
  return data;
3118
3098
  }
3119
3099
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "socialdatax-skills",
3
- "version": "0.2.10",
3
+ "version": "0.2.11",
4
4
  "description": "SocialDataX / 社媒数据助手 skill installer and direct CLI helper for hosted platform social media MCP services.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -58,9 +58,9 @@
58
58
  "wechat-channels-data",
59
59
  "wechat-channels-search"
60
60
  ],
61
- "homepage": "https://socialdatax.52choujiang.com",
61
+ "homepage": "https://socialdatax.com",
62
62
  "bugs": {
63
- "url": "https://socialdatax.52choujiang.com"
63
+ "url": "https://socialdatax.com"
64
64
  },
65
65
  "repository": {
66
66
  "type": "git",
@@ -15,7 +15,7 @@ metadata:
15
15
  package: "socialdatax-skills"
16
16
  bins: []
17
17
  emoji: "💬"
18
- homepage: "https://socialdatax.52choujiang.com/?from=npm"
18
+ homepage: "https://socialdatax.com/?from=npm"
19
19
  ---
20
20
  <!-- AUTO-GENERATED from socialdatax-skill-source. Do not edit directly; run `node scripts/generate_socialdatax_skills.mjs`. -->
21
21
 
@@ -33,8 +33,8 @@ Current platform support:
33
33
 
34
34
  ## API Key
35
35
 
36
- Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.52choujiang.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
37
- 获取或管理 API Key:访问 <https://socialdatax.52choujiang.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
36
+ Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
37
+ 获取或管理 API Key:访问 <https://socialdatax.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
38
38
 
39
39
  ## Preferred Direct CLI
40
40
 
@@ -15,7 +15,7 @@ metadata:
15
15
  package: "socialdatax-skills"
16
16
  bins: []
17
17
  emoji: "📄"
18
- homepage: "https://socialdatax.52choujiang.com/?from=npm"
18
+ homepage: "https://socialdatax.com/?from=npm"
19
19
  ---
20
20
  <!-- AUTO-GENERATED from socialdatax-skill-source. Do not edit directly; run `node scripts/generate_socialdatax_skills.mjs`. -->
21
21
 
@@ -33,8 +33,8 @@ Current platform support:
33
33
 
34
34
  ## API Key
35
35
 
36
- Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.52choujiang.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
37
- 获取或管理 API Key:访问 <https://socialdatax.52choujiang.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
36
+ Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
37
+ 获取或管理 API Key:访问 <https://socialdatax.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
38
38
 
39
39
  ## Preferred Direct CLI
40
40
 
@@ -15,7 +15,7 @@ metadata:
15
15
  package: "socialdatax-skills"
16
16
  bins: []
17
17
  emoji: "🔍"
18
- homepage: "https://socialdatax.52choujiang.com/?from=npm"
18
+ homepage: "https://socialdatax.com/?from=npm"
19
19
  ---
20
20
  <!-- AUTO-GENERATED from socialdatax-skill-source. Do not edit directly; run `node scripts/generate_socialdatax_skills.mjs`. -->
21
21
 
@@ -33,8 +33,8 @@ Current platform support:
33
33
 
34
34
  ## API Key
35
35
 
36
- Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.52choujiang.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
37
- 获取或管理 API Key:访问 <https://socialdatax.52choujiang.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
36
+ Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
37
+ 获取或管理 API Key:访问 <https://socialdatax.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
38
38
 
39
39
  ## Preferred Direct CLI
40
40
 
@@ -63,7 +63,7 @@ Required arguments:
63
63
 
64
64
  Optional arguments:
65
65
 
66
- - XHS `--page <number>`: 1-based page number; use `1` for the first page and only increase it when continuing pagination.
66
+ - XHS `--page-token <next_page_token>`: opaque pagination token; omit it on the first search request. Continue only with the complete returned `next_page_token` from the same search pagination chain. Do not modify, truncate, redact, mask, omit, normalize, rebuild, generate, or replace the middle with ellipses.
67
67
  - XHS `--sort-type <general|time_descending|like_count_descending|comment_count_descending|collect_count_descending>`: optional sort value; omit it for default sorting.
68
68
  - XHS `--note-type <all|image|video>`: optional note type filter; default is `all`.
69
69
  - XHS `--publish-time-range <all|day|week|half_year>`: optional publish-time filter; default is `all`.
@@ -72,7 +72,7 @@ Optional arguments:
72
72
  - Douyin `--publish-time-range <all|day|week|half_year>`: optional publish-time filter; omit it for no publish-time filter.
73
73
  - Douyin `--duration-range <all|under_1_minute|one_to_five_minutes|over_5_minutes>`: optional duration filter; omit it for no duration filter.
74
74
  - Douyin `--content-type <all|video|image>`: optional content type filter; omit it for all content types.
75
- - XHS `--pages <n>`: fetch and merge N search pages from the current starting point; continue with returned `next_page`.
75
+ - XHS `--pages <n>`: fetch and merge N search pages from the current starting point; continue with returned `next_page_token`.
76
76
  - Douyin `--pages <n>`: fetch and merge N search pages from the current starting point; continue with returned `next_page_token`.
77
77
  - Kuaishou `--pages <n>`: fetch and merge N search pages from the current starting point; continue with returned `next_page_token`.
78
78
  - `--max-items <n>`: stop after collecting N search results.
@@ -159,9 +159,9 @@ MCP tools matching the direct CLI commands above:
159
159
  - `weibo_search_posts`
160
160
  - `wechat_search_videos`
161
161
 
162
- If MCP tools are already available in the current agent, call `xhs_search_notes` with:
162
+ For XHS, call `xhs_search_notes` with:
163
163
  - `keyword`: required search phrase or topic; use the user's actual intent and trim whitespace.
164
- - `page`: optional 1-based page number; use `1` for the first page.
164
+ - `page_token`: optional opaque pagination token. Continue only with the complete returned `next_page_token` from the same search pagination chain. Do not modify, truncate, redact, mask, omit, normalize, rebuild, generate, or replace the middle with ellipses.
165
165
  - `sort_type`: optional, one of `general`, `time_descending`, `like_count_descending`, `comment_count_descending`, `collect_count_descending`; omit it for default sorting.
166
166
  - `note_type`: optional search filter, one of `all`, `image`, `video`; default is `all`.
167
167
  - `publish_time_range`: optional search filter, one of `all`, `day`, `week`, `half_year`; default is `all`.
@@ -177,7 +177,8 @@ Do not pass `page` to `douyin_search_videos`; omit `page_token` on the first req
177
177
  - `duration_range`: optional duration filter, one of `all`, `under_1_minute`, `one_to_five_minutes`, `over_5_minutes`; omit it for no duration filter.
178
178
  - `content_type`: optional content type filter, one of `all`, `video`, `image`; omit it for all content types.
179
179
 
180
- Continue XHS pagination only when `next_page` is not `null`, and keep the same `keyword`, `sort_type`, `note_type`, and `publish_time_range` while changing only `page`.
180
+ Do not pass `page` to `xhs_search_notes`; omit `page_token` on the first request.
181
+ Continue XHS pagination only when `next_page_token` is not empty, and pass the complete returned `next_page_token` back unchanged as `page_token` for the same keyword, sort, note type, publish-time range, and caller chain.
181
182
  Continue Douyin pagination only when `next_page_token` is not empty. Pass the complete returned `next_page_token` back unchanged as `page_token` for the same keyword and filter chain.
182
183
  Do not stop only because one page has empty `items`.
183
184
  For Kuaishou, call `kuaishou_search_videos` with:
@@ -15,7 +15,7 @@ metadata:
15
15
  package: "socialdatax-skills"
16
16
  bins: []
17
17
  emoji: "🎙️"
18
- homepage: "https://socialdatax.52choujiang.com/?from=npm"
18
+ homepage: "https://socialdatax.com/?from=npm"
19
19
  ---
20
20
  <!-- AUTO-GENERATED from socialdatax-skill-source. Do not edit directly; run `node scripts/generate_socialdatax_skills.mjs`. -->
21
21
 
@@ -33,8 +33,8 @@ Current platform support:
33
33
 
34
34
  ## API Key
35
35
 
36
- Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.52choujiang.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
37
- 获取或管理 API Key:访问 <https://socialdatax.52choujiang.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
36
+ Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
37
+ 获取或管理 API Key:访问 <https://socialdatax.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
38
38
 
39
39
  Required arguments:
40
40
 
@@ -15,7 +15,7 @@ metadata:
15
15
  package: "socialdatax-skills"
16
16
  bins: []
17
17
  emoji: "👤"
18
- homepage: "https://socialdatax.52choujiang.com/?from=npm"
18
+ homepage: "https://socialdatax.com/?from=npm"
19
19
  ---
20
20
  <!-- AUTO-GENERATED from socialdatax-skill-source. Do not edit directly; run `node scripts/generate_socialdatax_skills.mjs`. -->
21
21
 
@@ -33,8 +33,8 @@ Current platform support:
33
33
 
34
34
  ## API Key
35
35
 
36
- Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.52choujiang.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
37
- 获取或管理 API Key:访问 <https://socialdatax.52choujiang.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
36
+ Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
37
+ 获取或管理 API Key:访问 <https://socialdatax.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
38
38
 
39
39
  ## Preferred Direct CLI
40
40
 
@@ -15,7 +15,7 @@ metadata:
15
15
  package: "socialdatax-skills"
16
16
  bins: []
17
17
  emoji: "🗂️"
18
- homepage: "https://socialdatax.52choujiang.com/?from=npm"
18
+ homepage: "https://socialdatax.com/?from=npm"
19
19
  ---
20
20
  <!-- AUTO-GENERATED from socialdatax-skill-source. Do not edit directly; run `node scripts/generate_socialdatax_skills.mjs`. -->
21
21
 
@@ -34,8 +34,8 @@ Current platform support:
34
34
 
35
35
  ## API Key
36
36
 
37
- Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.52choujiang.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
38
- 获取或管理 API Key:访问 <https://socialdatax.52choujiang.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
37
+ Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
38
+ 获取或管理 API Key:访问 <https://socialdatax.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
39
39
 
40
40
  ## Preferred Direct CLI
41
41
 
@@ -15,7 +15,7 @@ metadata:
15
15
  package: "socialdatax-skills"
16
16
  bins: []
17
17
  emoji: "🔎"
18
- homepage: "https://socialdatax.52choujiang.com/?from=npm"
18
+ homepage: "https://socialdatax.com/?from=npm"
19
19
  ---
20
20
  <!-- AUTO-GENERATED from socialdatax-skill-source. Do not edit directly; run `node scripts/generate_socialdatax_skills.mjs`. -->
21
21
 
@@ -59,8 +59,8 @@ Current platform support:
59
59
 
60
60
  ## API Key
61
61
 
62
- Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.52choujiang.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
63
- 获取或管理 API Key:访问 <https://socialdatax.52choujiang.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
62
+ Use `SOCIALDATAX_API_KEY` for SocialDataX requests. The only official website for requesting or managing API access is <https://socialdatax.com/?from=npm>. If a user asks where to get a key, provide only this URL; do not infer alternate domains.
63
+ 获取或管理 API Key:访问 <https://socialdatax.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
64
64
 
65
65
  ## Preferred Direct CLI
66
66
 
@@ -163,8 +163,8 @@ Required arguments:
163
163
 
164
164
  Optional arguments:
165
165
 
166
- - XHS numeric `page` is only for XHS search; Douyin, Kuaishou, Weibo, and WeChat Channels search use `page_token` only and do not accept `page`. Omit `page_token` on the first token-paginated search request, and continue only with the complete returned `next_page_token` from the same chain.
167
- - `--page-token <next_page_token>`: use for Douyin/Kuaishou/Weibo/WeChat Channels search continuation and for token-paginated comments, replies, creator posts, creator notes, creator videos, and creator series. Keep the original topic, content item, or creator target stable. Do not modify, truncate, redact, mask, omit, normalize, rebuild, generate, or replace the middle with ellipses.
166
+ - Search continuation uses `--page-token <next_page_token>` when a returned `next_page_token` is available. Omit `page_token` on the first token-paginated search request, and continue only with the complete returned `next_page_token` from the same chain.
167
+ - `--page-token <next_page_token>`: use for XHS/Douyin/Kuaishou/Weibo/WeChat Channels search continuation and for token-paginated comments, replies, creator posts, creator notes, creator videos, and creator series. Keep the original topic, content item, or creator target stable. Do not modify, truncate, redact, mask, omit, normalize, rebuild, generate, or replace the middle with ellipses.
168
168
  - `--pages <n>`: fetch and merge N pages for search, comments, replies, creator posts, or creator series.
169
169
  - `--all`: fetch comments, replies, creator posts, or creator series until `next_page_token` is empty; do not use it for search.
170
170
  - `--max-items <n>`: stop after collecting N primary results.
@@ -201,7 +201,7 @@ MCP tools matching the direct CLI commands above:
201
201
  - WECHAT: `wechat_get_hot_search_list`, `wechat_search_videos`, `wechat_get_video_detail_by_encrypted_object_id`, `wechat_get_video_comments_by_object_id`, `wechat_get_user_info_by_user_id`, `wechat_get_user_posted_videos_by_user_id`, `wechat_get_video_detail_by_url`, `wechat_get_video_comments_by_url`, `wechat_get_user_posted_videos_by_url`, `wechat_get_video_comment_replies_by_comment_id`
202
202
 
203
203
  Use the automatically listed MCP tools above as the source of truth for tool names. Pick the narrowest tool for the user's platform and task.
204
- Use numeric `page` only for `xhs_search_notes`. Do not pass `page` to `douyin_search_videos`, `kuaishou_search_videos`, `weibo_search_posts`, or `wechat_search_videos`; omit `page_token` on the first request and pass only the complete returned `next_page_token` when continuing the same chain.
204
+ For search pagination, omit `page_token` on the first request and pass only the complete returned `next_page_token` when continuing the same chain. Use `page_token` for all new search continuation calls.
205
205
 
206
206
  ## Output Guidance
207
207