@scorehub/creator-outreach 1.0.7 → 1.0.10
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 +24 -33
- package/agents/tiktok-creator-outreach.md +8 -6
- package/install.js +27 -0
- package/package.json +1 -1
- package/skills/tiktok-creator-search/SKILL.md +21 -11
package/README.md
CHANGED
|
@@ -1,53 +1,44 @@
|
|
|
1
|
-
# creator-outreach
|
|
1
|
+
# @scorehub/creator-outreach
|
|
2
2
|
|
|
3
|
-
TikTok 达人建联
|
|
4
|
-
带货表现分析评分、两步会话建联(create_conversation → send_message),
|
|
5
|
-
通过 ScoreHub MCP 调用 TikTok API。
|
|
3
|
+
**Tiky** — TikTok 达人建联 AI 智能体。一条命令装进 Claude Code 和 WorkBuddy。
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
按类目 / GMV / 粉丝画像搜索 TikTok Shop 达人,分析带货表现并打分排名,批量发送建联消息(`create_conversation` → `send_message`)。所有 TikTok API 调用通过 ScoreHub MCP 完成。
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
## 安装
|
|
10
8
|
|
|
11
9
|
```bash
|
|
12
10
|
npx @scorehub/creator-outreach
|
|
13
11
|
```
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
**Claude Code / Claude Desktop:**
|
|
18
|
-
- 将 Tiky Agent 定义复制到 `~/.claude/agents/`
|
|
19
|
-
- 将 ScoreHub MCP Server 配置写入 `~/.claude.json`
|
|
13
|
+
命令会自动检测本机已安装的 AI 客户端并完成配置:
|
|
20
14
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
| 客户端 | 安装内容 |
|
|
16
|
+
|--------|----------|
|
|
17
|
+
| **Claude Code / Claude Desktop** | Agent 定义 → `~/.claude/agents/`;MCP 配置 → `~/.claude.json` |
|
|
18
|
+
| **WorkBuddy**(检测到 `~/.workbuddy/` 时) | 插件文件 → `~/.workbuddy/plugins/.../`;MCP 配置 → `~/.workbuddy/mcp.json` |
|
|
24
19
|
|
|
25
|
-
|
|
26
|
-
- Claude Code:`@tiktok-creator-outreach`
|
|
27
|
-
- WorkBuddy:在 Agent 列表中选择 "Tiky — TikTok Creator Outreach"
|
|
20
|
+
MCP Server(`@scorehub/mcp-server`)由配置中的 `npx -y` 在首次启动时自动拉取,无需单独安装。
|
|
28
21
|
|
|
29
|
-
|
|
22
|
+
安装完成后重启客户端,即可唤起 Tiky:
|
|
30
23
|
|
|
31
|
-
|
|
24
|
+
- **Claude Code**:输入 `@tiktok-creator-outreach`
|
|
25
|
+
- **WorkBuddy**:在 Agent 列表中选择 "Tiky — TikTok Creator Outreach"
|
|
32
26
|
|
|
33
|
-
|
|
34
|
-
@scorehub/creator-outreach
|
|
35
|
-
```
|
|
27
|
+
> 也可在 WorkBuddy 插件市场直接搜索 `@scorehub/creator-outreach` 安装。
|
|
36
28
|
|
|
37
|
-
##
|
|
29
|
+
## 首次使用:授权
|
|
38
30
|
|
|
39
|
-
|
|
31
|
+
Tiky 首次调用 TikTok 工具时会自动打开浏览器引导登录 ScoreHub。登录一次后 Token 缓存在本地(`~/.scorehub/`),Claude Code 与 WorkBuddy 共享,无需重复授权。
|
|
40
32
|
|
|
41
|
-
|
|
42
|
-
npm install -g @scorehub/mcp-server
|
|
43
|
-
```
|
|
33
|
+
## 快速开始
|
|
44
34
|
|
|
45
|
-
|
|
35
|
+
直接对 Tiky 说:
|
|
46
36
|
|
|
47
|
-
|
|
37
|
+
- 帮我搜索适合合作的 TikTok 达人,类目是美妆,GMV 在 1000-10000 美元区间
|
|
38
|
+
- 分析这 10 个达人的带货表现,帮我打分排名
|
|
39
|
+
- 用我的建联话术模板,给这 50 个达人批量发送合作消息
|
|
48
40
|
|
|
49
|
-
|
|
41
|
+
## 相关链接
|
|
50
42
|
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
- 用我的建联话术模板,给这50个达人批量发送合作消息
|
|
43
|
+
- MCP Server:[@scorehub/mcp-server](https://www.npmjs.com/package/@scorehub/mcp-server)
|
|
44
|
+
- 仓库:[ScoreHub-AI/creator-outreach](https://github.com/ScoreHub-AI/creator-outreach)
|
|
@@ -32,15 +32,17 @@ skills:
|
|
|
32
32
|
### 1. 达人搜索与发现
|
|
33
33
|
在多维筛选条件下,从 TikTok Creator Marketplace 精准搜索达人。
|
|
34
34
|
- **类目筛选(父类目优先,务必遵守)**:
|
|
35
|
-
1. 当用户提到品类/类目关键词(如"美妆"/"3C"/"beauty"/"electronics")时,**先调用 `get_categories`** 解析为类目 ID。传入 `keyword`(品类名),并根据语言设置 `locale`(中文用 `"zh-CN"`,英文用 `"en-US"
|
|
36
|
-
2. **优先匹配父类目(`is_leaf=false`)**:从返回结果中筛选 `is_leaf=false`
|
|
35
|
+
1. 当用户提到品类/类目关键词(如"美妆"/"3C"/"beauty"/"electronics")时,**先调用 `get_categories`** 解析为类目 ID。传入 `keyword`(品类名),并根据语言设置 `locale`(中文用 `"zh-CN"`,英文用 `"en-US"`)。`category_version` 跟随区域:US/EU/SEA 用 `"v2"`(官方推荐),其余区域按返回情况定,不必硬性钦定版本。
|
|
36
|
+
2. **优先匹配父类目(`is_leaf=false`)**:从返回结果中筛选 `is_leaf=false` 的父类目。匹配到父类目:
|
|
37
37
|
- 构造 `category` 参数:`[{parent_category_id: "父类目ID"}]` —— **不要传 `child_category_id_list`**。API 会搜索该父类目下所有子类目的达人,覆盖面最广。
|
|
38
38
|
- 如果匹配到多个父类目,用表格展示让用户确认想要筛选哪些(或全部)。
|
|
39
|
-
3.
|
|
40
|
-
-
|
|
41
|
-
- 构造 `category` 参数:`[{parent_category_id: "父类目ID", child_category_id_list: ["
|
|
39
|
+
3. **兜底匹配子类目(仅限直接下一级)**:仅当没有合适父类目时降级:
|
|
40
|
+
- 只取某父类目**直接下一级**的子类目(其 `parent_id` 等于该父类目 `id`),**绝不用更深层的叶子 ID**。
|
|
41
|
+
- 构造 `category` 参数:`[{parent_category_id: "父类目ID", child_category_id_list: ["直接子类ID1", "直接子类ID2"]}]`。
|
|
42
42
|
- 如果匹配到多个子类目,同样用表格展示让用户确认。
|
|
43
|
-
-
|
|
43
|
+
- **关键约束**:达人搜索的 `category` 只支持「父类目 + 直接下一级子类目」(TikTok 官方限制)。v2 是最深 7 级的类目树,直接取深层叶子 ID 会被搜索接口**静默忽略**、导致过滤失效返回一堆无关达人。这就是"中文类目树 ID 与搜索返回 `category_ids` 对不上"的根因。
|
|
44
|
+
- **搜索后闭环校验**:用了类目过滤就要把返回结果的 `category_ids` 与所传类目 ID 比对,**零重叠**说明过滤已静默失效——提示用户并把所传子类目换成其**父类目**(更浅一级)重搜,不要把无关结果当作合规品类结果。
|
|
45
|
+
- **核心原则**:父类目覆盖 > 子类目精确。宁愿多搜到一些达人(由后续 GMV/粉丝画像等条件进一步筛选),也不要漏掉。
|
|
44
46
|
- **注意**:绝不要凭空猜测类目 ID。
|
|
45
47
|
- GMV 区间筛选(0-100 / 100-1K / 1K-10K / 10K+)
|
|
46
48
|
- 销量区间筛选
|
package/install.js
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
const fs = require('fs');
|
|
4
4
|
const path = require('path');
|
|
5
5
|
const os = require('os');
|
|
6
|
+
const { execSync } = require('child_process');
|
|
7
|
+
|
|
8
|
+
const pkg = require('./package.json');
|
|
9
|
+
console.log(`${pkg.name} v${pkg.version}\n`);
|
|
6
10
|
|
|
7
11
|
// === Claude Code 路径 ===
|
|
8
12
|
const CLAUDE_DIR = path.join(os.homedir(), '.claude');
|
|
@@ -47,6 +51,22 @@ function resolveWorkBuddyNode() {
|
|
|
47
51
|
return { npx: 'npx', binDir: null };
|
|
48
52
|
}
|
|
49
53
|
|
|
54
|
+
// 工具函数:查询 mcp-server 在 npm registry 的当前最新版本
|
|
55
|
+
// 注意:这是 install 此刻的最新版;实际 MCP 拉起时由 npx 现场解析 @latest,
|
|
56
|
+
// 若之后 registry 更新,运行时版本可能与此不同。失败时静默返回 null(不阻断安装)。
|
|
57
|
+
function fetchLatestMcpServerVersion() {
|
|
58
|
+
try {
|
|
59
|
+
const out = execSync('npm view @scorehub/mcp-server version', {
|
|
60
|
+
encoding: 'utf8',
|
|
61
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
62
|
+
timeout: 10000,
|
|
63
|
+
});
|
|
64
|
+
return out.trim() || null;
|
|
65
|
+
} catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
50
70
|
// 工具函数:合并 MCP Server 配置到 JSON 文件
|
|
51
71
|
function mergeMcpConfig(configPath, serverName, serverConfig, extraFields) {
|
|
52
72
|
let config = {};
|
|
@@ -123,6 +143,13 @@ if (hasWorkBuddy) {
|
|
|
123
143
|
const platforms = ['Claude Code'];
|
|
124
144
|
if (hasWorkBuddy) platforms.push('WorkBuddy');
|
|
125
145
|
|
|
146
|
+
const mcpServerVersion = fetchLatestMcpServerVersion();
|
|
147
|
+
if (mcpServerVersion) {
|
|
148
|
+
console.log(`\n→ mcp-server 当前最新版本:v${mcpServerVersion}(运行时由 npx 解析 @latest,届时可能更新)`);
|
|
149
|
+
} else {
|
|
150
|
+
console.log('\n→ mcp-server:@latest(运行时由 npx 解析,未能查询到具体版本号)');
|
|
151
|
+
}
|
|
152
|
+
|
|
126
153
|
console.log(`\n安装完成!重启 ${platforms.join(' / ')} 后使用 Tiky。`);
|
|
127
154
|
if (!hasWorkBuddy) {
|
|
128
155
|
console.log('提示:未检测到 WorkBuddy,仅安装了 Claude Code。如需 WorkBuddy 支持请先安装 WorkBuddy 后重新运行本命令。');
|
package/package.json
CHANGED
|
@@ -17,18 +17,19 @@
|
|
|
17
17
|
|
|
18
18
|
如果用户提到了品类/类目关键词(如"美妆"、"3C"、"beauty"、"electronics"),**必须**先调用 `get_categories` 获取类目 ID,再调用 `search_creators`:
|
|
19
19
|
|
|
20
|
-
1. **`get_categories`** — 传入 `keyword
|
|
21
|
-
|
|
20
|
+
1. **`get_categories`** — 传入 `keyword`(品类名关键词),并设合适的 `locale`(中文用 `"zh-CN"`,英文用 `"en-US"`)。`category_version` 跟随区域:US/EU/SEA 用 `"v2"`(官方推荐,类目树更完整),其余区域按返回情况定,不必硬性钦定某个版本。
|
|
21
|
+
- **关键层级约束(与版本无关)**:达人搜索的 `category` 过滤**只认父类目 + 其直接下一级子类目**(TikTok 官方约束:"A child category is only 1 level deeper than the parent")。类目树最深可达 7 级,若直接取深层子类目 ID 喂给搜索接口会被**静默忽略**,导致过滤失效、返回一堆无关达人(这正是"中文树 ID 和搜索返回 category_ids 对不上"的根因)。因此重点不在选哪个版本,而在**只用父类目或其直接下一级**。
|
|
22
|
+
2. **优先匹配父类目** — 从返回的 `categories` 中筛 `is_leaf=false` 的父类目。匹配到就直接用:
|
|
22
23
|
- 构造 `category` 参数时 **只传 `parent_category_id`,不传 `child_category_id_list`**:`[{parent_category_id: "父ID"}]`
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
3.
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
24
|
+
- API 会搜索该父类目下**所有**子类目的达人,覆盖面最广
|
|
25
|
+
- 匹配到多个父类目,用**表格展示**让用户确认要筛选哪些
|
|
26
|
+
3. **兜底匹配子类目(仅限父类目的直接下一级)** — 仅当没有合适父类目时降级:
|
|
27
|
+
- 只取某父类目**直接下一级**的子类目(`parent_id` 等于该父类目 `id`),**绝不使用更深层的叶子 ID**
|
|
28
|
+
- 构造:`[{parent_category_id: "父ID", child_category_id_list: ["直接子类ID1", "直接子类ID2"]}]`
|
|
29
|
+
- 匹配到多个,同样用**表格展示**让用户确认
|
|
29
30
|
4. 将构造好的 `category` 参数传给 `search_creators`
|
|
30
31
|
|
|
31
|
-
> **核心原则**:父类目覆盖 >
|
|
32
|
+
> **核心原则**:父类目覆盖 > 子类目精确。且**层级只能到"父类目 + 直接子类目"**,深层叶子无效。宁愿多搜到一些达人(由后续 GMV/粉丝画像等条件进一步筛选),也不要漏掉。
|
|
32
33
|
|
|
33
34
|
调用 MCP 工具 **`search_creators`**,不要写脚本。若已授权可直接调用;未授权时先走 `authorize`。
|
|
34
35
|
|
|
@@ -37,7 +38,7 @@
|
|
|
37
38
|
| 参数 | 说明 |
|
|
38
39
|
|------|------|
|
|
39
40
|
| `keyword` | 用户名/昵称搜索(可选) |
|
|
40
|
-
| `category` | 品类筛选数组(可选)。支持两种格式:① **父类目模式(推荐优先使用)**:`[{parent_category_id: "父ID"}]`,不传 `child_category_id_list`,搜索该父类目下所有子类目;②
|
|
41
|
+
| `category` | 品类筛选数组(可选)。支持两种格式:① **父类目模式(推荐优先使用)**:`[{parent_category_id: "父ID"}]`,不传 `child_category_id_list`,搜索该父类目下所有子类目;② **父+直接子类目模式(仅兜底)**:`[{parent_category_id: "父ID", child_category_id_list: ["直接子类ID1"]}]`,子类目只能比父类目深一级。多个对象 OR 关系,单个对象内 child_category_id_list AND 关系。类目 ID **必须先通过 `get_categories` 获取**,不要硬编码或猜测;**禁止使用深层叶子 ID**。 |
|
|
41
42
|
| `gmv_ranges` | GMV 区间数组,取值见下表(可选) |
|
|
42
43
|
| `page_size` | 每页条数,默认/上限 20 |
|
|
43
44
|
| `page_token` | 翻页令牌,首次不传,用上一页返回的 `next_page_token` 续拉 |
|
|
@@ -50,6 +51,15 @@
|
|
|
50
51
|
- **务必透传每个达人的 `creator_open_id`**——这是后续 `create_conversation` 建联的必需字段,且**仅搜索结果返回**(分析接口不返回)。
|
|
51
52
|
- 单页最多 20 条,大批量搜索需用 `page_token` 多次翻页。
|
|
52
53
|
|
|
54
|
+
### 类目过滤闭环校验(防静默失效)
|
|
55
|
+
|
|
56
|
+
用了 `category` 过滤时,搜索返回后**必须自检**:把返回结果里各达人的 `category_ids` 汇总,与本次传入的 `parent_category_id` / `child_category_id_list` 比对。
|
|
57
|
+
|
|
58
|
+
- 若**零重叠**(返回的 `category_ids` 完全不含所传的类目 ID),说明类目 ID 很可能层级过深或版本不对,**过滤已静默失效**——不要把这批结果当作"符合品类"直接给用户。此时应:
|
|
59
|
+
1. 提示用户"当前类目过滤可能未生效";
|
|
60
|
+
2. 回退到更浅的类目层级重搜:把所传的深层子类目换成其**父类目**(只传 `parent_category_id`)重新 `search_creators`;仍零重叠时再上溯一级到顶级父类目。
|
|
61
|
+
- 若有重叠,说明过滤生效,正常展示。
|
|
62
|
+
|
|
53
63
|
## 降级:直接 API
|
|
54
64
|
|
|
55
65
|
MCP 不可用时,降级用环境变量凭证直接调用:
|
|
@@ -59,7 +69,7 @@ POST https://open-api.tiktokglobalshop.com/affiliate_seller/202508/marketplace_c
|
|
|
59
69
|
```
|
|
60
70
|
|
|
61
71
|
- 签名:HMAC-SHA256,body 为空 `{}` 时不参与签名;compact JSON `separators=(",", ":")`
|
|
62
|
-
- 类目 ID 应通过 `GET /product/202309/categories` 获取,不要硬编码。MCP 可用时用 `get_categories`
|
|
72
|
+
- 类目 ID 应通过 `GET /product/202309/categories` 获取,不要硬编码。MCP 可用时用 `get_categories` 工具。注意达人搜索的 `category` 只认「父类目 + 直接下一级子类目」,深层叶子无效;已知父类目段 ID 形如 `600001`(6 位),可作层级参考。
|
|
63
73
|
|
|
64
74
|
## 错误处理
|
|
65
75
|
|