socialdatax-skills 0.2.10 → 0.2.12
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 +62 -34
- package/cli.mjs +140 -40
- package/package.json +13 -4
- package/skills/media-comments/SKILL.md +3 -3
- package/skills/media-detail/SKILL.md +3 -3
- package/skills/media-search/SKILL.md +9 -8
- package/skills/media-transcript/SKILL.md +3 -3
- package/skills/media-user-info/SKILL.md +3 -3
- package/skills/media-user-posts/SKILL.md +3 -3
- package/skills/sensitive-check/SKILL.md +71 -0
- package/skills/sensitive-check/agents/openai.yaml +7 -0
- package/skills/socialdatax-content-research-assistant/SKILL.md +6 -6
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This public package provides the unified skill installer and direct CLI helper for SocialDataX services.
|
|
4
4
|
|
|
5
|
-
The current public tools support 小红书 / Xiaohongshu / XHS / RedNote, 抖音 / Douyin, 快手 / Kuaishou / Kwai, 微博 / Weibo, and 视频号 / WeChat Channels content research and analysis workflows. The public skill layer is intentionally named by
|
|
5
|
+
The current public tools support 小红书 / Xiaohongshu / XHS / RedNote, 抖音 / Douyin, 快手 / Kuaishou / Kwai, 微博 / Weibo, and 视频号 / WeChat Channels content research and analysis workflows, plus SocialDataX 敏感检测 text checks. The public skill layer is intentionally named by capability so supported services can evolve without changing the installation model.
|
|
6
6
|
|
|
7
7
|
- direct `npx` JSON commands for agents that can run shell commands
|
|
8
8
|
- AgentSkills-compatible installers split by capability for OpenClaw, Hermes Agent, Codex, Claude Code, and general agent skill directories
|
|
@@ -39,6 +39,10 @@ Common search phrases for this skill package:
|
|
|
39
39
|
- `视频号 skills`
|
|
40
40
|
- `SocialDataX content research`
|
|
41
41
|
- `content research assistant`
|
|
42
|
+
- `敏感检测 SocialDataX`
|
|
43
|
+
- `sensitive check skill`
|
|
44
|
+
- `content safety skill`
|
|
45
|
+
- `text safety check`
|
|
42
46
|
|
|
43
47
|
## Platform MCPs
|
|
44
48
|
|
|
@@ -47,9 +51,10 @@ Common search phrases for this skill package:
|
|
|
47
51
|
- Kuaishou hosted MCP endpoint: `https://mcp.52choujiang.com/kuaishou/mcp`
|
|
48
52
|
- Weibo hosted MCP endpoint: `https://mcp.52choujiang.com/weibo/mcp`
|
|
49
53
|
- WeChat Channels hosted MCP endpoint: `https://mcp.52choujiang.com/wechat/mcp`
|
|
54
|
+
- Sensitive Check hosted MCP endpoint: `https://mcp.52choujiang.com/sensitive-check/mcp`
|
|
50
55
|
- Hosted transport: `streamable-http`
|
|
51
56
|
- Authentication: `Authorization: Bearer <SOCIALDATAX_API_KEY>`
|
|
52
|
-
- Website: <https://socialdatax.
|
|
57
|
+
- Website: <https://socialdatax.com>
|
|
53
58
|
- XHS current platform MCP registry name: `com.52choujiang/xhs-insights`
|
|
54
59
|
- XHS future platform MCP registry name: `com.socialdatax/xhs-insights`
|
|
55
60
|
- Douyin current platform MCP registry name: `com.52choujiang/douyin-insights`
|
|
@@ -60,8 +65,10 @@ Common search phrases for this skill package:
|
|
|
60
65
|
- Weibo future platform MCP registry name: `com.socialdatax/weibo-insights`
|
|
61
66
|
- WeChat Channels current platform MCP registry name: `com.52choujiang/wechat-channels-insights`
|
|
62
67
|
- WeChat Channels future platform MCP registry name: `com.socialdatax/wechat-channels-insights`
|
|
68
|
+
- Sensitive Check MCP server name: `sensitive-check`
|
|
69
|
+
- Sensitive Check future MCP registry name: `com.socialdatax/sensitive-check`
|
|
63
70
|
- Unified MCP registry name: none; this package installs skills and calls explicit platform services.
|
|
64
|
-
- Current public capability version: `0.2.
|
|
71
|
+
- Current public capability version: `0.2.12`
|
|
65
72
|
|
|
66
73
|
## Direct CLI
|
|
67
74
|
|
|
@@ -70,7 +77,7 @@ For most skill users, no MCP client configuration is required. Install the skill
|
|
|
70
77
|
Examples:
|
|
71
78
|
|
|
72
79
|
```bash
|
|
73
|
-
npx -y socialdatax-skills@latest xhs search --keyword "
|
|
80
|
+
npx -y socialdatax-skills@latest xhs search --keyword "露营" --pretty
|
|
74
81
|
npx -y socialdatax-skills@latest xhs hot-search --pretty
|
|
75
82
|
npx -y socialdatax-skills@latest xhs detail --note-id "<note_id>" --pretty
|
|
76
83
|
npx -y socialdatax-skills@latest xhs comments --note-id "<note_id>" --pretty
|
|
@@ -79,7 +86,7 @@ npx -y socialdatax-skills@latest xhs sub-comments --note-id "<note_id>" --commen
|
|
|
79
86
|
npx -y socialdatax-skills@latest xhs user-info --user-id "<user_id>" --pretty
|
|
80
87
|
npx -y socialdatax-skills@latest xhs user-posts --user-id "<user_id>" --pretty
|
|
81
88
|
npx -y socialdatax-skills@latest douyin hot-search --pretty
|
|
82
|
-
npx -y socialdatax-skills@latest douyin search --keyword "
|
|
89
|
+
npx -y socialdatax-skills@latest douyin search --keyword "露营" --pretty
|
|
83
90
|
npx -y socialdatax-skills@latest douyin detail --aweme-id "<aweme_id>" --pretty
|
|
84
91
|
npx -y socialdatax-skills@latest douyin comments --aweme-id "<aweme_id>" --pretty
|
|
85
92
|
npx -y socialdatax-skills@latest douyin comments --aweme-id "<aweme_id>" --all --include-replies --pretty
|
|
@@ -91,7 +98,7 @@ npx -y socialdatax-skills@latest douyin user-posts --profile-url "<profile_url_o
|
|
|
91
98
|
npx -y socialdatax-skills@latest douyin user-series --sec-user-id "<sec_user_id>" --pretty
|
|
92
99
|
npx -y socialdatax-skills@latest douyin user-series --profile-url "<profile_url_or_share_text>" --pretty
|
|
93
100
|
npx -y socialdatax-skills@latest kuaishou hot-search --pretty
|
|
94
|
-
npx -y socialdatax-skills@latest kuaishou search --keyword "
|
|
101
|
+
npx -y socialdatax-skills@latest kuaishou search --keyword "露营" --pretty
|
|
95
102
|
npx -y socialdatax-skills@latest kuaishou detail --photo-id "<photo_id>" --pretty
|
|
96
103
|
npx -y socialdatax-skills@latest kuaishou detail --url "<kuaishou_content_url_or_share_text>" --pretty
|
|
97
104
|
npx -y socialdatax-skills@latest kuaishou comments --photo-id "<photo_id>" --pretty
|
|
@@ -103,7 +110,7 @@ npx -y socialdatax-skills@latest kuaishou user-info --profile-url "<profile_url_
|
|
|
103
110
|
npx -y socialdatax-skills@latest kuaishou user-posts --user-id "<user_id>" --pretty
|
|
104
111
|
npx -y socialdatax-skills@latest kuaishou user-posts --profile-url "<profile_url_or_share_text>" --pretty
|
|
105
112
|
npx -y socialdatax-skills@latest weibo hot-search --pretty
|
|
106
|
-
npx -y socialdatax-skills@latest weibo search --keyword "
|
|
113
|
+
npx -y socialdatax-skills@latest weibo search --keyword "露营" --pretty
|
|
107
114
|
npx -y socialdatax-skills@latest weibo detail --post-id "<post_id>" --pretty
|
|
108
115
|
npx -y socialdatax-skills@latest weibo detail --post-url "<weibo_post_url_or_share_text>" --pretty
|
|
109
116
|
npx -y socialdatax-skills@latest weibo comments --post-id "<post_id>" --pretty
|
|
@@ -117,7 +124,7 @@ npx -y socialdatax-skills@latest weibo user-info --profile-url "<profile_url_or_
|
|
|
117
124
|
npx -y socialdatax-skills@latest weibo user-posts --user-id "<user_id>" --pretty
|
|
118
125
|
npx -y socialdatax-skills@latest weibo user-posts --profile-url "<profile_url_or_share_text>" --pretty
|
|
119
126
|
npx -y socialdatax-skills@latest wechat hot-search --pretty
|
|
120
|
-
npx -y socialdatax-skills@latest wechat search --keyword "
|
|
127
|
+
npx -y socialdatax-skills@latest wechat search --keyword "露营" --pretty
|
|
121
128
|
npx -y socialdatax-skills@latest wechat detail --encrypted-object-id "<encrypted_object_id>" --pretty
|
|
122
129
|
npx -y socialdatax-skills@latest wechat detail --url "<wechat_video_url_or_share_text>" --pretty
|
|
123
130
|
npx -y socialdatax-skills@latest wechat comments --object-id "<object_id>" --object-nonce-id "<object_nonce_id>" --pretty
|
|
@@ -127,9 +134,10 @@ npx -y socialdatax-skills@latest wechat replies --object-id "<object_id>" --obje
|
|
|
127
134
|
npx -y socialdatax-skills@latest wechat user-info --user-id "<finder_user_id>" --pretty
|
|
128
135
|
npx -y socialdatax-skills@latest wechat user-posts --user-id "<finder_user_id>" --pretty
|
|
129
136
|
npx -y socialdatax-skills@latest wechat user-posts --url "<wechat_video_url_or_share_text>" --pretty
|
|
137
|
+
npx -y socialdatax-skills@latest sensitive-check text --text "<content>" --platform xhs --pretty
|
|
130
138
|
```
|
|
131
139
|
|
|
132
|
-
|
|
140
|
+
Most direct CLI commands print a JSON envelope with `platform`, `tool`, `arguments`, and `data`. `sensitive-check` prints `platform`, `tool`, and `data` only; it does not echo the original text in CLI output.
|
|
133
141
|
|
|
134
142
|
For XHS outputs with a returned `note_url` field, when `note_url` is non-null, preserve it exactly as the full URL, including `xsec_token` query parameters, such as in final answers or display. Do not modify, truncate, redact, normalize, rebuild, or replace it with a link assembled from `note_id`. If `note_url` is null, do not synthesize a public link from `note_id`.
|
|
135
143
|
|
|
@@ -141,9 +149,11 @@ For first-level comments, add `--include-replies` to fetch the second-level repl
|
|
|
141
149
|
|
|
142
150
|
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
151
|
|
|
144
|
-
|
|
152
|
+
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
153
|
|
|
146
|
-
|
|
154
|
+
XHS, Douyin, Kuaishou, Weibo, and WeChat Channels search use `--keyword` and optional `--page-token`.
|
|
155
|
+
Kuaishou search uses `--keyword` and optional `--page-token`. Kuaishou search does not accept Douyin semantic filters.
|
|
156
|
+
Weibo and WeChat Channels search use `--keyword` and optional `--page-token`.
|
|
147
157
|
|
|
148
158
|
Douyin search filters use semantic values: `--sort-type` supports `general`,
|
|
149
159
|
`time_descending`, and `like_count_descending`; `--publish-time-range` supports
|
|
@@ -185,22 +195,24 @@ This project is not affiliated with, endorsed by, or sponsored by Xiaohongshu, R
|
|
|
185
195
|
|
|
186
196
|
```bash
|
|
187
197
|
npm install
|
|
188
|
-
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs xhs search --keyword "
|
|
189
|
-
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs douyin search --keyword "
|
|
190
|
-
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs kuaishou search --keyword "
|
|
191
|
-
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs weibo search --keyword "
|
|
192
|
-
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs wechat search --keyword "
|
|
198
|
+
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs xhs search --keyword "露营" --pretty
|
|
199
|
+
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs douyin search --keyword "露营" --pretty
|
|
200
|
+
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs kuaishou search --keyword "露营" --pretty
|
|
201
|
+
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs weibo search --keyword "露营" --pretty
|
|
202
|
+
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs wechat search --keyword "露营" --pretty
|
|
203
|
+
SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" node cli.mjs sensitive-check text --text "<content>" --platform xhs --pretty
|
|
193
204
|
```
|
|
194
205
|
|
|
195
206
|
### Docker Run
|
|
196
207
|
|
|
197
208
|
```bash
|
|
198
209
|
docker build -t socialdatax-skills .
|
|
199
|
-
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills xhs search --keyword "
|
|
200
|
-
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills douyin search --keyword "
|
|
201
|
-
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills kuaishou search --keyword "
|
|
202
|
-
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills weibo search --keyword "
|
|
203
|
-
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills wechat search --keyword "
|
|
210
|
+
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills xhs search --keyword "露营" --pretty
|
|
211
|
+
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills douyin search --keyword "露营" --pretty
|
|
212
|
+
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills kuaishou search --keyword "露营" --pretty
|
|
213
|
+
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills weibo search --keyword "露营" --pretty
|
|
214
|
+
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills wechat search --keyword "露营" --pretty
|
|
215
|
+
docker run --rm -i -e SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>" socialdatax-skills sensitive-check text --text "<content>" --platform xhs --pretty
|
|
204
216
|
```
|
|
205
217
|
|
|
206
218
|
If Docker Hub is slow from your network, keep the default image unchanged for normal use and override only during local builds:
|
|
@@ -232,17 +244,18 @@ npx -y socialdatax-skills@latest install media-search --target codex
|
|
|
232
244
|
npx -y socialdatax-skills@latest install media-search --target codex --scope workspace
|
|
233
245
|
npx -y socialdatax-skills@latest install media-search --target claude-code
|
|
234
246
|
npx -y socialdatax-skills@latest install media-search --target claude-code --scope workspace
|
|
235
|
-
npx -y socialdatax-skills@latest xhs search --keyword "
|
|
247
|
+
npx -y socialdatax-skills@latest xhs search --keyword "露营" --pretty
|
|
236
248
|
npx -y socialdatax-skills@latest xhs hot-search --pretty
|
|
237
249
|
npx -y socialdatax-skills@latest douyin hot-search --pretty
|
|
238
|
-
npx -y socialdatax-skills@latest douyin search --keyword "
|
|
250
|
+
npx -y socialdatax-skills@latest douyin search --keyword "露营" --pretty
|
|
239
251
|
npx -y socialdatax-skills@latest douyin user-series --sec-user-id "<sec_user_id>" --pretty
|
|
240
252
|
npx -y socialdatax-skills@latest kuaishou hot-search --pretty
|
|
241
|
-
npx -y socialdatax-skills@latest kuaishou search --keyword "
|
|
253
|
+
npx -y socialdatax-skills@latest kuaishou search --keyword "露营" --pretty
|
|
242
254
|
npx -y socialdatax-skills@latest weibo hot-search --pretty
|
|
243
|
-
npx -y socialdatax-skills@latest weibo search --keyword "
|
|
255
|
+
npx -y socialdatax-skills@latest weibo search --keyword "露营" --pretty
|
|
244
256
|
npx -y socialdatax-skills@latest wechat hot-search --pretty
|
|
245
|
-
npx -y socialdatax-skills@latest wechat search --keyword "
|
|
257
|
+
npx -y socialdatax-skills@latest wechat search --keyword "露营" --pretty
|
|
258
|
+
npx -y socialdatax-skills@latest sensitive-check text --text "<content>" --platform xhs --pretty
|
|
246
259
|
```
|
|
247
260
|
|
|
248
261
|
Available skills:
|
|
@@ -254,6 +267,7 @@ Available skills:
|
|
|
254
267
|
- `media-transcript`: submit and check video 口播转文字 / speech-to-text transcript jobs through hosted MCP tools; supports XHS, Douyin, Kuaishou, Weibo, and WeChat Channels.
|
|
255
268
|
- `media-user-info`: retrieve creator profile information; supports XHS, Douyin, Kuaishou, Weibo, and WeChat Channels creators.
|
|
256
269
|
- `media-user-posts`: retrieve creator content lists; supports XHS notes, Douyin works, Kuaishou works, Weibo posts, WeChat Channels videos, and Douyin creator short-drama series.
|
|
270
|
+
- `sensitive-check`: run 敏感检测 text checks; supports `generic`, `xhs`, `douyin`, and `kuaishou` platform contexts.
|
|
257
271
|
|
|
258
272
|
Default install locations:
|
|
259
273
|
|
|
@@ -334,6 +348,13 @@ Current WeChat Channels / 视频号 workflows include:
|
|
|
334
348
|
- Fetch paginated creator video lists from a finder user_id or a video link/share text.
|
|
335
349
|
- Submit and check WeChat Channels / 视频号 video 口播转文字 / speech-to-text transcript jobs; submit tools 提交完成后最多短等 15 秒.
|
|
336
350
|
|
|
351
|
+
Current Sensitive Check workflows include:
|
|
352
|
+
|
|
353
|
+
- Check draft text for 敏感检测 / sensitive-content risks before publishing.
|
|
354
|
+
- Choose a platform context with `--platform generic`, `--platform xhs`, `--platform douyin`, or `--platform kuaishou`.
|
|
355
|
+
- Return structured fields such as `violation`, `risk_level`, `types`, `highlights`, `summary`, `platform`, and `suggestions` when available.
|
|
356
|
+
- Text checks are read-only. Image sensitive detection is reserved for a future separate tool.
|
|
357
|
+
|
|
337
358
|
## XHS Tools
|
|
338
359
|
|
|
339
360
|
| Tool | Public purpose |
|
|
@@ -430,20 +451,27 @@ Current WeChat Channels / 视频号 workflows include:
|
|
|
430
451
|
| `wechat_submit_video_speech_text_by_encrypted_object_id` | Submit a WeChat Channels / 视频号 video speech-to-text transcript job when encrypted_object_id is already known; submit waits up to 15 seconds. |
|
|
431
452
|
| `wechat_get_video_speech_text_job` | Check a WeChat Channels / 视频号 speech-to-text transcript job by job_id without creating a new task. |
|
|
432
453
|
|
|
454
|
+
## Sensitive Check Tools
|
|
455
|
+
|
|
456
|
+
| Tool | Public purpose |
|
|
457
|
+
| --- | --- |
|
|
458
|
+
| `check_sensitive_text` | Check text for 敏感检测 / sensitive-content risks with `generic`, `xhs`, `douyin`, or `kuaishou` context. |
|
|
459
|
+
|
|
433
460
|
## Quick Start
|
|
434
461
|
|
|
435
462
|
For agents that can execute shell commands, use the direct CLI. This is the recommended default for installed skills:
|
|
436
463
|
|
|
437
464
|
```bash
|
|
438
465
|
export SOCIALDATAX_API_KEY="<SOCIALDATAX_API_KEY>"
|
|
439
|
-
npx -y socialdatax-skills@latest xhs search --keyword "
|
|
440
|
-
npx -y socialdatax-skills@latest douyin search --keyword "
|
|
441
|
-
npx -y socialdatax-skills@latest kuaishou search --keyword "
|
|
442
|
-
npx -y socialdatax-skills@latest weibo search --keyword "
|
|
443
|
-
npx -y socialdatax-skills@latest wechat search --keyword "
|
|
466
|
+
npx -y socialdatax-skills@latest xhs search --keyword "露营" --pretty
|
|
467
|
+
npx -y socialdatax-skills@latest douyin search --keyword "露营" --pretty
|
|
468
|
+
npx -y socialdatax-skills@latest kuaishou search --keyword "露营" --pretty
|
|
469
|
+
npx -y socialdatax-skills@latest weibo search --keyword "露营" --pretty
|
|
470
|
+
npx -y socialdatax-skills@latest wechat search --keyword "露营" --pretty
|
|
471
|
+
npx -y socialdatax-skills@latest sensitive-check text --text "<content>" --platform xhs --pretty
|
|
444
472
|
```
|
|
445
473
|
|
|
446
|
-
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.
|
|
474
|
+
MCP client configuration belongs to platform or capability 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; for 敏感检测, use the `sensitive-check` server.
|
|
447
475
|
|
|
448
476
|
Aily is treated as an OpenClaw / AgentSkills ecosystem channel for this package. Use the OpenClaw skill install flow for now; a dedicated `--target aily` will be added only after its official skill import or package format is confirmed.
|
|
449
477
|
|
|
@@ -451,7 +479,7 @@ Aily is treated as an OpenClaw / AgentSkills ecosystem channel for this package.
|
|
|
451
479
|
|
|
452
480
|
Request or manage API access from the product website:
|
|
453
481
|
|
|
454
|
-
<https://socialdatax.
|
|
482
|
+
<https://socialdatax.com/?from=npm>
|
|
455
483
|
|
|
456
484
|
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
485
|
|
|
@@ -459,7 +487,7 @@ Use the key as a Bearer token in the `Authorization` request header. Do not comm
|
|
|
459
487
|
|
|
460
488
|
Public metadata files in this repository:
|
|
461
489
|
|
|
462
|
-
- [skills](skills): AgentSkills-compatible skills split by
|
|
490
|
+
- [skills](skills): AgentSkills-compatible skills split by capability and currently backed by XHS, Douyin, Kuaishou, Weibo, WeChat Channels, and Sensitive Check tools.
|
|
463
491
|
|
|
464
492
|
## License
|
|
465
493
|
|
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
|
+
const PACKAGE_VERSION = "0.2.12";
|
|
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.
|
|
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];
|
|
@@ -58,6 +58,12 @@ const AVAILABLE_SKILLS = [
|
|
|
58
58
|
"Retrieve creator content lists for XHS, Douyin, Kuaishou, Weibo, and WeChat Channels, including Douyin creator short-drama series.",
|
|
59
59
|
emoji: "🗂️",
|
|
60
60
|
},
|
|
61
|
+
{
|
|
62
|
+
name: "sensitive-check",
|
|
63
|
+
summary:
|
|
64
|
+
"Check text content for generic, XHS, Douyin, and Kuaishou sensitive-content risks.",
|
|
65
|
+
emoji: "🛡️",
|
|
66
|
+
},
|
|
61
67
|
];
|
|
62
68
|
const AVAILABLE_SKILL_NAMES = AVAILABLE_SKILLS.map((skill) => skill.name);
|
|
63
69
|
const BOOLEAN_OPTIONS = new Set([
|
|
@@ -75,7 +81,7 @@ const XHS_DIRECT_ACTION_OPTIONS = {
|
|
|
75
81
|
"hot-search": ["pretty"],
|
|
76
82
|
search: [
|
|
77
83
|
"keyword",
|
|
78
|
-
"
|
|
84
|
+
"pageToken",
|
|
79
85
|
"pages",
|
|
80
86
|
"all",
|
|
81
87
|
"maxItems",
|
|
@@ -111,7 +117,6 @@ const XHS_DIRECT_ACTION_OPTIONS = {
|
|
|
111
117
|
const XHS_DIRECT_ACTION_NAMES = Object.keys(XHS_DIRECT_ACTION_OPTIONS).join(", ");
|
|
112
118
|
const XHS_OPTION_DISPLAY_NAMES = {
|
|
113
119
|
keyword: "--keyword",
|
|
114
|
-
page: "--page",
|
|
115
120
|
sortType: "--sort-type",
|
|
116
121
|
noteType: "--note-type",
|
|
117
122
|
publishTimeRange: "--publish-time-range",
|
|
@@ -350,6 +355,17 @@ const WECHAT_OPTION_DISPLAY_NAMES = {
|
|
|
350
355
|
commentId: "--comment-id",
|
|
351
356
|
userId: "--user-id",
|
|
352
357
|
};
|
|
358
|
+
const SENSITIVE_CHECK_DIRECT_ACTION_OPTIONS = {
|
|
359
|
+
text: ["text", "platform", "pretty"],
|
|
360
|
+
};
|
|
361
|
+
const SENSITIVE_CHECK_DIRECT_ACTION_NAMES = Object.keys(
|
|
362
|
+
SENSITIVE_CHECK_DIRECT_ACTION_OPTIONS
|
|
363
|
+
).join(", ");
|
|
364
|
+
const SENSITIVE_CHECK_PLATFORMS = ["generic", "xhs", "douyin", "kuaishou"];
|
|
365
|
+
const SENSITIVE_CHECK_OPTION_DISPLAY_NAMES = {
|
|
366
|
+
text: "--text",
|
|
367
|
+
platform: "--platform",
|
|
368
|
+
};
|
|
353
369
|
const PLATFORMS = {
|
|
354
370
|
xhs: {
|
|
355
371
|
id: "xhs",
|
|
@@ -749,6 +765,27 @@ const PLATFORMS = {
|
|
|
749
765
|
},
|
|
750
766
|
],
|
|
751
767
|
},
|
|
768
|
+
"sensitive-check": {
|
|
769
|
+
id: "sensitive-check",
|
|
770
|
+
displayName: "Sensitive Check / 敏感检测",
|
|
771
|
+
status: "public",
|
|
772
|
+
registryName: "sensitive-check",
|
|
773
|
+
futureRegistryName: "com.socialdatax/sensitive-check",
|
|
774
|
+
endpoint: "https://mcp.52choujiang.com/sensitive-check/mcp",
|
|
775
|
+
apiKeyEnv: API_KEY_ENV_NAMES,
|
|
776
|
+
upstreamEnv: [
|
|
777
|
+
"SOCIALDATAX_SENSITIVE_CHECK_MCP_UPSTREAM_URL",
|
|
778
|
+
"SOCIAL_MEDIA_SENSITIVE_CHECK_MCP_UPSTREAM_URL",
|
|
779
|
+
"SOCIAL_MEDIA_MCP_UPSTREAM_URL",
|
|
780
|
+
],
|
|
781
|
+
tools: [
|
|
782
|
+
{
|
|
783
|
+
name: "check_sensitive_text",
|
|
784
|
+
description:
|
|
785
|
+
"Check text content for generic, XHS, Douyin, or Kuaishou sensitive-content risks.",
|
|
786
|
+
},
|
|
787
|
+
],
|
|
788
|
+
},
|
|
752
789
|
};
|
|
753
790
|
const currentDir = dirname(fileURLToPath(import.meta.url));
|
|
754
791
|
let mcpSdkModules;
|
|
@@ -788,6 +825,8 @@ if (isMainModule()) {
|
|
|
788
825
|
await runWeiboDirectCommand(cliArgs.slice(1));
|
|
789
826
|
} else if (command === "wechat") {
|
|
790
827
|
await runWechatDirectCommand(cliArgs.slice(1));
|
|
828
|
+
} else if (command === "sensitive-check") {
|
|
829
|
+
await runSensitiveCheckDirectCommand(cliArgs.slice(1));
|
|
791
830
|
} else if (command === "--platform" || command?.startsWith("--platform=") || command === "print-config") {
|
|
792
831
|
printRemovedMcpConfigHelp(command);
|
|
793
832
|
process.exitCode = 1;
|
|
@@ -948,6 +987,21 @@ function validateWechatDirectActionOptions(action, options) {
|
|
|
948
987
|
}
|
|
949
988
|
}
|
|
950
989
|
|
|
990
|
+
function validateSensitiveCheckDirectActionOptions(action, options) {
|
|
991
|
+
const allowedOptions = SENSITIVE_CHECK_DIRECT_ACTION_OPTIONS[action];
|
|
992
|
+
if (!allowedOptions) {
|
|
993
|
+
return;
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
validateKnownOptions(options, allowedOptions);
|
|
997
|
+
validateFlagOption(options, "pretty", "--pretty");
|
|
998
|
+
for (const key of allowedOptions) {
|
|
999
|
+
if (!DIRECT_BOOLEAN_OPTIONS.has(key)) {
|
|
1000
|
+
requireOptionValue(options, key, SENSITIVE_CHECK_OPTION_DISPLAY_NAMES[key]);
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
|
|
951
1005
|
function validateDirectPaginationOptions(platformId, action, options) {
|
|
952
1006
|
validateFlagOption(options, "pretty", "--pretty");
|
|
953
1007
|
validateFlagOption(options, "all", "--all");
|
|
@@ -1226,7 +1280,7 @@ async function installSkills(args) {
|
|
|
1226
1280
|
console.log(` export ${PRIMARY_API_KEY_ENV}="<${PRIMARY_API_KEY_ENV}>"`);
|
|
1227
1281
|
console.log("");
|
|
1228
1282
|
console.log("Direct CLI examples:");
|
|
1229
|
-
console.log(` npx -y ${PACKAGE_SPEC} xhs search --keyword "
|
|
1283
|
+
console.log(` npx -y ${PACKAGE_SPEC} xhs search --keyword "露营" --pretty`);
|
|
1230
1284
|
console.log(` npx -y ${PACKAGE_SPEC} xhs detail --note-id "<note_id>" --pretty`);
|
|
1231
1285
|
}
|
|
1232
1286
|
|
|
@@ -1443,7 +1497,7 @@ function printHelp() {
|
|
|
1443
1497
|
console.log(`${PACKAGE_NAME}`);
|
|
1444
1498
|
console.log("");
|
|
1445
1499
|
console.log("Commands:");
|
|
1446
|
-
console.log(` npx -y ${PACKAGE_SPEC} xhs search --keyword "
|
|
1500
|
+
console.log(` npx -y ${PACKAGE_SPEC} xhs search --keyword "露营" --pretty`);
|
|
1447
1501
|
console.log(" Call the XHS search tool directly and print JSON.");
|
|
1448
1502
|
console.log("");
|
|
1449
1503
|
console.log(` npx -y ${PACKAGE_SPEC} xhs hot-search --pretty`);
|
|
@@ -1472,7 +1526,7 @@ function printHelp() {
|
|
|
1472
1526
|
console.log(` npx -y ${PACKAGE_SPEC} douyin hot-search --pretty`);
|
|
1473
1527
|
console.log(" Call the Douyin main hot search list tool directly and print JSON.");
|
|
1474
1528
|
console.log("");
|
|
1475
|
-
console.log(` npx -y ${PACKAGE_SPEC} douyin search --keyword "
|
|
1529
|
+
console.log(` npx -y ${PACKAGE_SPEC} douyin search --keyword "露营" --pretty`);
|
|
1476
1530
|
console.log(" Call the Douyin work search tool directly and print JSON.");
|
|
1477
1531
|
console.log("");
|
|
1478
1532
|
console.log(` npx -y ${PACKAGE_SPEC} douyin detail --aweme-id "<aweme_id>" --pretty`);
|
|
@@ -1510,7 +1564,7 @@ function printHelp() {
|
|
|
1510
1564
|
console.log(` npx -y ${PACKAGE_SPEC} kuaishou hot-search --pretty`);
|
|
1511
1565
|
console.log(" Call the Kuaishou short-video hot list tool directly and print JSON.");
|
|
1512
1566
|
console.log("");
|
|
1513
|
-
console.log(` npx -y ${PACKAGE_SPEC} kuaishou search --keyword "
|
|
1567
|
+
console.log(` npx -y ${PACKAGE_SPEC} kuaishou search --keyword "露营" --pretty`);
|
|
1514
1568
|
console.log(" Call the Kuaishou work search tool directly and print JSON.");
|
|
1515
1569
|
console.log("");
|
|
1516
1570
|
console.log(` npx -y ${PACKAGE_SPEC} kuaishou detail --photo-id "<photo_id>" --pretty`);
|
|
@@ -1548,7 +1602,7 @@ function printHelp() {
|
|
|
1548
1602
|
console.log(` npx -y ${PACKAGE_SPEC} weibo hot-search --pretty`);
|
|
1549
1603
|
console.log(" Call the Weibo hot-search list tool directly and print JSON.");
|
|
1550
1604
|
console.log("");
|
|
1551
|
-
console.log(` npx -y ${PACKAGE_SPEC} weibo search --keyword "
|
|
1605
|
+
console.log(` npx -y ${PACKAGE_SPEC} weibo search --keyword "露营" --pretty`);
|
|
1552
1606
|
console.log(" Call the Weibo post search tool directly and print JSON.");
|
|
1553
1607
|
console.log("");
|
|
1554
1608
|
console.log(` npx -y ${PACKAGE_SPEC} weibo detail --post-id "<post_id>" --pretty`);
|
|
@@ -1587,7 +1641,7 @@ function printHelp() {
|
|
|
1587
1641
|
console.log(` npx -y ${PACKAGE_SPEC} wechat hot-search --pretty`);
|
|
1588
1642
|
console.log(" Call the WeChat Channels / 视频号 hot-search list tool directly and print JSON.");
|
|
1589
1643
|
console.log("");
|
|
1590
|
-
console.log(` npx -y ${PACKAGE_SPEC} wechat search --keyword "
|
|
1644
|
+
console.log(` npx -y ${PACKAGE_SPEC} wechat search --keyword "露营" --pretty`);
|
|
1591
1645
|
console.log(" Call the WeChat Channels / 视频号 video search tool directly and print JSON.");
|
|
1592
1646
|
console.log("");
|
|
1593
1647
|
console.log(` npx -y ${PACKAGE_SPEC} wechat detail --encrypted-object-id "<encrypted_object_id>" --pretty`);
|
|
@@ -1616,6 +1670,9 @@ function printHelp() {
|
|
|
1616
1670
|
console.log(` npx -y ${PACKAGE_SPEC} wechat user-posts --url "<wechat_video_url_or_share_text>" --pretty`);
|
|
1617
1671
|
console.log(" Call the WeChat Channels / 视频号 creator videos tool from a video link or share text.");
|
|
1618
1672
|
console.log("");
|
|
1673
|
+
console.log(` npx -y ${PACKAGE_SPEC} sensitive-check text --text "<content>" --platform xhs --pretty`);
|
|
1674
|
+
console.log(" Call the SocialDataX 敏感检测 text tool directly and print JSON.");
|
|
1675
|
+
console.log("");
|
|
1619
1676
|
console.log(` npx -y ${PACKAGE_SPEC} list`);
|
|
1620
1677
|
console.log(" List available skills.");
|
|
1621
1678
|
console.log("");
|
|
@@ -1695,8 +1752,10 @@ function printHelp() {
|
|
|
1695
1752
|
console.log(" --profile-url <profile-url-or-share-text>");
|
|
1696
1753
|
console.log(" --user-id <user_id>");
|
|
1697
1754
|
console.log(" --sec-user-id <sec_user_id>");
|
|
1698
|
-
console.log(" --
|
|
1699
|
-
console.log("
|
|
1755
|
+
console.log(" --text <content>");
|
|
1756
|
+
console.log(" Text content for sensitive-check text.");
|
|
1757
|
+
console.log(" --platform <generic|xhs|douyin|kuaishou>");
|
|
1758
|
+
console.log(" Target platform for sensitive-check text; default is generic.");
|
|
1700
1759
|
console.log(" --pages <number>");
|
|
1701
1760
|
console.log(" Fetch and merge N pages from the current starting point for search, comments, replies, creator content lists, and creator series.");
|
|
1702
1761
|
console.log(" --all");
|
|
@@ -1719,7 +1778,7 @@ function printHelp() {
|
|
|
1719
1778
|
console.log(" --content-type <all|video|image>");
|
|
1720
1779
|
console.log(" Douyin content type filter; omit for all content types.");
|
|
1721
1780
|
console.log(" --page-token <token>");
|
|
1722
|
-
console.log(" Continue token-paginated commands with the complete returned next_page_token. For
|
|
1781
|
+
console.log(" Continue token-paginated commands with the complete returned next_page_token. For search, omit it on the first request.");
|
|
1723
1782
|
console.log(" --sort-type <all|latest|popular>");
|
|
1724
1783
|
console.log(" WeChat Channels / 视频号 search sort; omit for default sort.");
|
|
1725
1784
|
console.log(" --duration-range <all|under_5_min|between_5_and_20_min|over_20_min>");
|
|
@@ -1901,6 +1960,30 @@ async function runWechatDirectCommand(args) {
|
|
|
1901
1960
|
process.stdout.write("\n");
|
|
1902
1961
|
}
|
|
1903
1962
|
|
|
1963
|
+
async function runSensitiveCheckDirectCommand(args) {
|
|
1964
|
+
const { options, positional } = parseCommandArgs(args);
|
|
1965
|
+
const action = positional[0];
|
|
1966
|
+
if (!action) {
|
|
1967
|
+
throw new Error(
|
|
1968
|
+
`Missing sensitive-check command. Use ${SENSITIVE_CHECK_DIRECT_ACTION_NAMES}.`
|
|
1969
|
+
);
|
|
1970
|
+
}
|
|
1971
|
+
if (positional.length > 1) {
|
|
1972
|
+
throw new Error(`Unexpected argument: ${positional[1]}`);
|
|
1973
|
+
}
|
|
1974
|
+
validateSensitiveCheckDirectActionOptions(action, options);
|
|
1975
|
+
|
|
1976
|
+
const operation = buildSensitiveCheckOperation(action, options);
|
|
1977
|
+
const data = await callDirectOperation(operation);
|
|
1978
|
+
const envelope = {
|
|
1979
|
+
platform: operation.platform.id,
|
|
1980
|
+
tool: operation.tool,
|
|
1981
|
+
data,
|
|
1982
|
+
};
|
|
1983
|
+
process.stdout.write(JSON.stringify(envelope, null, options.pretty ? 2 : 0));
|
|
1984
|
+
process.stdout.write("\n");
|
|
1985
|
+
}
|
|
1986
|
+
|
|
1904
1987
|
function buildXhsOperation(action, options) {
|
|
1905
1988
|
switch (action) {
|
|
1906
1989
|
case "hot-search":
|
|
@@ -2363,6 +2446,21 @@ function buildWechatOperation(action, options) {
|
|
|
2363
2446
|
}
|
|
2364
2447
|
}
|
|
2365
2448
|
|
|
2449
|
+
function buildSensitiveCheckOperation(action, options) {
|
|
2450
|
+
switch (action) {
|
|
2451
|
+
case "text":
|
|
2452
|
+
return buildDirectOperation(
|
|
2453
|
+
"text",
|
|
2454
|
+
buildSensitiveCheckTextCall(options),
|
|
2455
|
+
PLATFORMS["sensitive-check"]
|
|
2456
|
+
);
|
|
2457
|
+
default:
|
|
2458
|
+
throw new Error(
|
|
2459
|
+
`Unsupported sensitive-check command "${action}". Use ${SENSITIVE_CHECK_DIRECT_ACTION_NAMES}.`
|
|
2460
|
+
);
|
|
2461
|
+
}
|
|
2462
|
+
}
|
|
2463
|
+
|
|
2366
2464
|
function buildDirectOperation(operation, { tool, toolArguments }, platform = PLATFORMS.xhs) {
|
|
2367
2465
|
return {
|
|
2368
2466
|
platform,
|
|
@@ -2377,10 +2475,6 @@ function buildXhsSearchCall(options) {
|
|
|
2377
2475
|
if (!options.keyword) {
|
|
2378
2476
|
throw new Error("Missing --keyword for xhs search.");
|
|
2379
2477
|
}
|
|
2380
|
-
const page =
|
|
2381
|
-
options.page === undefined
|
|
2382
|
-
? 1
|
|
2383
|
-
: parsePositiveIntegerOption(options.page, "--page");
|
|
2384
2478
|
const sortType = parseSemanticOption(
|
|
2385
2479
|
options.sortType || "general",
|
|
2386
2480
|
"--sort-type",
|
|
@@ -2404,8 +2498,10 @@ function buildXhsSearchCall(options) {
|
|
|
2404
2498
|
}
|
|
2405
2499
|
const toolArguments = {
|
|
2406
2500
|
keyword: options.keyword,
|
|
2407
|
-
page,
|
|
2408
2501
|
};
|
|
2502
|
+
if (options.pageToken) {
|
|
2503
|
+
toolArguments.page_token = options.pageToken;
|
|
2504
|
+
}
|
|
2409
2505
|
if (options.sortType !== undefined) {
|
|
2410
2506
|
toolArguments.sort_type = sortType;
|
|
2411
2507
|
}
|
|
@@ -2588,6 +2684,25 @@ function buildWechatSearchCall(options) {
|
|
|
2588
2684
|
};
|
|
2589
2685
|
}
|
|
2590
2686
|
|
|
2687
|
+
function buildSensitiveCheckTextCall(options) {
|
|
2688
|
+
if (!options.text) {
|
|
2689
|
+
throw new Error("Missing --text for sensitive-check text.");
|
|
2690
|
+
}
|
|
2691
|
+
const platform = parseAllowedStringOption(
|
|
2692
|
+
options.platform || "generic",
|
|
2693
|
+
"--platform",
|
|
2694
|
+
SENSITIVE_CHECK_PLATFORMS,
|
|
2695
|
+
SENSITIVE_CHECK_PLATFORMS.join(", ")
|
|
2696
|
+
);
|
|
2697
|
+
return {
|
|
2698
|
+
tool: "check_sensitive_text",
|
|
2699
|
+
toolArguments: {
|
|
2700
|
+
text: options.text,
|
|
2701
|
+
platform,
|
|
2702
|
+
},
|
|
2703
|
+
};
|
|
2704
|
+
}
|
|
2705
|
+
|
|
2591
2706
|
function buildDouyinRepliesCall(options) {
|
|
2592
2707
|
if (!options.awemeId) {
|
|
2593
2708
|
throw new Error("Missing --aweme-id for douyin replies.");
|
|
@@ -2842,7 +2957,7 @@ async function collectPaginatedDirectData(
|
|
|
2842
2957
|
}
|
|
2843
2958
|
if (markerRepeated) {
|
|
2844
2959
|
throw new Error(
|
|
2845
|
-
`Pagination stopped because ${nextMarkerName(
|
|
2960
|
+
`Pagination stopped because ${nextMarkerName()} repeated.`
|
|
2846
2961
|
);
|
|
2847
2962
|
}
|
|
2848
2963
|
seenNextMarkers.add(markerKey);
|
|
@@ -3058,18 +3173,12 @@ function reachedMaxItems(items, maxItems) {
|
|
|
3058
3173
|
}
|
|
3059
3174
|
|
|
3060
3175
|
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
3176
|
const token = pageData?.next_page_token;
|
|
3066
3177
|
return typeof token === "string" && token ? token : undefined;
|
|
3067
3178
|
}
|
|
3068
3179
|
|
|
3069
|
-
function nextMarkerName(
|
|
3070
|
-
return
|
|
3071
|
-
? "next_page"
|
|
3072
|
-
: "next_page_token";
|
|
3180
|
+
function nextMarkerName() {
|
|
3181
|
+
return "next_page_token";
|
|
3073
3182
|
}
|
|
3074
3183
|
|
|
3075
3184
|
function initialPaginationMarkers(operation) {
|
|
@@ -3078,19 +3187,13 @@ function initialPaginationMarkers(operation) {
|
|
|
3078
3187
|
}
|
|
3079
3188
|
|
|
3080
3189
|
function currentPageMarker(operation) {
|
|
3081
|
-
if (operation.platform.id === "xhs" && operation.operation === "search") {
|
|
3082
|
-
return operation.arguments.page;
|
|
3083
|
-
}
|
|
3084
3190
|
return operation.arguments.page_token;
|
|
3085
3191
|
}
|
|
3086
3192
|
|
|
3087
3193
|
function operationWithNextPageMarker(operation, nextMarker) {
|
|
3088
3194
|
const nextOperation = cloneDirectOperation(operation);
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
} else {
|
|
3092
|
-
nextOperation.arguments.page_token = nextMarker;
|
|
3093
|
-
}
|
|
3195
|
+
nextOperation.arguments.page_token = nextMarker;
|
|
3196
|
+
delete nextOperation.arguments.page;
|
|
3094
3197
|
return nextOperation;
|
|
3095
3198
|
}
|
|
3096
3199
|
|
|
@@ -3109,11 +3212,8 @@ function buildPaginatedData({
|
|
|
3109
3212
|
page_count: pageCount,
|
|
3110
3213
|
item_count: items.length,
|
|
3111
3214
|
};
|
|
3112
|
-
|
|
3113
|
-
|
|
3114
|
-
} else {
|
|
3115
|
-
data.next_page_token = nextMarker || "";
|
|
3116
|
-
}
|
|
3215
|
+
delete data.next_page;
|
|
3216
|
+
data.next_page_token = nextMarker || "";
|
|
3117
3217
|
return data;
|
|
3118
3218
|
}
|
|
3119
3219
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "socialdatax-skills",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.12",
|
|
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",
|
|
@@ -56,11 +56,16 @@
|
|
|
56
56
|
"wechat",
|
|
57
57
|
"wechat-channels",
|
|
58
58
|
"wechat-channels-data",
|
|
59
|
-
"wechat-channels-search"
|
|
59
|
+
"wechat-channels-search",
|
|
60
|
+
"sensitive-check",
|
|
61
|
+
"sensitive-checking",
|
|
62
|
+
"content-safety",
|
|
63
|
+
"text-safety",
|
|
64
|
+
"sensitive-detection"
|
|
60
65
|
],
|
|
61
|
-
"homepage": "https://socialdatax.
|
|
66
|
+
"homepage": "https://socialdatax.com",
|
|
62
67
|
"bugs": {
|
|
63
|
-
"url": "https://socialdatax.
|
|
68
|
+
"url": "https://socialdatax.com"
|
|
64
69
|
},
|
|
65
70
|
"repository": {
|
|
66
71
|
"type": "git",
|
|
@@ -71,5 +76,9 @@
|
|
|
71
76
|
},
|
|
72
77
|
"dependencies": {
|
|
73
78
|
"@modelcontextprotocol/sdk": "^1.29.0"
|
|
79
|
+
},
|
|
80
|
+
"overrides": {
|
|
81
|
+
"hono": "4.12.27",
|
|
82
|
+
"qs": "6.15.3"
|
|
74
83
|
}
|
|
75
84
|
}
|
|
@@ -15,7 +15,7 @@ metadata:
|
|
|
15
15
|
package: "socialdatax-skills"
|
|
16
16
|
bins: []
|
|
17
17
|
emoji: "💬"
|
|
18
|
-
homepage: "https://socialdatax.
|
|
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.
|
|
37
|
-
获取或管理 API Key:访问 <https://socialdatax.
|
|
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.
|
|
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.
|
|
37
|
-
获取或管理 API Key:访问 <https://socialdatax.
|
|
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.
|
|
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.
|
|
37
|
-
获取或管理 API Key:访问 <https://socialdatax.
|
|
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 <
|
|
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 `
|
|
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
|
-
|
|
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
|
-
- `
|
|
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
|
-
|
|
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.
|
|
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.
|
|
37
|
-
获取或管理 API Key:访问 <https://socialdatax.
|
|
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.
|
|
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.
|
|
37
|
-
获取或管理 API Key:访问 <https://socialdatax.
|
|
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.
|
|
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.
|
|
38
|
-
获取或管理 API Key:访问 <https://socialdatax.
|
|
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
|
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "sensitive-check"
|
|
3
|
+
description: "Check draft text for sensitive-content risks before publishing. Supports generic, xhs, douyin, and kuaishou contexts through SocialDataX."
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
requires:
|
|
7
|
+
env:
|
|
8
|
+
- "SOCIALDATAX_API_KEY"
|
|
9
|
+
bins:
|
|
10
|
+
- "node"
|
|
11
|
+
- "npm"
|
|
12
|
+
primaryEnv: "SOCIALDATAX_API_KEY"
|
|
13
|
+
install:
|
|
14
|
+
- kind: "node"
|
|
15
|
+
package: "socialdatax-skills"
|
|
16
|
+
bins: []
|
|
17
|
+
emoji: "🛡️"
|
|
18
|
+
homepage: "https://socialdatax.com/?from=npm"
|
|
19
|
+
---
|
|
20
|
+
<!-- AUTO-GENERATED from socialdatax-skill-source. Do not edit directly; run `node scripts/generate_socialdatax_skills.mjs`. -->
|
|
21
|
+
|
|
22
|
+
# 敏感检测 SocialDataX
|
|
23
|
+
|
|
24
|
+
Use this skill when the user wants 敏感检测, sensitive check, content safety review, or platform-aware review for text drafts before publishing.
|
|
25
|
+
|
|
26
|
+
Current platform support:
|
|
27
|
+
|
|
28
|
+
- Text sensitive-content detection through `check_sensitive_text` for `generic`, `xhs`, `douyin`, and `kuaishou` contexts.
|
|
29
|
+
|
|
30
|
+
## API Key
|
|
31
|
+
|
|
32
|
+
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.
|
|
33
|
+
获取或管理 API Key:访问 <https://socialdatax.com/?from=npm>,按官网的 API Key 申请/管理入口操作。环境变量名固定使用 `SOCIALDATAX_API_KEY`;不要引导用户使用其他域名。
|
|
34
|
+
|
|
35
|
+
## Preferred Direct CLI
|
|
36
|
+
|
|
37
|
+
Prefer the direct CLI when the agent can run shell commands. It does not require MCP server configuration:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npx -y socialdatax-skills@latest sensitive-check text --text "<content>" --platform xhs --pretty
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Required arguments:
|
|
44
|
+
|
|
45
|
+
- `sensitive-check text --text <content>`: required text to check. Use the user's draft text for analysis, but do not store it in the skill.
|
|
46
|
+
|
|
47
|
+
Optional arguments:
|
|
48
|
+
|
|
49
|
+
- `--platform <generic|xhs|douyin|kuaishou>`: platform context; default is `generic`.
|
|
50
|
+
- `--pretty`: output formatting only.
|
|
51
|
+
|
|
52
|
+
Use this skill when the user wants 敏感检测, sensitive check, content safety review, or platform-aware preflight review for draft text.
|
|
53
|
+
The command prints JSON with `platform`, `tool`, and `data`; it does not echo the original text back in CLI arguments. The service returns `violation`, `risk_level`, `types`, `highlights`, `summary`, `platform`, and `suggestions` when available.
|
|
54
|
+
This v1 skill checks text only. Image sensitive detection is intentionally out of scope until a separate image tool is published.
|
|
55
|
+
|
|
56
|
+
## Safety Boundary
|
|
57
|
+
|
|
58
|
+
This skill is read-only. It does not read local browser data, does not save API keys, and does not perform login, posting, liking, commenting, or account changes. Prefer the direct CLI; hosted MCP tools are optional when the current agent already supports authenticated streamable HTTP MCP.
|
|
59
|
+
|
|
60
|
+
## MCP Tools
|
|
61
|
+
|
|
62
|
+
MCP tools matching the direct CLI commands above:
|
|
63
|
+
|
|
64
|
+
- `check_sensitive_text`
|
|
65
|
+
|
|
66
|
+
If MCP tools are already available in the current agent, call `check_sensitive_text` with `text` and optional `platform`: `generic`, `xhs`, `douyin`, or `kuaishou`.
|
|
67
|
+
|
|
68
|
+
## Output Guidance
|
|
69
|
+
|
|
70
|
+
Report whether there is a violation, the risk level, detected types, brief highlights, and concrete rewrite suggestions.
|
|
71
|
+
Do not echo the full original text back unless the user explicitly asks; prefer short highlights and safer rewrite guidance.
|
|
@@ -15,7 +15,7 @@ metadata:
|
|
|
15
15
|
package: "socialdatax-skills"
|
|
16
16
|
bins: []
|
|
17
17
|
emoji: "🔎"
|
|
18
|
-
homepage: "https://socialdatax.
|
|
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.
|
|
63
|
-
获取或管理 API Key:访问 <https://socialdatax.
|
|
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
|
-
-
|
|
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
|
-
|
|
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
|
|