@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.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@gecho-ai/gecho-bridge",
3
- "version": "1.1.23",
3
+ "version": "1.1.26",
4
4
  "description": "TikTok Search Tool for OpenClaw"
5
5
  }
package/README.md CHANGED
@@ -1,37 +1,54 @@
1
1
  # Gecho Bridge 🚀
2
2
 
3
- 🌐 **Gecho Bridge** is a universal MCP (Model Context Protocol) tool designed to build a bridge between your large language model (LLM) and your local browser.
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
- ## Who Is It For
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
- - 📊 **Competitor analysis**: Enter a keyword and quickly get engagement data for top TikTok videos.
11
- - 💡 **Finding winning products**: Use deep insight tools to analyze trends in specific categories (such as "portable blender") and identify underserved blue-ocean opportunities.
12
- - 🤖 **Automated operations**: Let a large model directly control the browser, auto-scroll, scrape data, and generate reports, eliminating tedious manual counting.
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
- ## 🚀 What It Can Do
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
- - Automatically launch Chrome, search TikTok for a target keyword, and simulate natural human-like scrolling.
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
- ## 🔗 Related Links
17
+ ### Step 1: Install the Gecho Chrome extension
21
18
 
22
- - **Official Website**: [https://gecho.ai/](https://gecho.ai/)
23
- - **GitHub**: [https://github.com/gecho-ai/gecho-bridge](https://github.com/gecho-ai/gecho-bridge)
24
- - **ClawHub Plugin Page**: [https://clawhub.ai/p/gecho-ai](https://clawhub.ai/p/gecho-ai)
25
- - **Chrome Browser Extension**: [Install from Chrome Web Store](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb)
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
- ## 💬 Community & Feedback
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
- Welcome to join our community for discussion or feedback:
30
+ After setup is complete, return to OpenClaw Dashboard, Hermes, or your MCP client and ask:
30
31
 
31
- - **Discord Community**: [Join Discord](https://discord.gg/RFDVZMR6Tn)
32
- - **WeCom Group**: Scan the QR code below to join (or [click here to view the QR code](https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg))
32
+ - "Search computers on TikTok"
33
+ - "Search hamburgers on TikTok"
34
+ - "Run TikTok insight for portable blender"
33
35
 
34
- ![WeCom QR Code](https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg)
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. **Network and state**: Make sure your local network can access TikTok reliably, and log in to both your browser account and the browser extension.
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 and online, and the TikTok page is not stuck or left on a CAPTCHA page.
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
- 🌐 **Gecho Bridge** 是一款通用的 MCP(Model Context Protocol)工具,旨在为你的大语言模型(LLM)与本地浏览器之间搭建一座桥梁。
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
- - 📊 **分析竞品**:输入关键词,快速获取 TikTok 前排高赞视频的各项互动数据。
11
- - 💡 **寻找爆款**:使用深度洞察工具分析特定品类(如 "portable blender")的流行趋势,捕捉未被满足的市场蓝海。
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
- - 自动唤起 Chrome 并在 TikTok 搜索指定关键词,模拟真人自然滚动加载。
17
- - 抓取海量结构化数据(视频 ID、标题、点赞量、播放链接等)并自动安全落盘为 JSON 文件。
18
- - 执行基于大数据检索的**异步深度洞察**,智能提炼爆款趋势与潜在商机。
15
+ ## 🚀 3 步快速上手
19
16
 
20
- ## 🔗 相关链接
17
+ ### 第一步:安装 Gecho Chrome 扩展
21
18
 
22
- - **官网**:[https://gecho.ai/](https://gecho.ai/)
23
- - **GitHub**:[https://github.com/gecho-ai/gecho-bridge](https://github.com/gecho-ai/gecho-bridge)
24
- - **ClawHub 插件页**:[https://clawhub.ai/p/gecho-ai](https://clawhub.ai/p/gecho-ai)
25
- - **Chrome 浏览器扩展**:[前往 Chrome 网上应用店下载](https://chromewebstore.google.com/detail/pjkaeenpekolahdbccjfenjcmanemlbj?utm_source=item-share-cb)
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
- - **Discord 社区**:[点击加入 Discord](https://discord.gg/RFDVZMR6Tn)
32
- - **企业微信群**:扫描下方二维码加入(若图片未显示,请 [点击此处查看二维码](https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg))
32
+ - “Search 电脑 on TikTok”
33
+ - “Search 汉堡 on TikTok”
34
+ - “Run TikTok insight for portable blender”
33
35
 
34
- ![企业微信二维码](https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg)
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. **网络与状态**:确保本地网络可稳定访问 TikTok,并在浏览器中登录账号,登录浏览器扩展。
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 扩展已登录并处于在线状态,TikTok 页面未卡住或未停在验证码页面。
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
  对于希望基于本工具进行二次开发的开发者:
@@ -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.23",
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 targetUrl = toolName === "tiktok_insight" ? `${SERVICE_BASE_URL}/async-action` : HTTP_SERVICE_URL;
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 (toolName === "tiktok_insight" && serviceResponse.jobId) {
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\u6D1E\u5BDF\u4EFB\u52A1\u81EA\u52A8\u7ED3\u675F\u540E\u524D\u5F80\u8BE5\u6587\u4EF6\u67E5\u770B\u5B8C\u6574\u6570\u636E)` : "";
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 \u5F02\u6B65\u6D1E\u5BDF\u4EFB\u52A1\u5DF2\u542F\u52A8\u3002
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\u56E0\u4E3A\u8BE5\u4EFB\u52A1\u9700\u8981\u51E0\u5206\u949F\uFF0C\u5EFA\u8BAE\u4F60\u5148\u7B49\u5F85 60 \u79D2\u518D\u8FDB\u884C\u7B2C\u4E00\u6B21\u67E5\u8BE2\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
- return { content: [{ type: "text", text: `\u274C \u5F02\u5E38: \u63D2\u4EF6\u672A\u8FD4\u56DE\u6570\u7EC4\u683C\u5F0F\u7684\u7ED3\u679C` }], isError: true };
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.23",
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 safeName = toSafeFileName(params.query || action);
4464
- const prefix = params.query ? `${toSafeFileName(action)}_` : "";
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 targetUrl = toolName === "tiktok_insight" ? `${SERVICE_BASE_URL}/async-action` : HTTP_SERVICE_URL;
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 (toolName === "tiktok_insight" && serviceResponse.jobId) {
596
+ // 鲁棒性修复:只要 serviceResponse 中包含 jobId,不论什么工具都按异步处理返回给 MCP
597
+ if (serviceResponse.jobId) {
472
598
  const anticipatedPath = serviceResponse.savePath || "";
473
- const pathMsg = anticipatedPath ? `\n\n📂 预期保存路径: ${anticipatedPath}\n(请在洞察任务自动结束后前往该文件查看完整数据)` : "";
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: `✅ 异步洞察任务已启动。\n\n任务 ID (job_id): ${serviceResponse.jobId}${pathMsg}\n\n请使用 \`check_insight_status\` 工具并传入上述 jobId 来查询执行结果。因为该任务需要几分钟,建议你先等待 60 秒再进行第一次查询。`
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
- return { content: [{ type: "text", text: `❌ 异常: 插件未返回数组格式的结果` }], isError: true };
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: [
@@ -2,7 +2,7 @@
2
2
  "id": "gecho-ai-gecho-bridge",
3
3
  "name": "@gecho-ai/gecho-bridge",
4
4
  "description": "TikTok Search and Insight tools for OpenClaw, connecting LLMs to TikTok via Chrome Extension.",
5
- "version": "1.1.23",
5
+ "version": "1.1.26",
6
6
  "skills": [
7
7
  "./skills"
8
8
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gecho-ai/gecho-bridge",
3
- "version": "1.1.23",
3
+ "version": "1.1.26",
4
4
  "description": "TikTok Search and Insight tools for OpenClaw, connecting LLMs to TikTok via Chrome Extension.",
5
5
  "main": "mcp-client.js",
6
6
  "bin": {
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 safeName = toSafeFileName(params.query || action);
903
- const prefix = params.query ? `${toSafeFileName(action)}_` : "";
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 the TikTok video search and TikTok insight workflow. 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.
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 TikTok Shop, X/Twitter, Amazon, or other platform workflows; those should have their own Gecho aggregate Skills.
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 or WeCom QR https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg
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
- Hermes video tutorial:
271
- https://www.youtube.com/watch?v=zHKnuWnxt_c
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
- Also make sure the Gecho Chrome extension is installed, logged in, and Chrome has a logged-in TikTok tab open.
374
+ **Related links**
274
375
 
275
- Website: https://gecho.ai/
276
- YouTube channel: https://www.youtube.com/@Gecho-AI
277
- Setup guide: https://github.com/gecho-ai/gecho-bridge/blob/main/README.md
278
- Support: Discord https://discord.gg/RFDVZMR6Tn or WeCom QR https://github.com/gecho-ai/gecho-bridge/blob/main/qywx.jpg
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:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "slug": "tiktok-search",
3
- "version": "1.1.23",
3
+ "version": "1.1.26",
4
4
  "type": "mcp",
5
5
  "publishedAt": 1775894233000
6
6
  }