@gecho-ai/gecho-bridge 1.1.23 → 1.1.26
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/.claude-plugin/plugin.json +1 -1
- package/README.md +71 -23
- package/README.zh.md +71 -23
- package/dist/mcp-client.cjs +178 -9
- package/dist/server.cjs +7 -5
- package/mcp-client.js +184 -8
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/qywx.jpg +0 -0
- package/server.js +10 -5
- package/skills/tiktok-search/SKILL.md +143 -16
- package/skills/tiktok-search/_meta.json +1 -1
package/README.md
CHANGED
|
@@ -1,37 +1,54 @@
|
|
|
1
1
|
# Gecho Bridge 🚀
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
After installation, whether you use **OpenClaw**, **Hermes**, or **Trae**, your AI assistant can directly control the browser to automate TikTok search, data collection, and deep business opportunity insights.
|
|
3
|
+
**Gecho Bridge connects AI clients such as OpenClaw, Hermes, Trae, and Claude Code to a live Chrome browser through MCP and the Gecho Chrome extension.** Use it to search TikTok videos, collect structured metadata, save JSON results, and run async product, trend, competitor, and content insight workflows.
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
## ⚠️ Critical Prerequisite: Read Before Use
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
Gecho Bridge cannot work from the README, Skill page, or MCP config alone. Before the first TikTok search or insight job, all 3 items below are required:
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
1. **Configure Gecho Bridge MCP** in your AI client.
|
|
10
|
+
2. **Install the Gecho Chrome extension** and log in to your Gecho account.
|
|
11
|
+
3. **Log in to TikTok web in Chrome** and keep the logged-in TikTok tab open.
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
If any of these are missing, TikTok search and insight tools may fail even if the Skill or plugin is installed.
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
- Collect large volumes of structured data (video ID, title, likes, playback link, and more) and safely save it as JSON files.
|
|
18
|
-
- Run **asynchronous deep insights** based on large-scale retrieval to intelligently summarize winning-product trends and potential business opportunities.
|
|
15
|
+
## 🚀 3-Step Quick Start
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
### Step 1: Install the Gecho Chrome extension
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
1. Open the [Gecho Chrome extension download page](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb).
|
|
20
|
+
2. Click `Add to Chrome`, then confirm `Add extension`.
|
|
21
|
+
|
|
22
|
+
### Step 2: Log in to the Gecho extension
|
|
23
|
+
|
|
24
|
+
Open the Gecho extension in Chrome, log in to your Gecho account, and keep the extension online.
|
|
25
|
+
|
|
26
|
+
### Step 3: Log in to TikTok web
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
Open TikTok in Chrome, log in to the TikTok web app, and keep the logged-in TikTok tab open while using Gecho.
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
After setup is complete, return to OpenClaw Dashboard, Hermes, or your MCP client and ask:
|
|
30
31
|
|
|
31
|
-
-
|
|
32
|
-
-
|
|
32
|
+
- "Search computers on TikTok"
|
|
33
|
+
- "Search hamburgers on TikTok"
|
|
34
|
+
- "Run TikTok insight for portable blender"
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
## 🔗 Official Links & Setup Help
|
|
37
|
+
|
|
38
|
+
- **Official Website**: [https://gecho.ai/](https://gecho.ai/)
|
|
39
|
+
- **Chrome Extension**: [Install from Chrome Web Store](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb)
|
|
40
|
+
- **OpenClaw Setup Video**: [OpenClaw + TikTok setup tutorial](https://www.youtube.com/watch?v=ggwY9hISHcQ)
|
|
41
|
+
- **Hermes Setup Video**: [Hermes + TikTok setup tutorial](https://www.youtube.com/watch?v=zHKnuWnxt_c)
|
|
42
|
+
- **YouTube Channel**: [@Gecho-AI](https://www.youtube.com/@Gecho-AI)
|
|
43
|
+
- **GitHub**: [https://github.com/gecho-ai/gecho-bridge](https://github.com/gecho-ai/gecho-bridge)
|
|
44
|
+
- **ClawHub Plugin Page**: [https://clawhub.ai/p/gecho-ai](https://clawhub.ai/p/gecho-ai)
|
|
45
|
+
- **Discord Support**: [Join Discord](https://discord.gg/RFDVZMR6Tn)
|
|
46
|
+
- **WeCom Group**: [View group QR code](https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg)
|
|
47
|
+
- **1:1 Support**: [View personal support QR code](https://github.com/gecho-ai/gecho-bridge/blob/main/wx.jpg)
|
|
48
|
+
|
|
49
|
+
| WeCom Group | 1:1 Support |
|
|
50
|
+
| :---: | :---: |
|
|
51
|
+
| <img src="https://raw.githubusercontent.com/gecho-ai/gecho-bridge/main/qywx.jpg" width="160" alt="WeCom Group QR Code" /> | <img src="https://raw.githubusercontent.com/gecho-ai/gecho-bridge/main/wx.jpg" width="160" alt="Personal Support QR Code" /> |
|
|
35
52
|
|
|
36
53
|
---
|
|
37
54
|
|
|
@@ -45,7 +62,9 @@ The **Skill** on ClawHub mainly provides calling instructions for the large mode
|
|
|
45
62
|
### 0. Prerequisites
|
|
46
63
|
1. **Node.js**: >= 18 (must support `npm` / `npx`).
|
|
47
64
|
2. **Browser extension**: Please [install the Gecho browser extension here first](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb).
|
|
48
|
-
3. **
|
|
65
|
+
3. **Gecho login**: Open the Gecho extension in Chrome and log in to your Gecho account. Keep the extension online.
|
|
66
|
+
4. **TikTok login**: Open TikTok in Chrome, log in to the TikTok web app, and keep the logged-in TikTok tab open.
|
|
67
|
+
5. **Network and state**: Make sure your local network can access TikTok reliably and the TikTok tab is not blocked by CAPTCHA, login walls, or a frozen page.
|
|
49
68
|
|
|
50
69
|
### Option 1: One-Click Installation in OpenClaw (ClawHub)
|
|
51
70
|
ClawHub offers two installation types: `Skill` and `Plugin`.
|
|
@@ -111,7 +130,18 @@ After the environment is configured and your AI client has restarted, you can di
|
|
|
111
130
|
1. `gecho-bridge` MCP is configured, or the `@gecho-ai/gecho-bridge-bundle` plugin is installed.
|
|
112
131
|
2. The [Gecho browser extension](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb) is installed.
|
|
113
132
|
3. TikTok is open in Chrome and the account is logged in.
|
|
114
|
-
4. The Gecho extension is logged in
|
|
133
|
+
4. The Gecho extension is logged in to a Gecho account and online.
|
|
134
|
+
5. The TikTok page is not stuck or left on a CAPTCHA page.
|
|
135
|
+
|
|
136
|
+
### 🧩 Skills
|
|
137
|
+
|
|
138
|
+
Gecho provides both an aggregate TikTok Skill and focused single-tool Skills:
|
|
139
|
+
|
|
140
|
+
- **`tiktok-search`**: the default aggregate Skill for the complete TikTok search and insight workflow. It covers `tiktok_search`, `tiktok_insight`, and `check_insight_status`.
|
|
141
|
+
- **`tiktok-video-search`**: a focused distribution Skill for keyword-based TikTok video search and metadata collection.
|
|
142
|
+
- **`tiktok-insight`**: a focused distribution Skill for TikTok product, trend, competitor, and content insight jobs, plus insight status checks.
|
|
143
|
+
|
|
144
|
+
If you only need one focused capability, use the single-tool Skills. If you want the full research workflow, use `tiktok-search`.
|
|
115
145
|
|
|
116
146
|
### 🔍 Basic Search (`tiktok_search`)
|
|
117
147
|
Suitable for quickly retrieving and collecting video data.
|
|
@@ -178,6 +208,24 @@ If installation is successful, you should see `Status: loaded` and `MCP servers:
|
|
|
178
208
|
|
|
179
209
|
---
|
|
180
210
|
|
|
211
|
+
## ❓ FAQ
|
|
212
|
+
|
|
213
|
+
### Why is the Chrome extension required? Can't I just use the web page?
|
|
214
|
+
|
|
215
|
+
Gecho needs real-time platform data from a live browser session, such as TikTok videos and other platform data in Gecho workflows. The Chrome extension connects the AI workflow to your logged-in Chrome session; the Skill page alone cannot collect this data.
|
|
216
|
+
|
|
217
|
+
### Why do I need to log in to TikTok? Can I use it without login?
|
|
218
|
+
|
|
219
|
+
TikTok limits content access for logged-out users. After you log in, the extension can access the complete data available in your browser session, such as video captions/scripts, comments, engagement data, and other signals when available.
|
|
220
|
+
|
|
221
|
+
Gecho does not ask for or collect your TikTok password, private account information, or publish anything on your behalf.
|
|
222
|
+
|
|
223
|
+
### Need help?
|
|
224
|
+
|
|
225
|
+
Join our [Discord](https://discord.gg/RFDVZMR6Tn), scan the [WeCom group QR code](https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg), or scan the [personal support QR code](https://github.com/gecho-ai/gecho-bridge/blob/main/wx.jpg) for 1:1 support.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
181
229
|
## 🧑💻 Local Development
|
|
182
230
|
|
|
183
231
|
For developers who want to build on top of this tool:
|
package/README.zh.md
CHANGED
|
@@ -1,37 +1,54 @@
|
|
|
1
1
|
# Gecho Bridge 🚀
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
安装后,无论是使用 **OpenClaw**、**Hermes** 还是 **Trae**,你的 AI 助手都能直接控制浏览器,自动化完成 TikTok 搜索、数据抓取与深度商机洞察。
|
|
3
|
+
**Gecho Bridge 通过 MCP 和 Gecho Chrome 扩展,把 OpenClaw、Hermes、Trae、Claude Code 等 AI 客户端连接到真实 Chrome 浏览器。** 你可以用它搜索 TikTok 视频、采集结构化元数据、保存 JSON 结果,并运行异步的产品、趋势、竞品和内容洞察工作流。
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
## ⚠️ 重要前置:使用前必看
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
Gecho Bridge 不能只靠 README、Skill 页面或 MCP 配置单独运行。首次搜索 TikTok 或运行洞察任务前,必须同时满足下面 3 个条件:
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
1. **在 AI 客户端中配置 Gecho Bridge MCP**。
|
|
10
|
+
2. **安装 Gecho Chrome 扩展**,并在扩展中登录 Gecho 账号。
|
|
11
|
+
3. **在 Chrome 中登录 TikTok 网页版**,并保持已登录的 TikTok 标签页打开。
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
如果任一条件缺失,即使 Skill 或 Plugin 已安装,TikTok 搜索和洞察功能也可能无法正常运行。
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
- 抓取海量结构化数据(视频 ID、标题、点赞量、播放链接等)并自动安全落盘为 JSON 文件。
|
|
18
|
-
- 执行基于大数据检索的**异步深度洞察**,智能提炼爆款趋势与潜在商机。
|
|
15
|
+
## 🚀 3 步快速上手
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
### 第一步:安装 Gecho Chrome 扩展
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
1. 打开 [Gecho Chrome 扩展下载页](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb)。
|
|
20
|
+
2. 点击 `添加至 Chrome`,然后确认 `添加扩展程序`。
|
|
21
|
+
|
|
22
|
+
### 第二步:登录 Gecho 扩展
|
|
23
|
+
|
|
24
|
+
在 Chrome 中打开 Gecho 扩展,登录 Gecho 账号,并保持扩展在线。
|
|
25
|
+
|
|
26
|
+
### 第三步:登录 TikTok 网页版
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
在 Chrome 中打开 TikTok 网页版并登录账号,使用 Gecho 时保持已登录的 TikTok 标签页打开。
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
完成后,回到 OpenClaw Dashboard、Hermes 或其他 MCP 客户端,直接发送:
|
|
30
31
|
|
|
31
|
-
-
|
|
32
|
-
-
|
|
32
|
+
- “Search 电脑 on TikTok”
|
|
33
|
+
- “Search 汉堡 on TikTok”
|
|
34
|
+
- “Run TikTok insight for portable blender”
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
## 🔗 官方链接与安装帮助
|
|
37
|
+
|
|
38
|
+
- **官网**:[https://gecho.ai/](https://gecho.ai/)
|
|
39
|
+
- **Chrome 扩展**:[前往 Chrome 网上应用店下载](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb)
|
|
40
|
+
- **OpenClaw 安装教程**:[OpenClaw + TikTok 安装视频](https://www.youtube.com/watch?v=ggwY9hISHcQ)
|
|
41
|
+
- **Hermes 安装教程**:[Hermes + TikTok 安装视频](https://www.youtube.com/watch?v=zHKnuWnxt_c)
|
|
42
|
+
- **YouTube 主页**:[@Gecho-AI](https://www.youtube.com/@Gecho-AI)
|
|
43
|
+
- **GitHub**:[https://github.com/gecho-ai/gecho-bridge](https://github.com/gecho-ai/gecho-bridge)
|
|
44
|
+
- **ClawHub 插件页**:[https://clawhub.ai/p/gecho-ai](https://clawhub.ai/p/gecho-ai)
|
|
45
|
+
- **Discord 支持**:[点击加入 Discord](https://discord.gg/RFDVZMR6Tn)
|
|
46
|
+
- **企业微信群**:[查看群二维码](https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg)
|
|
47
|
+
- **1 对 1 客服**:[查看客服二维码](https://github.com/gecho-ai/gecho-bridge/blob/main/wx.jpg)
|
|
48
|
+
|
|
49
|
+
| 企业微信群 | 1 对 1 客服 |
|
|
50
|
+
| :---: | :---: |
|
|
51
|
+
| <img src="https://raw.githubusercontent.com/gecho-ai/gecho-bridge/main/qywx.jpg" width="160" alt="企业微信群二维码" /> | <img src="https://raw.githubusercontent.com/gecho-ai/gecho-bridge/main/wx.jpg" width="160" alt="1 对 1 客服二维码" /> |
|
|
35
52
|
|
|
36
53
|
---
|
|
37
54
|
|
|
@@ -45,7 +62,9 @@ ClawHub 上的 **Skill** 主要提供给大模型的调用指令,本身不是
|
|
|
45
62
|
### 0. 前置环境要求
|
|
46
63
|
1. **Node.js**:>= 18(需支持 `npm` / `npx`)。
|
|
47
64
|
2. **浏览器扩展**:请先[点击此处安装 Gecho 浏览器扩展](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb)。
|
|
48
|
-
3.
|
|
65
|
+
3. **Gecho 登录**:在 Chrome 中打开 Gecho 扩展,并登录 Gecho 账号,保持扩展在线。
|
|
66
|
+
4. **TikTok 登录**:在 Chrome 中打开 TikTok 网页版并登录账号,保持已登录的 TikTok 标签页打开。
|
|
67
|
+
5. **网络与状态**:确保本地网络可稳定访问 TikTok,且 TikTok 页面没有停在验证码、登录墙或卡死状态。
|
|
49
68
|
|
|
50
69
|
### 方式一:在 OpenClaw 中一键安装 (ClawHub)
|
|
51
70
|
ClawHub 中有两种安装方式:`Skill` 与 `Plugin`。
|
|
@@ -111,7 +130,18 @@ claude mcp add gecho-bridge -- npx -y @gecho-ai/gecho-bridge@latest
|
|
|
111
130
|
1. 已配置 `gecho-bridge` MCP,或已安装 `@gecho-ai/gecho-bridge-bundle` Plugin。
|
|
112
131
|
2. 已安装 [Gecho 浏览器扩展](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb)。
|
|
113
132
|
3. Chrome 中已打开 TikTok 并登录账号。
|
|
114
|
-
4. Gecho
|
|
133
|
+
4. Gecho 扩展已登录 Gecho 账号并处于在线状态。
|
|
134
|
+
5. TikTok 页面未卡住或未停在验证码页面。
|
|
135
|
+
|
|
136
|
+
### 🧩 Skills 说明
|
|
137
|
+
|
|
138
|
+
Gecho 同时提供 TikTok 聚合 Skill 和单工具分发 Skill:
|
|
139
|
+
|
|
140
|
+
- **`tiktok-search`**:默认聚合 Skill,适合完整 TikTok 搜索 + 洞察工作流,覆盖 `tiktok_search`、`tiktok_insight` 和 `check_insight_status`。
|
|
141
|
+
- **`tiktok-video-search`**:单工具分发 Skill,适合按关键词搜索 TikTok 视频并采集元数据。
|
|
142
|
+
- **`tiktok-insight`**:单工具分发 Skill,适合 TikTok 产品、趋势、竞品和内容洞察任务,并支持查询洞察任务状态。
|
|
143
|
+
|
|
144
|
+
如果只需要某个单点能力,可以使用单工具 Skill;如果需要完整研究流程,建议使用 `tiktok-search`。
|
|
115
145
|
|
|
116
146
|
### 🔍 基础搜索 (`tiktok_search`)
|
|
117
147
|
适用于快速检索和收集视频数据。
|
|
@@ -178,6 +208,24 @@ openclaw plugins info @gecho-ai/gecho-bridge-bundle
|
|
|
178
208
|
|
|
179
209
|
---
|
|
180
210
|
|
|
211
|
+
## ❓ 常见问题(FAQ)
|
|
212
|
+
|
|
213
|
+
### 为什么一定要装 Chrome 插件?不能直接在网页用吗?
|
|
214
|
+
|
|
215
|
+
Gecho 需要从真实浏览器会话中获取实时平台数据,例如 TikTok 视频以及 Gecho 工作流中的其他平台数据。Chrome 扩展负责把 AI 工作流连接到你已登录的 Chrome 会话;仅靠 Skill 页面本身无法完成这些数据获取。
|
|
216
|
+
|
|
217
|
+
### 为什么还要登录 TikTok?不登录不能用吗?
|
|
218
|
+
|
|
219
|
+
TikTok 对未登录用户的内容访问权限有限。登录后,扩展才能访问你浏览器会话中可见的完整数据,例如视频文案/脚本、评论、互动数据以及其他可用信号。
|
|
220
|
+
|
|
221
|
+
Gecho 不会索取或收集你的 TikTok 密码、隐私信息,也不会代表你发布任何内容。
|
|
222
|
+
|
|
223
|
+
### 还有问题?
|
|
224
|
+
|
|
225
|
+
欢迎加入 [Discord](https://discord.gg/RFDVZMR6Tn)、扫描 [企业微信群二维码](https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg),或扫描 [1 对 1 客服二维码](https://github.com/gecho-ai/gecho-bridge/blob/main/wx.jpg) 获取支持。
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
181
229
|
## 🧑💻 本地开发
|
|
182
230
|
|
|
183
231
|
对于希望基于本工具进行二次开发的开发者:
|
package/dist/mcp-client.cjs
CHANGED
|
@@ -33854,7 +33854,7 @@ var require_package = __commonJS({
|
|
|
33854
33854
|
"package.json"(exports2, module2) {
|
|
33855
33855
|
module2.exports = {
|
|
33856
33856
|
name: "@gecho-ai/gecho-bridge",
|
|
33857
|
-
version: "1.1.
|
|
33857
|
+
version: "1.1.26",
|
|
33858
33858
|
description: "TikTok Search and Insight tools for OpenClaw, connecting LLMs to TikTok via Chrome Extension.",
|
|
33859
33859
|
main: "mcp-client.js",
|
|
33860
33860
|
bin: {
|
|
@@ -33932,7 +33932,16 @@ var SERVICE_PROTOCOL_VERSION = 2;
|
|
|
33932
33932
|
var SUPPORTED_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
33933
33933
|
"tiktok_search",
|
|
33934
33934
|
"tiktok_insight",
|
|
33935
|
-
"check_insight_status"
|
|
33935
|
+
"check_insight_status",
|
|
33936
|
+
"tiktok_influencer",
|
|
33937
|
+
"tiktok_shop_search",
|
|
33938
|
+
"tiktok_product",
|
|
33939
|
+
"tiktok_video",
|
|
33940
|
+
"x_search",
|
|
33941
|
+
"x_post_detail",
|
|
33942
|
+
"amazon_search",
|
|
33943
|
+
"amazon_product",
|
|
33944
|
+
"amazon_reviews"
|
|
33936
33945
|
]);
|
|
33937
33946
|
var CLIENT_VERSION = packageJson.version;
|
|
33938
33947
|
var server = new Server(
|
|
@@ -34063,7 +34072,7 @@ async function restartServiceRunning() {
|
|
|
34063
34072
|
}
|
|
34064
34073
|
function shouldRestartServiceForError(message, toolName) {
|
|
34065
34074
|
const text = String(message || "");
|
|
34066
|
-
if ((toolName === "tiktok_insight" || toolName === "check_insight_status") && (text.includes("Not found") || text.includes("HTTP 404"))) {
|
|
34075
|
+
if ((toolName === "tiktok_insight" || toolName === "tiktok_influencer" || toolName === "check_insight_status") && (text.includes("Not found") || text.includes("HTTP 404"))) {
|
|
34067
34076
|
return true;
|
|
34068
34077
|
}
|
|
34069
34078
|
return false;
|
|
@@ -34082,6 +34091,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
34082
34091
|
type: "object",
|
|
34083
34092
|
properties: {
|
|
34084
34093
|
query: { type: "string", description: "\u641C\u7D22\u5173\u952E\u8BCD (\u4F8B\u5982: '\u732B\u8584\u8377')" },
|
|
34094
|
+
targetCount: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u6570\u91CF\uFF0C\u9ED8\u8BA4 100", default: 100 },
|
|
34085
34095
|
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u8BF7\u63D0\u4F9B\u6587\u4EF6\u5939\u8DEF\u5F84\uFF0C\u4E0D\u8981\u5E26 .json \u7B49\u6587\u4EF6\u540E\u7F00\uFF0C\u4F8B\u5982: '/Users/xxx/data'\uFF09" }
|
|
34086
34096
|
},
|
|
34087
34097
|
required: ["query"]
|
|
@@ -34109,6 +34119,121 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
34109
34119
|
},
|
|
34110
34120
|
required: ["jobId"]
|
|
34111
34121
|
}
|
|
34122
|
+
},
|
|
34123
|
+
{
|
|
34124
|
+
name: "tiktok_influencer",
|
|
34125
|
+
description: "\u83B7\u53D6\u6307\u5B9A TikTok \u8FBE\u4EBA\u4E3B\u9875\u53D1\u5E03\u7684\u6240\u6709\u89C6\u9891 data\u3002(\u540C\u6B65\u5DE5\u5177\uFF1A\u4F1A\u81EA\u52A8\u6EDA\u52A8\u91C7\u96C6\u5E76\u76F4\u63A5\u8FD4\u56DE\u7ED3\u679C\uFF0C\u5EFA\u8BAE targetCount \u4E0D\u8D85\u8FC7 500)",
|
|
34126
|
+
inputSchema: {
|
|
34127
|
+
type: "object",
|
|
34128
|
+
properties: {
|
|
34129
|
+
uniqueId: { type: "string", description: "\u8FBE\u4EBA\u7684 unique_id (\u4F8B\u5982: 'zachking')" },
|
|
34130
|
+
targetCount: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u89C6\u9891\u6570\u91CF\uFF0C\u9ED8\u8BA4 100", default: 100 },
|
|
34131
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34132
|
+
},
|
|
34133
|
+
required: ["uniqueId"]
|
|
34134
|
+
}
|
|
34135
|
+
},
|
|
34136
|
+
{
|
|
34137
|
+
name: "tiktok_shop_search",
|
|
34138
|
+
description: "\u5728 TikTok Shop \u4E2D\u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u83B7\u53D6\u8FD4\u56DE\u7684\u6240\u6709\u5546\u54C1\u4FE1\u606F\u3002\u652F\u6301\u81EA\u52A8\u4E0B\u6ED1\u83B7\u53D6\u66F4\u591A\u6570\u636E\u3002",
|
|
34139
|
+
inputSchema: {
|
|
34140
|
+
type: "object",
|
|
34141
|
+
properties: {
|
|
34142
|
+
query: { type: "string", description: "\u641C\u7D22\u5173\u952E\u8BCD (\u4F8B\u5982: 'lulu clothes')" },
|
|
34143
|
+
targetCount: { type: "number", description: "\u9884\u671F\u83B7\u53D6\u7684\u5546\u54C1\u6570\u91CF\uFF0C\u9ED8\u8BA4 100\uFF0C\u8BBE\u4E3A\u66F4\u9AD8\u503C\u4EE5\u83B7\u53D6\u66F4\u591A\u6570\u636E", default: 100 },
|
|
34144
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u8BF7\u63D0\u4F9B\u6587\u4EF6\u5939\u8DEF\u5F84\uFF0C\u4E0D\u8981\u5E26 .json \u7B49\u6587\u4EF6\u540E\u7F00\uFF0C\u4F8B\u5982: '/Users/xxx/data'\uFF09" }
|
|
34145
|
+
},
|
|
34146
|
+
required: ["query"]
|
|
34147
|
+
}
|
|
34148
|
+
},
|
|
34149
|
+
{
|
|
34150
|
+
name: "tiktok_product",
|
|
34151
|
+
description: "\u83B7\u53D6 TikTok Shop \u5546\u54C1\u8BE6\u60C5\u9875\u7684\u5B8C\u6574\u6570\u636E\uFF08\u6807\u9898\u3001\u4EF7\u683C\u3001SKU\u3001\u63CF\u8FF0\u3001\u9500\u91CF\u3001\u8BC4\u4EF7\u7B49\uFF09\u3002",
|
|
34152
|
+
inputSchema: {
|
|
34153
|
+
type: "object",
|
|
34154
|
+
properties: {
|
|
34155
|
+
product_url: { type: "string", description: "\u5546\u54C1\u8BE6\u60C5\u9875 URL \u6216 \u5546\u54C1 ID (\u4F8B\u5982: '1731523855832879280' \u6216 'https://shop.tiktok.com/us/pdp/...') " },
|
|
34156
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34157
|
+
},
|
|
34158
|
+
required: ["product_url"]
|
|
34159
|
+
}
|
|
34160
|
+
},
|
|
34161
|
+
{
|
|
34162
|
+
name: "tiktok_video",
|
|
34163
|
+
description: "\u83B7\u53D6 TikTok \u89C6\u9891\u8BE6\u60C5\u53CA\u8BC4\u8BBA\u3002\u4F1A\u6253\u5F00\u89C6\u9891\u8BE6\u60C5\u9875\u3001\u5C55\u5F00\u8BC4\u8BBA\u5E76\u6301\u7EED\u4E0B\u6ED1\u91C7\u96C6\u3002",
|
|
34164
|
+
inputSchema: {
|
|
34165
|
+
type: "object",
|
|
34166
|
+
properties: {
|
|
34167
|
+
url: { type: "string", description: "TikTok \u89C6\u9891\u8BE6\u60C5\u9875 URL\uFF0C\u4F8B\u5982 https://www.tiktok.com/@user/video/123..." },
|
|
34168
|
+
targetCount: { type: "number", description: "\u6700\u591A\u91C7\u96C6\u7684\u8BC4\u8BBA\u53CA\u56DE\u590D\u6570\u91CF\uFF0C\u9ED8\u8BA4\u4E14\u4E0A\u9650\u4E3A 200", default: 200, maximum: 200 },
|
|
34169
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34170
|
+
},
|
|
34171
|
+
required: ["url"]
|
|
34172
|
+
}
|
|
34173
|
+
},
|
|
34174
|
+
{
|
|
34175
|
+
name: "x_search",
|
|
34176
|
+
description: "\u5728 X (Twitter) \u4E0A\u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u91C7\u96C6\u63A8\u6587\u5185\u5BB9\u3001\u4E92\u52A8\u6570\u53CA\u4F5C\u8005\u4FE1\u606F\u3002",
|
|
34177
|
+
inputSchema: {
|
|
34178
|
+
type: "object",
|
|
34179
|
+
properties: {
|
|
34180
|
+
query: { type: "string", description: "\u641C\u7D22\u5173\u952E\u8BCD (\u4F8B\u5982: 'trump')" },
|
|
34181
|
+
targetCount: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u63A8\u6587\u6570\u91CF\uFF0C\u9ED8\u8BA4 100", default: 100 },
|
|
34182
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34183
|
+
},
|
|
34184
|
+
required: ["query"]
|
|
34185
|
+
}
|
|
34186
|
+
},
|
|
34187
|
+
{
|
|
34188
|
+
name: "x_post_detail",
|
|
34189
|
+
description: "\u83B7\u53D6 X (Twitter) \u67D0\u6761\u63A8\u6587\u7684\u8BE6\u60C5\uFF0C\u5305\u62EC\u4E3B\u63A8\u6587\u5185\u5BB9\u53CA\u5927\u91CF\u8BC4\u8BBA\u3002",
|
|
34190
|
+
inputSchema: {
|
|
34191
|
+
type: "object",
|
|
34192
|
+
properties: {
|
|
34193
|
+
url: { type: "string", description: "\u63A8\u6587\u8BE6\u60C5\u9875 URL (\u4F8B\u5982: 'https://x.com/user/status/123...')" },
|
|
34194
|
+
targetCount: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u8BC4\u8BBA\u6570\u91CF\uFF0C\u9ED8\u8BA4 100", default: 100 },
|
|
34195
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34196
|
+
},
|
|
34197
|
+
required: ["url"]
|
|
34198
|
+
}
|
|
34199
|
+
},
|
|
34200
|
+
{
|
|
34201
|
+
name: "amazon_search",
|
|
34202
|
+
description: "\u5728 Amazon \u4E0A\u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u81EA\u52A8\u91C7\u96C6\u591A\u9875\u5546\u54C1\u4FE1\u606F\uFF08\u652F\u6301\u81EA\u52A8\u7FFB\u9875\uFF09\u3002",
|
|
34203
|
+
inputSchema: {
|
|
34204
|
+
type: "object",
|
|
34205
|
+
properties: {
|
|
34206
|
+
query: { type: "string", description: "\u641C\u7D22\u5173\u952E\u8BCD (\u4F8B\u5982: 'clothes')" },
|
|
34207
|
+
targetPages: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u9875\u6570\uFF0C\u9ED8\u8BA4 5 (\u7EA6100\u6761)", default: 5 },
|
|
34208
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34209
|
+
},
|
|
34210
|
+
required: ["query"]
|
|
34211
|
+
}
|
|
34212
|
+
},
|
|
34213
|
+
{
|
|
34214
|
+
name: "amazon_product",
|
|
34215
|
+
description: "\u83B7\u53D6 Amazon \u5546\u54C1\u8BE6\u60C5\u9875\u7684\u5B8C\u6574\u6570\u636E\uFF08\u6807\u9898\u3001\u4EF7\u683C\u3001\u63CF\u8FF0\u3001\u53D8\u4F53\u3001\u89C4\u683C\u7B49\uFF09\u3002",
|
|
34216
|
+
inputSchema: {
|
|
34217
|
+
type: "object",
|
|
34218
|
+
properties: {
|
|
34219
|
+
product_url: { type: "string", description: "\u5546\u54C1\u8BE6\u60C5\u9875 URL \u6216 ASIN (\u4F8B\u5982: 'B0CXJJHY8B' \u6216 'https://www.amazon.com/dp/...') " },
|
|
34220
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34221
|
+
},
|
|
34222
|
+
required: ["product_url"]
|
|
34223
|
+
}
|
|
34224
|
+
},
|
|
34225
|
+
{
|
|
34226
|
+
name: "amazon_reviews",
|
|
34227
|
+
description: "\u5728 Amazon \u4E13\u7528\u8BC4\u8BBA\u9875\u91C7\u96C6\u8BC4\u8BBA\uFF0C\u652F\u6301\u591A\u9875\u81EA\u52A8\u7FFB\u9875\u3002",
|
|
34228
|
+
inputSchema: {
|
|
34229
|
+
type: "object",
|
|
34230
|
+
properties: {
|
|
34231
|
+
product_url: { type: "string", description: "\u5546\u54C1\u8BE6\u60C5\u9875 URL \u6216 ASIN (\u4F8B\u5982: 'B0CXJJHY8B' \u6216 'https://www.amazon.com/product-reviews/...') " },
|
|
34232
|
+
targetCount: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u8BC4\u8BBA\u6570\u91CF\uFF0C\u9ED8\u8BA4 100", default: 100 },
|
|
34233
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34234
|
+
},
|
|
34235
|
+
required: ["product_url"]
|
|
34236
|
+
}
|
|
34112
34237
|
}
|
|
34113
34238
|
]
|
|
34114
34239
|
};
|
|
@@ -34249,7 +34374,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
34249
34374
|
}
|
|
34250
34375
|
}, 1e4);
|
|
34251
34376
|
try {
|
|
34252
|
-
const
|
|
34377
|
+
const isAsyncTool = toolName === "tiktok_insight";
|
|
34378
|
+
const targetUrl = isAsyncTool ? `${SERVICE_BASE_URL}/async-action` : HTTP_SERVICE_URL;
|
|
34253
34379
|
const requestService = () => new Promise((resolve, reject) => {
|
|
34254
34380
|
const req = http.request(targetUrl, {
|
|
34255
34381
|
method: "POST",
|
|
@@ -34308,36 +34434,79 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
34308
34434
|
if (serviceResponse.error) {
|
|
34309
34435
|
return { content: [{ type: "text", text: `\u274C \u9519\u8BEF: ${serviceResponse.error}` }], isError: true };
|
|
34310
34436
|
}
|
|
34311
|
-
if (
|
|
34437
|
+
if (serviceResponse.jobId) {
|
|
34312
34438
|
const anticipatedPath = serviceResponse.savePath || "";
|
|
34439
|
+
const actionDesc = toolName === "tiktok_insight" ? "\u6DF1\u5EA6\u6D1E\u5BDF\u4EFB\u52A1" : toolName === "tiktok_influencer" ? "\u8FBE\u4EBA\u91C7\u96C6\u4EFB\u52A1" : "\u5F02\u6B65\u91C7\u96C6\u4EFB\u52A1";
|
|
34313
34440
|
const pathMsg = anticipatedPath ? `
|
|
34314
34441
|
|
|
34315
34442
|
\u{1F4C2} \u9884\u671F\u4FDD\u5B58\u8DEF\u5F84: ${anticipatedPath}
|
|
34316
|
-
(\u8BF7\u5728\
|
|
34443
|
+
(\u8BF7\u5728\u4EFB\u52A1\u81EA\u52A8\u7ED3\u675F\u540E\u524D\u5F80\u8BE5\u6587\u4EF6\u67E5\u770B\u5B8C\u6574\u6570\u636E)` : "";
|
|
34317
34444
|
return {
|
|
34318
34445
|
content: [
|
|
34319
34446
|
{
|
|
34320
34447
|
type: "text",
|
|
34321
|
-
text: `\u2705 \
|
|
34448
|
+
text: `\u2705 ${actionDesc}\u5DF2\u542F\u52A8\u3002
|
|
34322
34449
|
|
|
34323
34450
|
\u4EFB\u52A1 ID (job_id): ${serviceResponse.jobId}${pathMsg}
|
|
34324
34451
|
|
|
34325
|
-
\u8BF7\u4F7F\u7528 \`check_insight_status\` \u5DE5\u5177\u5E76\u4F20\u5165\u4E0A\u8FF0 jobId \u6765\u67E5\u8BE2\u6267\u884C\u7ED3\u679C\u3002\
|
|
34452
|
+
\u8BF7\u4F7F\u7528 \`check_insight_status\` \u5DE5\u5177\u5E76\u4F20\u5165\u4E0A\u8FF0 jobId \u6765\u67E5\u8BE2\u6267\u884C\u7ED3\u679C\u3002\u5EFA\u8BAE\u4F60\u5148\u7B49\u5F85 30-60 \u79D2\u518D\u8FDB\u884C\u7B2C\u4E00\u6B21\u67E5\u8BE2\u3002`
|
|
34326
34453
|
}
|
|
34327
34454
|
]
|
|
34328
34455
|
};
|
|
34329
34456
|
}
|
|
34330
34457
|
const result = serviceResponse.data;
|
|
34458
|
+
if (serviceResponse.success && result === void 0) {
|
|
34459
|
+
return { content: [{ type: "text", text: "\u2705 \u64CD\u4F5C\u6267\u884C\u6210\u529F\u3002" }] };
|
|
34460
|
+
}
|
|
34331
34461
|
if (typeof result === "object" && result !== null && result.error) {
|
|
34332
34462
|
return { content: [{ type: "text", text: `\u274C \u4E1A\u52A1\u9519\u8BEF: ${result.error}` }], isError: true };
|
|
34333
34463
|
}
|
|
34334
34464
|
if (!Array.isArray(result)) {
|
|
34335
|
-
|
|
34465
|
+
const rawResponse = JSON.stringify(serviceResponse).slice(0, 200);
|
|
34466
|
+
return {
|
|
34467
|
+
content: [{
|
|
34468
|
+
type: "text",
|
|
34469
|
+
text: `\u274C \u5F02\u5E38: \u63D2\u4EF6\u672A\u8FD4\u56DE\u6570\u7EC4\u683C\u5F0F\u7684\u7ED3\u679C\u3002
|
|
34470
|
+
\u5DE5\u5177: ${toolName}
|
|
34471
|
+
\u54CD\u5E94\u6458\u8981: ${rawResponse}`
|
|
34472
|
+
}],
|
|
34473
|
+
isError: true
|
|
34474
|
+
};
|
|
34336
34475
|
}
|
|
34337
34476
|
const savePath = serviceResponse.savePath || "";
|
|
34338
34477
|
const saveLine = savePath ? `\u{1F4C2} \u6570\u636E\u5DF2\u5B58: ${savePath}
|
|
34339
34478
|
|
|
34340
34479
|
` : "";
|
|
34480
|
+
if (toolName === "tiktok_video" && result.length > 0) {
|
|
34481
|
+
const video = result[0] || {};
|
|
34482
|
+
const comments = Array.isArray(video.comments) ? video.comments : [];
|
|
34483
|
+
const preview = {
|
|
34484
|
+
...video,
|
|
34485
|
+
comments: comments.slice(0, 20),
|
|
34486
|
+
commentsPreviewed: Math.min(comments.length, 20)
|
|
34487
|
+
};
|
|
34488
|
+
return {
|
|
34489
|
+
content: [
|
|
34490
|
+
{
|
|
34491
|
+
type: "text",
|
|
34492
|
+
text: `\u2705 [${toolName}] \u89C6\u9891\u8BE6\u60C5\u4E0E\u8BC4\u8BBA\u83B7\u53D6\u6210\u529F\uFF0C\u5171\u91C7\u96C6 ${comments.length} \u6761\u8BC4\u8BBA\u53CA\u56DE\u590D\u3002
|
|
34493
|
+
` + saveLine + `\u4EE5\u4E0B\u4EC5\u5C55\u793A\u524D ${preview.commentsPreviewed} \u6761\u8BC4\u8BBA\uFF0C\u5B8C\u6574\u6570\u636E\u8BF7\u67E5\u770B\u4FDD\u5B58\u6587\u4EF6\uFF1A
|
|
34494
|
+
` + JSON.stringify(preview, null, 2)
|
|
34495
|
+
}
|
|
34496
|
+
]
|
|
34497
|
+
};
|
|
34498
|
+
}
|
|
34499
|
+
if (toolName === "tiktok_product" && result.length > 0) {
|
|
34500
|
+
return {
|
|
34501
|
+
content: [
|
|
34502
|
+
{
|
|
34503
|
+
type: "text",
|
|
34504
|
+
text: `\u2705 [${toolName}] \u5546\u54C1\u8BE6\u60C5\u83B7\u53D6\u6210\u529F\uFF01
|
|
34505
|
+
` + saveLine + JSON.stringify(result[0], null, 2)
|
|
34506
|
+
}
|
|
34507
|
+
]
|
|
34508
|
+
};
|
|
34509
|
+
}
|
|
34341
34510
|
const top20 = result.slice(0, 20);
|
|
34342
34511
|
return {
|
|
34343
34512
|
content: [
|
package/dist/server.cjs
CHANGED
|
@@ -3640,7 +3640,7 @@ var require_package = __commonJS({
|
|
|
3640
3640
|
"package.json"(exports2, module2) {
|
|
3641
3641
|
module2.exports = {
|
|
3642
3642
|
name: "@gecho-ai/gecho-bridge",
|
|
3643
|
-
version: "1.1.
|
|
3643
|
+
version: "1.1.26",
|
|
3644
3644
|
description: "TikTok Search and Insight tools for OpenClaw, connecting LLMs to TikTok via Chrome Extension.",
|
|
3645
3645
|
main: "mcp-client.js",
|
|
3646
3646
|
bin: {
|
|
@@ -4460,8 +4460,9 @@ var server = http.createServer(async (req, res) => {
|
|
|
4460
4460
|
const { action: _a, ...params } = payload;
|
|
4461
4461
|
let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || path.join(__dirname, "data");
|
|
4462
4462
|
let anticipatedSavePath = "";
|
|
4463
|
-
const
|
|
4464
|
-
const
|
|
4463
|
+
const fileNameSeed = params.uniqueId || params.query || params.product_url || params.url || action;
|
|
4464
|
+
const safeName = toSafeFileName(fileNameSeed);
|
|
4465
|
+
const prefix = params.uniqueId || params.query || params.product_url || params.url ? `${toSafeFileName(action)}_` : "";
|
|
4465
4466
|
if (dataDir.toLowerCase().endsWith(".json") || dataDir.toLowerCase().endsWith(".csv")) {
|
|
4466
4467
|
anticipatedSavePath = dataDir;
|
|
4467
4468
|
} else {
|
|
@@ -4561,12 +4562,13 @@ var server = http.createServer(async (req, res) => {
|
|
|
4561
4562
|
if (Array.isArray(result) && result.length > 0) {
|
|
4562
4563
|
let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || path.join(__dirname, "data");
|
|
4563
4564
|
let fixedPath;
|
|
4564
|
-
const safeName = toSafeFileName(params.query || action);
|
|
4565
|
-
const prefix = params.query ? `${toSafeFileName(action)}_` : "";
|
|
4566
4565
|
if (dataDir.toLowerCase().endsWith(".json") || dataDir.toLowerCase().endsWith(".csv")) {
|
|
4567
4566
|
fixedPath = dataDir;
|
|
4568
4567
|
dataDir = path.dirname(fixedPath);
|
|
4569
4568
|
} else {
|
|
4569
|
+
const fileNameSeed = params.uniqueId || params.query || params.product_url || params.url || action;
|
|
4570
|
+
const safeName = toSafeFileName(fileNameSeed);
|
|
4571
|
+
const prefix = params.uniqueId || params.query || params.product_url || params.url ? `${toSafeFileName(action)}_` : "";
|
|
4570
4572
|
fixedPath = path.join(dataDir, `${prefix}${safeName}_results.json`);
|
|
4571
4573
|
}
|
|
4572
4574
|
if (!fs.existsSync(dataDir)) fs.mkdirSync(dataDir, { recursive: true });
|
package/mcp-client.js
CHANGED
|
@@ -33,7 +33,16 @@ const SERVICE_PROTOCOL_VERSION = 2;
|
|
|
33
33
|
const SUPPORTED_TOOL_NAMES = new Set([
|
|
34
34
|
"tiktok_search",
|
|
35
35
|
"tiktok_insight",
|
|
36
|
-
"check_insight_status"
|
|
36
|
+
"check_insight_status",
|
|
37
|
+
"tiktok_influencer",
|
|
38
|
+
"tiktok_shop_search",
|
|
39
|
+
"tiktok_product",
|
|
40
|
+
"tiktok_video",
|
|
41
|
+
"x_search",
|
|
42
|
+
"x_post_detail",
|
|
43
|
+
"amazon_search",
|
|
44
|
+
"amazon_product",
|
|
45
|
+
"amazon_reviews"
|
|
37
46
|
]);
|
|
38
47
|
|
|
39
48
|
const CLIENT_VERSION = packageJson.version;
|
|
@@ -187,7 +196,7 @@ async function restartServiceRunning() {
|
|
|
187
196
|
|
|
188
197
|
function shouldRestartServiceForError(message, toolName) {
|
|
189
198
|
const text = String(message || "");
|
|
190
|
-
if ((toolName === "tiktok_insight" || toolName === "check_insight_status") && (text.includes("Not found") || text.includes("HTTP 404"))) {
|
|
199
|
+
if ((toolName === "tiktok_insight" || toolName === "tiktok_influencer" || toolName === "check_insight_status") && (text.includes("Not found") || text.includes("HTTP 404"))) {
|
|
191
200
|
return true;
|
|
192
201
|
}
|
|
193
202
|
return false;
|
|
@@ -209,6 +218,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
209
218
|
type: "object",
|
|
210
219
|
properties: {
|
|
211
220
|
query: { type: "string", description: "搜索关键词 (例如: '猫薄荷')" },
|
|
221
|
+
targetCount: { type: "number", description: "预期采集的数量,默认 100", default: 100 },
|
|
212
222
|
save_dir: { type: "string", description: "可选的保存目录绝对路径(请提供文件夹路径,不要带 .json 等文件后缀,例如: '/Users/xxx/data')" }
|
|
213
223
|
},
|
|
214
224
|
required: ["query"]
|
|
@@ -236,6 +246,121 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
236
246
|
},
|
|
237
247
|
required: ["jobId"]
|
|
238
248
|
}
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
name: "tiktok_influencer",
|
|
252
|
+
description: "获取指定 TikTok 达人主页发布的所有视频 data。(同步工具:会自动滚动采集并直接返回结果,建议 targetCount 不超过 500)",
|
|
253
|
+
inputSchema: {
|
|
254
|
+
type: "object",
|
|
255
|
+
properties: {
|
|
256
|
+
uniqueId: { type: "string", description: "达人的 unique_id (例如: 'zachking')" },
|
|
257
|
+
targetCount: { type: "number", description: "预期采集的视频数量,默认 100", default: 100 },
|
|
258
|
+
save_dir: { type: "string", description: "可选的保存目录绝对路径" }
|
|
259
|
+
},
|
|
260
|
+
required: ["uniqueId"]
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
name: "tiktok_shop_search",
|
|
265
|
+
description: "在 TikTok Shop 中搜索关键词,获取返回的所有商品信息。支持自动下滑获取更多数据。",
|
|
266
|
+
inputSchema: {
|
|
267
|
+
type: "object",
|
|
268
|
+
properties: {
|
|
269
|
+
query: { type: "string", description: "搜索关键词 (例如: 'lulu clothes')" },
|
|
270
|
+
targetCount: { type: "number", description: "预期获取的商品数量,默认 100,设为更高值以获取更多数据", default: 100 },
|
|
271
|
+
save_dir: { type: "string", description: "可选的保存目录绝对路径(请提供文件夹路径,不要带 .json 等文件后缀,例如: '/Users/xxx/data')" }
|
|
272
|
+
},
|
|
273
|
+
required: ["query"]
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
name: "tiktok_product",
|
|
278
|
+
description: "获取 TikTok Shop 商品详情页的完整数据(标题、价格、SKU、描述、销量、评价等)。",
|
|
279
|
+
inputSchema: {
|
|
280
|
+
type: "object",
|
|
281
|
+
properties: {
|
|
282
|
+
product_url: { type: "string", description: "商品详情页 URL 或 商品 ID (例如: '1731523855832879280' 或 'https://shop.tiktok.com/us/pdp/...') " },
|
|
283
|
+
save_dir: { type: "string", description: "可选的保存目录绝对路径" }
|
|
284
|
+
},
|
|
285
|
+
required: ["product_url"]
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
name: "tiktok_video",
|
|
290
|
+
description: "获取 TikTok 视频详情及评论。会打开视频详情页、展开评论并持续下滑采集。",
|
|
291
|
+
inputSchema: {
|
|
292
|
+
type: "object",
|
|
293
|
+
properties: {
|
|
294
|
+
url: { type: "string", description: "TikTok 视频详情页 URL,例如 https://www.tiktok.com/@user/video/123..." },
|
|
295
|
+
targetCount: { type: "number", description: "最多采集的评论及回复数量,默认且上限为 200", default: 200, maximum: 200 },
|
|
296
|
+
save_dir: { type: "string", description: "可选的保存目录绝对路径" }
|
|
297
|
+
},
|
|
298
|
+
required: ["url"]
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
name: "x_search",
|
|
303
|
+
description: "在 X (Twitter) 上搜索关键词,采集推文内容、互动数及作者信息。",
|
|
304
|
+
inputSchema: {
|
|
305
|
+
type: "object",
|
|
306
|
+
properties: {
|
|
307
|
+
query: { type: "string", description: "搜索关键词 (例如: 'trump')" },
|
|
308
|
+
targetCount: { type: "number", description: "预期采集的推文数量,默认 100", default: 100 },
|
|
309
|
+
save_dir: { type: "string", description: "可选的保存目录绝对路径" }
|
|
310
|
+
},
|
|
311
|
+
required: ["query"]
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
name: "x_post_detail",
|
|
316
|
+
description: "获取 X (Twitter) 某条推文的详情,包括主推文内容及大量评论。",
|
|
317
|
+
inputSchema: {
|
|
318
|
+
type: "object",
|
|
319
|
+
properties: {
|
|
320
|
+
url: { type: "string", description: "推文详情页 URL (例如: 'https://x.com/user/status/123...')" },
|
|
321
|
+
targetCount: { type: "number", description: "预期采集的评论数量,默认 100", default: 100 },
|
|
322
|
+
save_dir: { type: "string", description: "可选的保存目录绝对路径" }
|
|
323
|
+
},
|
|
324
|
+
required: ["url"]
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
name: "amazon_search",
|
|
329
|
+
description: "在 Amazon 上搜索关键词,自动采集多页商品信息(支持自动翻页)。",
|
|
330
|
+
inputSchema: {
|
|
331
|
+
type: "object",
|
|
332
|
+
properties: {
|
|
333
|
+
query: { type: "string", description: "搜索关键词 (例如: 'clothes')" },
|
|
334
|
+
targetPages: { type: "number", description: "预期采集的页数,默认 5 (约100条)", default: 5 },
|
|
335
|
+
save_dir: { type: "string", description: "可选的保存目录绝对路径" }
|
|
336
|
+
},
|
|
337
|
+
required: ["query"]
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
name: "amazon_product",
|
|
342
|
+
description: "获取 Amazon 商品详情页的完整数据(标题、价格、描述、变体、规格等)。",
|
|
343
|
+
inputSchema: {
|
|
344
|
+
type: "object",
|
|
345
|
+
properties: {
|
|
346
|
+
product_url: { type: "string", description: "商品详情页 URL 或 ASIN (例如: 'B0CXJJHY8B' 或 'https://www.amazon.com/dp/...') " },
|
|
347
|
+
save_dir: { type: "string", description: "可选的保存目录绝对路径" }
|
|
348
|
+
},
|
|
349
|
+
required: ["product_url"]
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
name: "amazon_reviews",
|
|
354
|
+
description: "在 Amazon 专用评论页采集评论,支持多页自动翻页。",
|
|
355
|
+
inputSchema: {
|
|
356
|
+
type: "object",
|
|
357
|
+
properties: {
|
|
358
|
+
product_url: { type: "string", description: "商品详情页 URL 或 ASIN (例如: 'B0CXJJHY8B' 或 'https://www.amazon.com/product-reviews/...') " },
|
|
359
|
+
targetCount: { type: "number", description: "预期采集的评论数量,默认 100", default: 100 },
|
|
360
|
+
save_dir: { type: "string", description: "可选的保存目录绝对路径" }
|
|
361
|
+
},
|
|
362
|
+
required: ["product_url"]
|
|
363
|
+
}
|
|
239
364
|
}
|
|
240
365
|
]
|
|
241
366
|
};
|
|
@@ -402,7 +527,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
402
527
|
}, 10000); // 频率提高到 10 秒一次
|
|
403
528
|
|
|
404
529
|
try {
|
|
405
|
-
const
|
|
530
|
+
const isAsyncTool = toolName === "tiktok_insight";
|
|
531
|
+
const targetUrl = isAsyncTool ? `${SERVICE_BASE_URL}/async-action` : HTTP_SERVICE_URL;
|
|
406
532
|
|
|
407
533
|
const requestService = () => new Promise((resolve, reject) => {
|
|
408
534
|
const req = http.request(targetUrl, {
|
|
@@ -467,28 +593,44 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
467
593
|
return { content: [{ type: "text", text: `❌ 错误: ${serviceResponse.error}` }], isError: true };
|
|
468
594
|
}
|
|
469
595
|
|
|
470
|
-
//
|
|
471
|
-
if (
|
|
596
|
+
// 鲁棒性修复:只要 serviceResponse 中包含 jobId,不论什么工具都按异步处理返回给 MCP
|
|
597
|
+
if (serviceResponse.jobId) {
|
|
472
598
|
const anticipatedPath = serviceResponse.savePath || "";
|
|
473
|
-
const
|
|
599
|
+
const actionDesc = toolName === "tiktok_insight" ? "深度洞察任务" :
|
|
600
|
+
toolName === "tiktok_influencer" ? "达人采集任务" : "异步采集任务";
|
|
601
|
+
const pathMsg = anticipatedPath ? `\n\n📂 预期保存路径: ${anticipatedPath}\n(请在任务自动结束后前往该文件查看完整数据)` : "";
|
|
474
602
|
|
|
475
603
|
return {
|
|
476
604
|
content: [
|
|
477
605
|
{
|
|
478
606
|
type: "text",
|
|
479
|
-
text: `✅
|
|
607
|
+
text: `✅ ${actionDesc}已启动。\n\n任务 ID (job_id): ${serviceResponse.jobId}${pathMsg}\n\n请使用 \`check_insight_status\` 工具并传入上述 jobId 来查询执行结果。建议你先等待 30-60 秒再进行第一次查询。`
|
|
480
608
|
}
|
|
481
609
|
]
|
|
482
610
|
};
|
|
483
611
|
}
|
|
484
612
|
|
|
613
|
+
// 如果不是异步启动,且响应成功,则校验数据
|
|
485
614
|
const result = serviceResponse.data;
|
|
615
|
+
if (serviceResponse.success && result === undefined) {
|
|
616
|
+
// 针对某些同步接口可能只返回 success: true 的情况 (虽然目前 search 接口通常返回 data)
|
|
617
|
+
return { content: [{ type: "text", text: "✅ 操作执行成功。" }] };
|
|
618
|
+
}
|
|
619
|
+
|
|
486
620
|
if (typeof result === 'object' && result !== null && result.error) {
|
|
487
621
|
return { content: [{ type: "text", text: `❌ 业务错误: ${result.error}` }], isError: true };
|
|
488
622
|
}
|
|
489
623
|
|
|
490
624
|
if (!Array.isArray(result)) {
|
|
491
|
-
|
|
625
|
+
// 如果不是数组也不是异步 jobId,记录更多上下文以便调试
|
|
626
|
+
const rawResponse = JSON.stringify(serviceResponse).slice(0, 200);
|
|
627
|
+
return {
|
|
628
|
+
content: [{
|
|
629
|
+
type: "text",
|
|
630
|
+
text: `❌ 异常: 插件未返回数组格式的结果。\n工具: ${toolName}\n响应摘要: ${rawResponse}`
|
|
631
|
+
}],
|
|
632
|
+
isError: true
|
|
633
|
+
};
|
|
492
634
|
}
|
|
493
635
|
|
|
494
636
|
const savePath = serviceResponse.savePath || "";
|
|
@@ -496,6 +638,40 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
496
638
|
? `📂 数据已存: ${savePath}\n\n`
|
|
497
639
|
: "";
|
|
498
640
|
|
|
641
|
+
if (toolName === "tiktok_video" && result.length > 0) {
|
|
642
|
+
const video = result[0] || {};
|
|
643
|
+
const comments = Array.isArray(video.comments) ? video.comments : [];
|
|
644
|
+
const preview = {
|
|
645
|
+
...video,
|
|
646
|
+
comments: comments.slice(0, 20),
|
|
647
|
+
commentsPreviewed: Math.min(comments.length, 20)
|
|
648
|
+
};
|
|
649
|
+
return {
|
|
650
|
+
content: [
|
|
651
|
+
{
|
|
652
|
+
type: "text",
|
|
653
|
+
text: `✅ [${toolName}] 视频详情与评论获取成功,共采集 ${comments.length} 条评论及回复。\n` +
|
|
654
|
+
saveLine +
|
|
655
|
+
`以下仅展示前 ${preview.commentsPreviewed} 条评论,完整数据请查看保存文件:\n` +
|
|
656
|
+
JSON.stringify(preview, null, 2)
|
|
657
|
+
}
|
|
658
|
+
]
|
|
659
|
+
};
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
if (toolName === "tiktok_product" && result.length > 0) {
|
|
663
|
+
return {
|
|
664
|
+
content: [
|
|
665
|
+
{
|
|
666
|
+
type: "text",
|
|
667
|
+
text: `✅ [${toolName}] 商品详情获取成功!\n` +
|
|
668
|
+
saveLine +
|
|
669
|
+
JSON.stringify(result[0], null, 2)
|
|
670
|
+
}
|
|
671
|
+
]
|
|
672
|
+
};
|
|
673
|
+
}
|
|
674
|
+
|
|
499
675
|
const top20 = result.slice(0, 20);
|
|
500
676
|
return {
|
|
501
677
|
content: [
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
package/qywx.jpg
CHANGED
|
Binary file
|
package/server.js
CHANGED
|
@@ -899,8 +899,11 @@ const server = http.createServer(async (req, res) => {
|
|
|
899
899
|
// 预先计算保存路径,以便立刻返回给客户端
|
|
900
900
|
let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || path.join(__dirname, "data");
|
|
901
901
|
let anticipatedSavePath = "";
|
|
902
|
-
const
|
|
903
|
-
const
|
|
902
|
+
const fileNameSeed = params.uniqueId || params.query || params.product_url || params.url || action;
|
|
903
|
+
const safeName = toSafeFileName(fileNameSeed);
|
|
904
|
+
const prefix = (params.uniqueId || params.query || params.product_url || params.url)
|
|
905
|
+
? `${toSafeFileName(action)}_`
|
|
906
|
+
: "";
|
|
904
907
|
if (dataDir.toLowerCase().endsWith(".json") || dataDir.toLowerCase().endsWith(".csv")) {
|
|
905
908
|
anticipatedSavePath = dataDir;
|
|
906
909
|
} else {
|
|
@@ -1017,14 +1020,16 @@ const server = http.createServer(async (req, res) => {
|
|
|
1017
1020
|
if (Array.isArray(result) && result.length > 0) {
|
|
1018
1021
|
let dataDir = payload.save_dir || process["env"].GECHO_DATA_DIR || path.join(__dirname, "data");
|
|
1019
1022
|
let fixedPath;
|
|
1020
|
-
const safeName = toSafeFileName(params.query || action);
|
|
1021
|
-
const prefix = params.query ? `${toSafeFileName(action)}_` : "";
|
|
1022
|
-
|
|
1023
1023
|
if (dataDir.toLowerCase().endsWith(".json") || dataDir.toLowerCase().endsWith(".csv")) {
|
|
1024
1024
|
// 如果传入的 save_dir 误填成了文件路径,则将其作为最终文件路径,并提取所在目录
|
|
1025
1025
|
fixedPath = dataDir;
|
|
1026
1026
|
dataDir = path.dirname(fixedPath);
|
|
1027
1027
|
} else {
|
|
1028
|
+
const fileNameSeed = params.uniqueId || params.query || params.product_url || params.url || action;
|
|
1029
|
+
const safeName = toSafeFileName(fileNameSeed);
|
|
1030
|
+
const prefix = (params.uniqueId || params.query || params.product_url || params.url)
|
|
1031
|
+
? `${toSafeFileName(action)}_`
|
|
1032
|
+
: "";
|
|
1028
1033
|
fixedPath = path.join(dataDir, `${prefix}${safeName}_results.json`);
|
|
1029
1034
|
}
|
|
1030
1035
|
|
|
@@ -16,7 +16,28 @@ metadata:
|
|
|
16
16
|
|
|
17
17
|
Search TikTok from an AI chat, collect structured video metadata, and run async product or trend insight jobs through the official Gecho Bridge MCP workflow.
|
|
18
18
|
|
|
19
|
-
This is the default TikTok aggregate Skill for Gecho. It covers
|
|
19
|
+
This is the default TikTok aggregate Skill for Gecho. It covers video search, creator collection, TikTok Shop search and product lookup, video details with comments, and TikTok insight. Single-tool TikTok Skills may exist for distribution and search traffic, but this Skill is the recommended default for users who want the complete TikTok research workflow.
|
|
20
|
+
|
|
21
|
+
## Critical prerequisite: read before use
|
|
22
|
+
|
|
23
|
+
Gecho Skills must be used with the Gecho Chrome extension. You must be logged in to both your Gecho account in the extension and TikTok in the Chrome web app. If either login is missing, all TikTok search and insight features may fail even though the Skill is installed.
|
|
24
|
+
|
|
25
|
+
## 3-step quick start
|
|
26
|
+
|
|
27
|
+
### Step 1: Install the Gecho Chrome extension
|
|
28
|
+
|
|
29
|
+
1. Open the [Gecho Chrome extension download page](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb).
|
|
30
|
+
2. Click `Add to Chrome`, then confirm `Add extension`.
|
|
31
|
+
|
|
32
|
+
### Step 2: Log in to the Gecho extension
|
|
33
|
+
|
|
34
|
+
Open the Gecho extension in Chrome and log in to your Gecho account. Keep the extension online.
|
|
35
|
+
|
|
36
|
+
### Step 3: Log in to TikTok web
|
|
37
|
+
|
|
38
|
+
Open TikTok in Chrome and log in to the TikTok web app. Keep the logged-in TikTok tab open.
|
|
39
|
+
|
|
40
|
+
After setup is complete, return to the OpenClaw dashboard or Hermes and ask: "Search xxx on TikTok". For example: "Search hamburgers on TikTok".
|
|
20
41
|
|
|
21
42
|
## Official links and setup help
|
|
22
43
|
|
|
@@ -28,6 +49,7 @@ This is the default TikTok aggregate Skill for Gecho. It covers the TikTok video
|
|
|
28
49
|
- Hermes setup video: [Hermes + TikTok: Direct AI Browser Control via Gecho Bridge](https://www.youtube.com/watch?v=zHKnuWnxt_c)
|
|
29
50
|
- Discord: [https://discord.gg/RFDVZMR6Tn](https://discord.gg/RFDVZMR6Tn)
|
|
30
51
|
- WeCom group QR code: [qywx.jpg](https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg)
|
|
52
|
+
- 1:1 support QR code: [wx.jpg](https://github.com/gecho-ai/gecho-bridge/blob/main/wx.jpg)
|
|
31
53
|
|
|
32
54
|
## What this skill does
|
|
33
55
|
|
|
@@ -52,7 +74,7 @@ To actually run TikTok searches, the user also needs:
|
|
|
52
74
|
- the Gecho Bridge MCP server
|
|
53
75
|
- the Gecho Chrome extension
|
|
54
76
|
- Chrome with TikTok logged in
|
|
55
|
-
- the Gecho extension logged in and online
|
|
77
|
+
- the Gecho extension logged in to a Gecho account and online
|
|
56
78
|
|
|
57
79
|
If the user installed only this Skill from ClawHub, searches will not work until the Gecho Bridge MCP server is configured. In that case, use the MCP setup path below.
|
|
58
80
|
|
|
@@ -112,7 +134,7 @@ Before the first search, make sure:
|
|
|
112
134
|
- Node.js `>= 18` is available.
|
|
113
135
|
- The [Gecho Chrome extension](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb) is installed.
|
|
114
136
|
- Chrome is open with TikTok logged in.
|
|
115
|
-
- The Gecho extension is logged in and online.
|
|
137
|
+
- The Gecho extension is logged in to a Gecho account and online.
|
|
116
138
|
- The TikTok tab is not blocked by CAPTCHA, login walls, or a frozen page.
|
|
117
139
|
|
|
118
140
|
Full setup guide:
|
|
@@ -125,6 +147,10 @@ For videos and support links, see the official links section above.
|
|
|
125
147
|
| User goal | Use tool | Notes |
|
|
126
148
|
|---|---|---|
|
|
127
149
|
| Search TikTok videos and collect metadata | `tiktok_search` | Returns results directly |
|
|
150
|
+
| Collect videos from a TikTok creator | `tiktok_influencer` | Uses the creator's `uniqueId` |
|
|
151
|
+
| Search TikTok Shop products | `tiktok_shop_search` | Returns product results directly |
|
|
152
|
+
| Fetch one TikTok Shop product | `tiktok_product` | Accepts a product URL or ID supported by the extension |
|
|
153
|
+
| Fetch one TikTok video's details and comments | `tiktok_video` | Returns one video object with collected comments |
|
|
128
154
|
| Analyze a niche, product, trend, or competitor opportunity | `tiktok_insight` | Starts an async job and returns a `jobId` |
|
|
129
155
|
| Check an existing async insight job | `check_insight_status` | Use the `jobId` returned by `tiktok_insight` |
|
|
130
156
|
|
|
@@ -139,12 +165,55 @@ Searches TikTok for a keyword, scrolls the page through the Gecho browser extens
|
|
|
139
165
|
Parameters:
|
|
140
166
|
|
|
141
167
|
- `query` string, required: search keyword or phrase.
|
|
168
|
+
- `targetCount` number, optional: requested result count; defaults to `100`.
|
|
142
169
|
- `save_dir` string, optional: absolute directory path for saving results. Do not pass a `.json` filename. Omit this parameter if no reliable absolute directory is available.
|
|
143
170
|
|
|
144
171
|
Expected result:
|
|
145
172
|
|
|
146
173
|
- A JSON array of video metadata, plus a saved local file path when results are written successfully.
|
|
147
174
|
|
|
175
|
+
### `tiktok_influencer`
|
|
176
|
+
|
|
177
|
+
Collects videos published by one TikTok creator.
|
|
178
|
+
|
|
179
|
+
Parameters:
|
|
180
|
+
|
|
181
|
+
- `uniqueId` string, required: the creator's TikTok `uniqueId` (for example, `zachking`).
|
|
182
|
+
- `targetCount` number, optional: requested video count; defaults to `100`. Keep requests at or below `500`.
|
|
183
|
+
|
|
184
|
+
### `tiktok_shop_search`
|
|
185
|
+
|
|
186
|
+
Searches TikTok Shop products by keyword.
|
|
187
|
+
|
|
188
|
+
Parameters:
|
|
189
|
+
|
|
190
|
+
- `query` string, required: search keyword or phrase.
|
|
191
|
+
- `targetCount` number, optional: requested result count; defaults to `100`.
|
|
192
|
+
- `save_dir` string, optional: absolute directory path for saving results.
|
|
193
|
+
|
|
194
|
+
### `tiktok_product`
|
|
195
|
+
|
|
196
|
+
Fetches the details of one TikTok Shop product.
|
|
197
|
+
|
|
198
|
+
Parameters:
|
|
199
|
+
|
|
200
|
+
- `product_url` string, required: a product URL or product ID supported by the browser extension.
|
|
201
|
+
- `save_dir` string, optional: absolute directory path for saving results.
|
|
202
|
+
|
|
203
|
+
### `tiktok_video`
|
|
204
|
+
|
|
205
|
+
Fetches one TikTok video's details and comments.
|
|
206
|
+
|
|
207
|
+
Parameters:
|
|
208
|
+
|
|
209
|
+
- `url` string, required: a TikTok video URL.
|
|
210
|
+
- `targetCount` number, optional: maximum comment and reply count; defaults to and is capped at `200`.
|
|
211
|
+
- `save_dir` string, optional: absolute directory path for saving results.
|
|
212
|
+
|
|
213
|
+
Expected result:
|
|
214
|
+
|
|
215
|
+
- A JSON array containing one video object with a `comments` array.
|
|
216
|
+
|
|
148
217
|
### `tiktok_insight`
|
|
149
218
|
|
|
150
219
|
Starts an asynchronous TikTok insight job for product, trend, or competitor research.
|
|
@@ -176,7 +245,7 @@ Use this Skill before calling any Gecho TikTok MCP tool when the user asks to se
|
|
|
176
245
|
|
|
177
246
|
Core rules:
|
|
178
247
|
|
|
179
|
-
- Use only the official Gecho MCP tools: `tiktok_search`, `tiktok_insight`, and `check_insight_status`.
|
|
248
|
+
- Use only the official Gecho MCP tools: `tiktok_search`, `tiktok_influencer`, `tiktok_shop_search`, `tiktok_product`, `tiktok_video`, `tiktok_insight`, and `check_insight_status`.
|
|
180
249
|
- Do not replace Gecho with WebSearch, browser automation, terminal scrapers, mcporter, unofficial APIs, or hand-written TikTok scraping.
|
|
181
250
|
- Do not start more than one Gecho scraping or insight job in the same conversational turn.
|
|
182
251
|
- Do not run Gecho scraping jobs in parallel because the workflow depends on one live browser tab and extension session.
|
|
@@ -188,7 +257,7 @@ Core rules:
|
|
|
188
257
|
- On first-run setup guidance, missing MCP tools, extension/session problems, timeouts, save failures, or any tool error, include the setup and support links block below.
|
|
189
258
|
- Do not add the setup and support links block to normal successful search or insight responses unless the user asks for setup help.
|
|
190
259
|
- Do not configure, edit, repair, or rewrite OpenClaw/Hermes/MCP settings on the user's behalf. Provide the setup commands and ask the user to run or approve them outside the tool workflow.
|
|
191
|
-
- Do not use this Skill for
|
|
260
|
+
- Do not use this Skill for X/Twitter, Amazon, or other non-TikTok platform workflows; those should have their own Gecho aggregate Skills.
|
|
192
261
|
|
|
193
262
|
Allowed status behavior:
|
|
194
263
|
|
|
@@ -232,18 +301,48 @@ Helpful Gecho links:
|
|
|
232
301
|
- OpenClaw setup video: https://www.youtube.com/watch?v=ggwY9hISHcQ
|
|
233
302
|
- Hermes setup video: https://www.youtube.com/watch?v=zHKnuWnxt_c
|
|
234
303
|
- GitHub and README: https://github.com/gecho-ai/gecho-bridge
|
|
235
|
-
- Support: Discord https://discord.gg/RFDVZMR6Tn
|
|
304
|
+
- Support: Discord https://discord.gg/RFDVZMR6Tn, WeCom group QR https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg, 1:1 support QR https://github.com/gecho-ai/gecho-bridge/blob/main/wx.jpg
|
|
236
305
|
````
|
|
237
306
|
|
|
238
307
|
## Setup-missing response
|
|
239
308
|
|
|
240
309
|
Use this when the official Gecho MCP tools are not available, or when the user only installed the Skill and cannot run searches yet.
|
|
241
310
|
|
|
311
|
+
Use the template below as the canonical setup-missing response. The agent may translate the prose to match the user's language, but must not summarize it into a shorter checklist unless the user explicitly asks for a short version.
|
|
312
|
+
|
|
313
|
+
Required content that must not be omitted:
|
|
314
|
+
|
|
315
|
+
- State that Gecho Bridge MCP is not configured and the Skill alone cannot run TikTok.
|
|
316
|
+
- Include all 3 requirements: MCP configured, Gecho Chrome extension installed and logged in, TikTok web logged in and tab kept open.
|
|
317
|
+
- Include the OpenClaw MCP setup command and `openclaw mcp list` verification command.
|
|
318
|
+
- Include the Chrome extension link.
|
|
319
|
+
- Include after-setup wording that tells the user to return to OpenClaw Dashboard or Hermes and retry the request.
|
|
320
|
+
- Include all related links: website, OpenClaw setup video, Hermes setup video, YouTube channel, GitHub/README, Discord, WeCom group QR code, and 1:1 support QR code.
|
|
321
|
+
- Include related Gecho Skills listed in the template.
|
|
322
|
+
- Do not recommend `openclaw plugins install` in this setup-missing response.
|
|
323
|
+
|
|
242
324
|
````markdown
|
|
243
325
|
Gecho Bridge is not ready yet.
|
|
244
326
|
|
|
245
327
|
This Skill is installed, but the official Gecho Bridge MCP tools are not available in this session yet. Installing the Skill alone does not start the TikTok search service.
|
|
246
328
|
|
|
329
|
+
Gecho requires all 3 items below before TikTok search or insight can run:
|
|
330
|
+
|
|
331
|
+
1. Gecho Bridge MCP is configured.
|
|
332
|
+
2. The Gecho Chrome extension is installed and logged in to a Gecho account.
|
|
333
|
+
3. TikTok web is logged in inside Chrome, with the TikTok tab kept open.
|
|
334
|
+
|
|
335
|
+
Follow these first-time setup steps:
|
|
336
|
+
|
|
337
|
+
**1. Install the Gecho Chrome extension**
|
|
338
|
+
|
|
339
|
+
Chrome Web Store:
|
|
340
|
+
https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb
|
|
341
|
+
|
|
342
|
+
After installing, open the extension and log in to your Gecho account.
|
|
343
|
+
|
|
344
|
+
**2. Configure Gecho Bridge MCP**
|
|
345
|
+
|
|
247
346
|
OpenClaw MCP setup:
|
|
248
347
|
|
|
249
348
|
```bash
|
|
@@ -257,9 +356,6 @@ Then verify:
|
|
|
257
356
|
openclaw mcp list
|
|
258
357
|
```
|
|
259
358
|
|
|
260
|
-
OpenClaw video tutorial:
|
|
261
|
-
https://www.youtube.com/watch?v=ggwY9hISHcQ
|
|
262
|
-
|
|
263
359
|
For Hermes:
|
|
264
360
|
|
|
265
361
|
```bash
|
|
@@ -267,15 +363,30 @@ hermes mcp add gecho-bridge --command npx --args="-y" --args="@gecho-ai/gecho-br
|
|
|
267
363
|
hermes restart
|
|
268
364
|
```
|
|
269
365
|
|
|
270
|
-
|
|
271
|
-
|
|
366
|
+
**3. Log in to TikTok web**
|
|
367
|
+
|
|
368
|
+
Open TikTok in Chrome, log in, and keep the logged-in TikTok tab open.
|
|
369
|
+
|
|
370
|
+
After setup, return to OpenClaw Dashboard or Hermes and ask again, for example:
|
|
371
|
+
"Search computers on TikTok"
|
|
372
|
+
|
|
272
373
|
|
|
273
|
-
|
|
374
|
+
**Related links**
|
|
274
375
|
|
|
275
|
-
Website: https://gecho.ai/
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
376
|
+
- Website: https://gecho.ai/
|
|
377
|
+
- OpenClaw setup video: https://www.youtube.com/watch?v=ggwY9hISHcQ
|
|
378
|
+
- Hermes setup video: https://www.youtube.com/watch?v=zHKnuWnxt_c
|
|
379
|
+
- YouTube channel: https://www.youtube.com/@Gecho-AI
|
|
380
|
+
- GitHub and README: https://github.com/gecho-ai/gecho-bridge
|
|
381
|
+
- Discord support: https://discord.gg/RFDVZMR6Tn
|
|
382
|
+
- WeCom group QR code: https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg
|
|
383
|
+
- 1:1 support QR code: https://github.com/gecho-ai/gecho-bridge/blob/main/wx.jpg
|
|
384
|
+
|
|
385
|
+
**Related Gecho Skills**
|
|
386
|
+
|
|
387
|
+
- `tiktok-video-search`: TikTok video search and metadata collection.
|
|
388
|
+
- `tiktok-insight`: TikTok product, trend, competitor, and content insight jobs.
|
|
389
|
+
- `tiktok-search`: complete TikTok search and insight workflow.
|
|
279
390
|
````
|
|
280
391
|
|
|
281
392
|
## Troubleshooting
|
|
@@ -292,6 +403,22 @@ Support: Discord https://discord.gg/RFDVZMR6Tn or WeCom QR https://github.com/ge
|
|
|
292
403
|
| Insight still running | Report running status and recommend checking again after about 60 seconds. |
|
|
293
404
|
| Failed to save results | Ask the user to provide a valid absolute directory path with write permission. |
|
|
294
405
|
|
|
406
|
+
## FAQ
|
|
407
|
+
|
|
408
|
+
### Why is the Chrome extension required? Can't I just use the web page?
|
|
409
|
+
|
|
410
|
+
Gecho needs real-time platform data from a live browser session, such as TikTok videos and other platform data in Gecho workflows. The Chrome extension connects the AI workflow to the user's logged-in Chrome session; the Skill page alone cannot collect this data.
|
|
411
|
+
|
|
412
|
+
### Why do I need to log in to TikTok? Can I use it without login?
|
|
413
|
+
|
|
414
|
+
TikTok limits content access for logged-out users. After you log in, the extension can access the complete data available in your browser session, such as video captions/scripts, comments, engagement data, and other signals when available.
|
|
415
|
+
|
|
416
|
+
Gecho does not ask for or collect your TikTok password, private account information, or publish anything on your behalf.
|
|
417
|
+
|
|
418
|
+
### Need help?
|
|
419
|
+
|
|
420
|
+
Join the [WeCom group](https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg) for community support, or scan the [1:1 support QR code](https://github.com/gecho-ai/gecho-bridge/blob/main/wx.jpg) for personal help.
|
|
421
|
+
|
|
295
422
|
## Output guidelines
|
|
296
423
|
|
|
297
424
|
For successful search:
|