@gecho-ai/gecho-bridge 1.1.23 → 1.1.27
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 +190 -13
- package/dist/server.cjs +298 -61
- package/distribution-skills/tiktok-influencer/SKILL.md +360 -0
- package/distribution-skills/tiktok-influencer/_meta.json +5 -0
- package/distribution-skills/tiktok-insight/SKILL.md +391 -0
- package/distribution-skills/tiktok-insight/_meta.json +5 -0
- package/distribution-skills/tiktok-video-search/SKILL.md +358 -0
- package/distribution-skills/tiktok-video-search/_meta.json +5 -0
- package/mcp-client.js +198 -12
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -1
- package/qywx.jpg +0 -0
- package/server.js +325 -69
- 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.27",
|
|
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: {
|
|
@@ -33868,6 +33868,7 @@ var require_package = __commonJS({
|
|
|
33868
33868
|
".mcp.json",
|
|
33869
33869
|
"openclaw.plugin.json",
|
|
33870
33870
|
"skills",
|
|
33871
|
+
"distribution-skills",
|
|
33871
33872
|
"README.md",
|
|
33872
33873
|
"README.zh.md",
|
|
33873
33874
|
"qywx.jpg"
|
|
@@ -33932,7 +33933,16 @@ var SERVICE_PROTOCOL_VERSION = 2;
|
|
|
33932
33933
|
var SUPPORTED_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
33933
33934
|
"tiktok_search",
|
|
33934
33935
|
"tiktok_insight",
|
|
33935
|
-
"check_insight_status"
|
|
33936
|
+
"check_insight_status",
|
|
33937
|
+
"tiktok_influencer",
|
|
33938
|
+
"tiktok_shop_search",
|
|
33939
|
+
"tiktok_product",
|
|
33940
|
+
"tiktok_video",
|
|
33941
|
+
"x_search",
|
|
33942
|
+
"x_post_detail",
|
|
33943
|
+
"amazon_search",
|
|
33944
|
+
"amazon_product",
|
|
33945
|
+
"amazon_reviews"
|
|
33936
33946
|
]);
|
|
33937
33947
|
var CLIENT_VERSION = packageJson.version;
|
|
33938
33948
|
var server = new Server(
|
|
@@ -34008,12 +34018,19 @@ function requestShutdown() {
|
|
|
34008
34018
|
});
|
|
34009
34019
|
}
|
|
34010
34020
|
function startServiceDetached() {
|
|
34011
|
-
const
|
|
34012
|
-
|
|
34013
|
-
|
|
34014
|
-
//
|
|
34021
|
+
const isWindows = process.platform === "win32";
|
|
34022
|
+
const child = spawn(process.execPath, [SERVICE_PATH], {
|
|
34023
|
+
// On Windows, detached creates a separate process group. It is unnecessary
|
|
34024
|
+
// after unref() and has proved unreliable for the browser launched by this
|
|
34025
|
+
// service when the parent is a desktop MCP host. Keep the Unix behaviour.
|
|
34026
|
+
detached: !isWindows,
|
|
34027
|
+
stdio: "ignore",
|
|
34028
|
+
windowsHide: true,
|
|
34029
|
+
// Make this equivalent to running `node server.js` from the package.
|
|
34030
|
+
cwd: __dirname
|
|
34015
34031
|
});
|
|
34016
34032
|
child.unref();
|
|
34033
|
+
return child;
|
|
34017
34034
|
}
|
|
34018
34035
|
async function waitForServiceDown() {
|
|
34019
34036
|
let retries = 10;
|
|
@@ -34063,7 +34080,7 @@ async function restartServiceRunning() {
|
|
|
34063
34080
|
}
|
|
34064
34081
|
function shouldRestartServiceForError(message, toolName) {
|
|
34065
34082
|
const text = String(message || "");
|
|
34066
|
-
if ((toolName === "tiktok_insight" || toolName === "check_insight_status") && (text.includes("Not found") || text.includes("HTTP 404"))) {
|
|
34083
|
+
if ((toolName === "tiktok_insight" || toolName === "tiktok_influencer" || toolName === "check_insight_status") && (text.includes("Not found") || text.includes("HTTP 404"))) {
|
|
34067
34084
|
return true;
|
|
34068
34085
|
}
|
|
34069
34086
|
return false;
|
|
@@ -34082,6 +34099,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
34082
34099
|
type: "object",
|
|
34083
34100
|
properties: {
|
|
34084
34101
|
query: { type: "string", description: "\u641C\u7D22\u5173\u952E\u8BCD (\u4F8B\u5982: '\u732B\u8584\u8377')" },
|
|
34102
|
+
targetCount: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u6570\u91CF\uFF0C\u9ED8\u8BA4 100", default: 100 },
|
|
34085
34103
|
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
34104
|
},
|
|
34087
34105
|
required: ["query"]
|
|
@@ -34109,6 +34127,121 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
34109
34127
|
},
|
|
34110
34128
|
required: ["jobId"]
|
|
34111
34129
|
}
|
|
34130
|
+
},
|
|
34131
|
+
{
|
|
34132
|
+
name: "tiktok_influencer",
|
|
34133
|
+
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)",
|
|
34134
|
+
inputSchema: {
|
|
34135
|
+
type: "object",
|
|
34136
|
+
properties: {
|
|
34137
|
+
uniqueId: { type: "string", description: "\u8FBE\u4EBA\u7684 unique_id (\u4F8B\u5982: 'zachking')" },
|
|
34138
|
+
targetCount: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u89C6\u9891\u6570\u91CF\uFF0C\u9ED8\u8BA4 100", default: 100 },
|
|
34139
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34140
|
+
},
|
|
34141
|
+
required: ["uniqueId"]
|
|
34142
|
+
}
|
|
34143
|
+
},
|
|
34144
|
+
{
|
|
34145
|
+
name: "tiktok_shop_search",
|
|
34146
|
+
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",
|
|
34147
|
+
inputSchema: {
|
|
34148
|
+
type: "object",
|
|
34149
|
+
properties: {
|
|
34150
|
+
query: { type: "string", description: "\u641C\u7D22\u5173\u952E\u8BCD (\u4F8B\u5982: 'lulu clothes')" },
|
|
34151
|
+
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 },
|
|
34152
|
+
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" }
|
|
34153
|
+
},
|
|
34154
|
+
required: ["query"]
|
|
34155
|
+
}
|
|
34156
|
+
},
|
|
34157
|
+
{
|
|
34158
|
+
name: "tiktok_product",
|
|
34159
|
+
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",
|
|
34160
|
+
inputSchema: {
|
|
34161
|
+
type: "object",
|
|
34162
|
+
properties: {
|
|
34163
|
+
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/...') " },
|
|
34164
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34165
|
+
},
|
|
34166
|
+
required: ["product_url"]
|
|
34167
|
+
}
|
|
34168
|
+
},
|
|
34169
|
+
{
|
|
34170
|
+
name: "tiktok_video",
|
|
34171
|
+
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",
|
|
34172
|
+
inputSchema: {
|
|
34173
|
+
type: "object",
|
|
34174
|
+
properties: {
|
|
34175
|
+
url: { type: "string", description: "TikTok \u89C6\u9891\u8BE6\u60C5\u9875 URL\uFF0C\u4F8B\u5982 https://www.tiktok.com/@user/video/123..." },
|
|
34176
|
+
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 },
|
|
34177
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34178
|
+
},
|
|
34179
|
+
required: ["url"]
|
|
34180
|
+
}
|
|
34181
|
+
},
|
|
34182
|
+
{
|
|
34183
|
+
name: "x_search",
|
|
34184
|
+
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",
|
|
34185
|
+
inputSchema: {
|
|
34186
|
+
type: "object",
|
|
34187
|
+
properties: {
|
|
34188
|
+
query: { type: "string", description: "\u641C\u7D22\u5173\u952E\u8BCD (\u4F8B\u5982: 'trump')" },
|
|
34189
|
+
targetCount: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u63A8\u6587\u6570\u91CF\uFF0C\u9ED8\u8BA4 100", default: 100 },
|
|
34190
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34191
|
+
},
|
|
34192
|
+
required: ["query"]
|
|
34193
|
+
}
|
|
34194
|
+
},
|
|
34195
|
+
{
|
|
34196
|
+
name: "x_post_detail",
|
|
34197
|
+
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",
|
|
34198
|
+
inputSchema: {
|
|
34199
|
+
type: "object",
|
|
34200
|
+
properties: {
|
|
34201
|
+
url: { type: "string", description: "\u63A8\u6587\u8BE6\u60C5\u9875 URL (\u4F8B\u5982: 'https://x.com/user/status/123...')" },
|
|
34202
|
+
targetCount: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u8BC4\u8BBA\u6570\u91CF\uFF0C\u9ED8\u8BA4 100", default: 100 },
|
|
34203
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34204
|
+
},
|
|
34205
|
+
required: ["url"]
|
|
34206
|
+
}
|
|
34207
|
+
},
|
|
34208
|
+
{
|
|
34209
|
+
name: "amazon_search",
|
|
34210
|
+
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",
|
|
34211
|
+
inputSchema: {
|
|
34212
|
+
type: "object",
|
|
34213
|
+
properties: {
|
|
34214
|
+
query: { type: "string", description: "\u641C\u7D22\u5173\u952E\u8BCD (\u4F8B\u5982: 'clothes')" },
|
|
34215
|
+
targetPages: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u9875\u6570\uFF0C\u9ED8\u8BA4 5 (\u7EA6100\u6761)", default: 5 },
|
|
34216
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34217
|
+
},
|
|
34218
|
+
required: ["query"]
|
|
34219
|
+
}
|
|
34220
|
+
},
|
|
34221
|
+
{
|
|
34222
|
+
name: "amazon_product",
|
|
34223
|
+
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",
|
|
34224
|
+
inputSchema: {
|
|
34225
|
+
type: "object",
|
|
34226
|
+
properties: {
|
|
34227
|
+
product_url: { type: "string", description: "\u5546\u54C1\u8BE6\u60C5\u9875 URL \u6216 ASIN (\u4F8B\u5982: 'B0CXJJHY8B' \u6216 'https://www.amazon.com/dp/...') " },
|
|
34228
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34229
|
+
},
|
|
34230
|
+
required: ["product_url"]
|
|
34231
|
+
}
|
|
34232
|
+
},
|
|
34233
|
+
{
|
|
34234
|
+
name: "amazon_reviews",
|
|
34235
|
+
description: "\u5728 Amazon \u4E13\u7528\u8BC4\u8BBA\u9875\u91C7\u96C6\u8BC4\u8BBA\uFF0C\u652F\u6301\u591A\u9875\u81EA\u52A8\u7FFB\u9875\u3002",
|
|
34236
|
+
inputSchema: {
|
|
34237
|
+
type: "object",
|
|
34238
|
+
properties: {
|
|
34239
|
+
product_url: { type: "string", description: "\u5546\u54C1\u8BE6\u60C5\u9875 URL \u6216 ASIN (\u4F8B\u5982: 'B0CXJJHY8B' \u6216 'https://www.amazon.com/product-reviews/...') " },
|
|
34240
|
+
targetCount: { type: "number", description: "\u9884\u671F\u91C7\u96C6\u7684\u8BC4\u8BBA\u6570\u91CF\uFF0C\u9ED8\u8BA4 100", default: 100 },
|
|
34241
|
+
save_dir: { type: "string", description: "\u53EF\u9009\u7684\u4FDD\u5B58\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84" }
|
|
34242
|
+
},
|
|
34243
|
+
required: ["product_url"]
|
|
34244
|
+
}
|
|
34112
34245
|
}
|
|
34113
34246
|
]
|
|
34114
34247
|
};
|
|
@@ -34249,7 +34382,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
34249
34382
|
}
|
|
34250
34383
|
}, 1e4);
|
|
34251
34384
|
try {
|
|
34252
|
-
const
|
|
34385
|
+
const isAsyncTool = toolName === "tiktok_insight";
|
|
34386
|
+
const targetUrl = isAsyncTool ? `${SERVICE_BASE_URL}/async-action` : HTTP_SERVICE_URL;
|
|
34253
34387
|
const requestService = () => new Promise((resolve, reject) => {
|
|
34254
34388
|
const req = http.request(targetUrl, {
|
|
34255
34389
|
method: "POST",
|
|
@@ -34308,36 +34442,79 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
34308
34442
|
if (serviceResponse.error) {
|
|
34309
34443
|
return { content: [{ type: "text", text: `\u274C \u9519\u8BEF: ${serviceResponse.error}` }], isError: true };
|
|
34310
34444
|
}
|
|
34311
|
-
if (
|
|
34445
|
+
if (serviceResponse.jobId) {
|
|
34312
34446
|
const anticipatedPath = serviceResponse.savePath || "";
|
|
34447
|
+
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
34448
|
const pathMsg = anticipatedPath ? `
|
|
34314
34449
|
|
|
34315
34450
|
\u{1F4C2} \u9884\u671F\u4FDD\u5B58\u8DEF\u5F84: ${anticipatedPath}
|
|
34316
|
-
(\u8BF7\u5728\
|
|
34451
|
+
(\u8BF7\u5728\u4EFB\u52A1\u81EA\u52A8\u7ED3\u675F\u540E\u524D\u5F80\u8BE5\u6587\u4EF6\u67E5\u770B\u5B8C\u6574\u6570\u636E)` : "";
|
|
34317
34452
|
return {
|
|
34318
34453
|
content: [
|
|
34319
34454
|
{
|
|
34320
34455
|
type: "text",
|
|
34321
|
-
text: `\u2705 \
|
|
34456
|
+
text: `\u2705 ${actionDesc}\u5DF2\u542F\u52A8\u3002
|
|
34322
34457
|
|
|
34323
34458
|
\u4EFB\u52A1 ID (job_id): ${serviceResponse.jobId}${pathMsg}
|
|
34324
34459
|
|
|
34325
|
-
\u8BF7\u4F7F\u7528 \`check_insight_status\` \u5DE5\u5177\u5E76\u4F20\u5165\u4E0A\u8FF0 jobId \u6765\u67E5\u8BE2\u6267\u884C\u7ED3\u679C\u3002\
|
|
34460
|
+
\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
34461
|
}
|
|
34327
34462
|
]
|
|
34328
34463
|
};
|
|
34329
34464
|
}
|
|
34330
34465
|
const result = serviceResponse.data;
|
|
34466
|
+
if (serviceResponse.success && result === void 0) {
|
|
34467
|
+
return { content: [{ type: "text", text: "\u2705 \u64CD\u4F5C\u6267\u884C\u6210\u529F\u3002" }] };
|
|
34468
|
+
}
|
|
34331
34469
|
if (typeof result === "object" && result !== null && result.error) {
|
|
34332
34470
|
return { content: [{ type: "text", text: `\u274C \u4E1A\u52A1\u9519\u8BEF: ${result.error}` }], isError: true };
|
|
34333
34471
|
}
|
|
34334
34472
|
if (!Array.isArray(result)) {
|
|
34335
|
-
|
|
34473
|
+
const rawResponse = JSON.stringify(serviceResponse).slice(0, 200);
|
|
34474
|
+
return {
|
|
34475
|
+
content: [{
|
|
34476
|
+
type: "text",
|
|
34477
|
+
text: `\u274C \u5F02\u5E38: \u63D2\u4EF6\u672A\u8FD4\u56DE\u6570\u7EC4\u683C\u5F0F\u7684\u7ED3\u679C\u3002
|
|
34478
|
+
\u5DE5\u5177: ${toolName}
|
|
34479
|
+
\u54CD\u5E94\u6458\u8981: ${rawResponse}`
|
|
34480
|
+
}],
|
|
34481
|
+
isError: true
|
|
34482
|
+
};
|
|
34336
34483
|
}
|
|
34337
34484
|
const savePath = serviceResponse.savePath || "";
|
|
34338
34485
|
const saveLine = savePath ? `\u{1F4C2} \u6570\u636E\u5DF2\u5B58: ${savePath}
|
|
34339
34486
|
|
|
34340
34487
|
` : "";
|
|
34488
|
+
if (toolName === "tiktok_video" && result.length > 0) {
|
|
34489
|
+
const video = result[0] || {};
|
|
34490
|
+
const comments = Array.isArray(video.comments) ? video.comments : [];
|
|
34491
|
+
const preview = {
|
|
34492
|
+
...video,
|
|
34493
|
+
comments: comments.slice(0, 20),
|
|
34494
|
+
commentsPreviewed: Math.min(comments.length, 20)
|
|
34495
|
+
};
|
|
34496
|
+
return {
|
|
34497
|
+
content: [
|
|
34498
|
+
{
|
|
34499
|
+
type: "text",
|
|
34500
|
+
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
|
|
34501
|
+
` + 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
|
|
34502
|
+
` + JSON.stringify(preview, null, 2)
|
|
34503
|
+
}
|
|
34504
|
+
]
|
|
34505
|
+
};
|
|
34506
|
+
}
|
|
34507
|
+
if (toolName === "tiktok_product" && result.length > 0) {
|
|
34508
|
+
return {
|
|
34509
|
+
content: [
|
|
34510
|
+
{
|
|
34511
|
+
type: "text",
|
|
34512
|
+
text: `\u2705 [${toolName}] \u5546\u54C1\u8BE6\u60C5\u83B7\u53D6\u6210\u529F\uFF01
|
|
34513
|
+
` + saveLine + JSON.stringify(result[0], null, 2)
|
|
34514
|
+
}
|
|
34515
|
+
]
|
|
34516
|
+
};
|
|
34517
|
+
}
|
|
34341
34518
|
const top20 = result.slice(0, 20);
|
|
34342
34519
|
return {
|
|
34343
34520
|
content: [
|