smart-image-scraper-mcp 2.13.2 → 2.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +200 -197
- package/package.json +9 -3
package/README.md
CHANGED
|
@@ -1,40 +1,68 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Smart Image Scraper MCP
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/smart-image-scraper-mcp)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
|
-
基于 Node.js 和 Model Context Protocol (MCP)
|
|
6
|
+
基于 Node.js 和 Model Context Protocol (MCP) 开发的**全网智能图片抓取工具**。让 AI 客户端(如 Claude Desktop、Windsurf、Cursor)能够通过自然语言指令,实现全网图片资源的搜索、验证、下载与本地化管理。
|
|
7
|
+
|
|
8
|
+
> 🌐 支持 Bing / Google 双搜索引擎 | 🖼️ 三种运行模式 | 📁 自定义保存路径 | 🛡️ 防盗链智能处理
|
|
7
9
|
|
|
8
10
|
## ✨ 核心特性
|
|
9
11
|
|
|
10
|
-
###
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
12
|
+
### � 三种运行模式
|
|
13
|
+
- **`link` 模式**:搜索并返回验证过的图片直链列表,适合只需要 URL 的场景
|
|
14
|
+
- **`download` 模式**:搜索并下载图片到本地,自动按质量排序优先高清
|
|
15
|
+
- **`both` 模式** *(v2.13 新增)*:同时返回链接列表和下载文件,适合需要链接备份的场景
|
|
16
|
+
|
|
17
|
+
### � 自定义保存路径 *(v2.13 新增)*
|
|
18
|
+
- **`savePath` 参数**:指定图片保存的绝对路径
|
|
19
|
+
- 不指定时默认保存到 MCP 服务器项目下的 `images/` 目录
|
|
20
|
+
- 支持 `download` 和 `both` 模式
|
|
21
|
+
|
|
22
|
+
### 🛡️ 防盗链智能处理 *(v2.13 新增)*
|
|
23
|
+
- **`filterHotlink` 参数**:控制是否过滤防盗链图片,默认开启
|
|
24
|
+
- 开启时自动过滤无法在浏览器直接打开的防盗链链接
|
|
25
|
+
- 关闭时返回更多结果,下载模式会自动添加 Referer 头绕过防盗链
|
|
26
|
+
|
|
27
|
+
### 🎯 高级搜索功能
|
|
28
|
+
- **批量处理**:逗号分隔多关键词批量搜索(如 `"猫,狗,鸟"`)
|
|
29
|
+
- **尺寸过滤**:`small` / `medium` / `large` / `wallpaper`
|
|
30
|
+
- **宽高比过滤**:`wide`(横屏)/ `tall`(竖屏)/ `square`(正方形)
|
|
31
|
+
- **尺寸统一**:下载后自动裁剪/缩放到指定尺寸(支持预设如 `desktop_1080p`)
|
|
32
|
+
- **质量控制**:`fast`(跳过验证)/ `balanced`(验证有效性)/ `high`(验证+按质量排序)
|
|
27
33
|
- **文件大小过滤**:按最小文件大小筛选高质量图片
|
|
28
34
|
|
|
35
|
+
### 🚀 高性能架构
|
|
36
|
+
- **智能缓存**:LRU 缓存减少重复搜索请求
|
|
37
|
+
- **并发控制**:下载/验证并发数可配置,防止资源耗尽
|
|
38
|
+
- **超时保护**:多层超时机制(连接/下载/全局),防止请求挂起
|
|
39
|
+
- **资源自动释放**:每次请求后自动清理,支持长时间连续调用
|
|
40
|
+
- **日志限流**:stderr 输出限流保护,避免高频调用时阻塞 MCP 通信
|
|
41
|
+
|
|
29
42
|
## 安装
|
|
30
43
|
|
|
31
|
-
### 方式一:
|
|
44
|
+
### 方式一:npx 直接使用(推荐)
|
|
45
|
+
|
|
46
|
+
无需安装,在 MCP 客户端配置中直接使用:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"mcpServers": {
|
|
51
|
+
"smart-image-scraper": {
|
|
52
|
+
"command": "npx",
|
|
53
|
+
"args": ["-y", "smart-image-scraper-mcp"]
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 方式二:npm 全局安装
|
|
32
60
|
|
|
33
61
|
```bash
|
|
34
62
|
npm install -g smart-image-scraper-mcp
|
|
35
63
|
```
|
|
36
64
|
|
|
37
|
-
###
|
|
65
|
+
### 方式三:本地开发
|
|
38
66
|
|
|
39
67
|
```bash
|
|
40
68
|
git clone https://github.com/your-repo/smart-image-scraper-mcp.git
|
|
@@ -46,7 +74,7 @@ npm install
|
|
|
46
74
|
|
|
47
75
|
### 1. 配置 MCP 客户端
|
|
48
76
|
|
|
49
|
-
**Windsurf
|
|
77
|
+
**Windsurf** (`~/.codeium/windsurf/mcp_config.json`):
|
|
50
78
|
|
|
51
79
|
```json
|
|
52
80
|
{
|
|
@@ -59,7 +87,7 @@ npm install
|
|
|
59
87
|
}
|
|
60
88
|
```
|
|
61
89
|
|
|
62
|
-
**Claude Desktop
|
|
90
|
+
**Claude Desktop** (`claude_desktop_config.json`):
|
|
63
91
|
|
|
64
92
|
```json
|
|
65
93
|
{
|
|
@@ -75,106 +103,114 @@ npm install
|
|
|
75
103
|
}
|
|
76
104
|
```
|
|
77
105
|
|
|
106
|
+
**Cursor** (MCP 设置中添加):
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"mcpServers": {
|
|
111
|
+
"smart-image-scraper": {
|
|
112
|
+
"command": "npx",
|
|
113
|
+
"args": ["-y", "smart-image-scraper-mcp"]
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
78
119
|
### 2. 重启客户端
|
|
79
120
|
|
|
80
|
-
|
|
121
|
+
配置完成后重启你的 AI 客户端。
|
|
81
122
|
|
|
82
123
|
### 3. 开始使用
|
|
83
124
|
|
|
84
|
-
|
|
85
|
-
- "帮我搜索 10 张猫咪图片"
|
|
86
|
-
- "下载 20 张高清风景壁纸"
|
|
87
|
-
- "找一些人物头像图片"
|
|
125
|
+
直接用自然语言描述需求即可:
|
|
88
126
|
|
|
89
|
-
|
|
127
|
+
- "帮我搜索 10 张猫咪图片的链接"
|
|
128
|
+
- "下载 5 张高清风景壁纸到 D:/photos"
|
|
129
|
+
- "搜索并下载 3 张日落图片,同时保留链接"
|
|
130
|
+
- "找一些 1080p 的电脑壁纸"
|
|
90
131
|
|
|
91
|
-
|
|
132
|
+
> ⚠️ **提示**:同一会话中连续调用建议不超过 5 次。需要多种类型图片时,使用批量查询(逗号分隔关键词),如 `"猫,狗,鸟"`。
|
|
92
133
|
|
|
93
|
-
|
|
134
|
+
## 参数说明
|
|
94
135
|
|
|
95
|
-
|
|
136
|
+
### smart_scraper
|
|
96
137
|
|
|
97
|
-
|
|
138
|
+
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
139
|
+
|------|------|:----:|--------|------|
|
|
140
|
+
| `query` | string | ✅ | - | 搜索关键词,多个用英文逗号分隔 |
|
|
141
|
+
| `mode` | string | ✅ | - | 运行模式:`link` / `download` / `both` |
|
|
142
|
+
| `count` | number | ❌ | `10` | 每个关键词获取的图片数量(1-100) |
|
|
143
|
+
| `source` | string | ❌ | `bing` | 搜索引擎:`bing` / `google` |
|
|
144
|
+
| `size` | string | ❌ | `all` | 图片尺寸:`all` / `small` / `medium` / `large` / `wallpaper` |
|
|
145
|
+
| `aspect` | string | ❌ | `all` | 宽高比:`all` / `wide` / `tall` / `square` |
|
|
146
|
+
| `quality` | string | ❌ | `balanced` | 质量模式:`fast` / `balanced` / `high` |
|
|
147
|
+
| `minFileSize` | string | ❌ | `any` | 最小文件大小:`any` / `50kb` / `100kb` / `200kb` / `500kb` / `1mb` |
|
|
148
|
+
| `safeSearch` | string | ❌ | `moderate` | 安全搜索:`off` / `moderate` / `strict` |
|
|
149
|
+
| `savePath` | string | ❌ | `images/` | 自定义保存路径(绝对路径),仅 `download` / `both` 模式有效 |
|
|
150
|
+
| `filterHotlink` | boolean | ❌ | `true` | 是否过滤防盗链图片 |
|
|
151
|
+
| `targetSize` | string | ❌ | - | 目标尺寸,如 `1920x1080` 或预设名 `desktop_1080p` |
|
|
152
|
+
| `fit` | string | ❌ | `cover` | 尺寸适应模式:`cover`(裁剪填充)/ `contain`(留白)/ `fill`(拉伸) |
|
|
153
|
+
|
|
154
|
+
### 预设尺寸名称
|
|
155
|
+
|
|
156
|
+
| 类别 | 预设名 | 尺寸 |
|
|
157
|
+
|------|--------|------|
|
|
158
|
+
| 电脑壁纸 | `desktop_1080p` | 1920×1080 |
|
|
159
|
+
| 电脑壁纸 | `desktop_2k` | 2560×1440 |
|
|
160
|
+
| 电脑壁纸 | `desktop_4k` | 3840×2160 |
|
|
161
|
+
| 手机壁纸 | `mobile_hd` | 1080×1920 |
|
|
162
|
+
| 手机壁纸 | `mobile_2k` | 1440×2560 |
|
|
163
|
+
| 正方形 | `square_1080` | 1080×1080 |
|
|
164
|
+
| 正方形 | `square_512` | 512×512 |
|
|
165
|
+
| 社交媒体 | `instagram` | 1080×1080 |
|
|
166
|
+
| 社交媒体 | `twitter` | 1200×675 |
|
|
167
|
+
| 社交媒体 | `facebook` | 1200×630 |
|
|
168
|
+
|
|
169
|
+
## 使用示例
|
|
170
|
+
|
|
171
|
+
### 基础用法
|
|
172
|
+
|
|
173
|
+
```jsonc
|
|
174
|
+
// 搜索图片链接
|
|
175
|
+
{ "query": "可爱的猫咪", "mode": "link", "count": 5 }
|
|
176
|
+
|
|
177
|
+
// 下载图片到本地
|
|
178
|
+
{ "query": "风景壁纸", "mode": "download", "count": 10 }
|
|
179
|
+
|
|
180
|
+
// 搜索并下载(同时返回链接和文件)
|
|
181
|
+
{ "query": "日落", "mode": "both", "count": 5 }
|
|
182
|
+
```
|
|
98
183
|
|
|
99
|
-
|
|
100
|
-
|------|------|------|------|
|
|
101
|
-
| `query` | string | ✅ | 搜索关键词,多个关键词用逗号分隔 |
|
|
102
|
-
| `mode` | string | ✅ | 运行模式:`link` 或 `download` |
|
|
103
|
-
| `count` | number | ❌ | 每个关键词获取的图片数量,默认 10 |
|
|
104
|
-
| `source` | string | ❌ | 搜索源,支持 `bing` 和 `google`,默认 `bing` |
|
|
105
|
-
| `size` | string | ❌ | 图片尺寸:`all`, `small`, `medium`, `large`, `wallpaper`,默认 `all` |
|
|
106
|
-
| `aspect` | string | ❌ | 宽高比:`all`, `wide`, `tall`, `square`,默认 `all` |
|
|
107
|
-
| `quality` | string | ❌ | 质量模式:`fast`, `balanced`, `high`,默认 `balanced` |
|
|
108
|
-
| `minFileSize` | string | ❌ | 最小文件大小:`any`, `50kb`, `100kb`, `200kb`, `500kb`, `1mb`,默认 `any` |
|
|
109
|
-
| `safeSearch` | string | ❌ | 安全搜索:`off`, `moderate`, `strict`,默认 `moderate` |
|
|
184
|
+
### 自定义保存路径
|
|
110
185
|
|
|
111
|
-
|
|
186
|
+
```jsonc
|
|
187
|
+
// 下载到指定目录
|
|
188
|
+
{ "query": "猫", "mode": "download", "count": 5, "savePath": "D:/my/photos" }
|
|
112
189
|
|
|
190
|
+
// both 模式 + 自定义路径
|
|
191
|
+
{ "query": "风景", "mode": "both", "count": 5, "savePath": "D:/wallpapers" }
|
|
113
192
|
```
|
|
114
|
-
// 链接模式 - 获取猫咪图片链接
|
|
115
|
-
{
|
|
116
|
-
"query": "可爱的猫咪",
|
|
117
|
-
"mode": "link",
|
|
118
|
-
"count": 5
|
|
119
|
-
}
|
|
120
193
|
|
|
121
|
-
|
|
122
|
-
{
|
|
123
|
-
"query": "猫,狗,鸟",
|
|
124
|
-
"mode": "download",
|
|
125
|
-
"count": 10
|
|
126
|
-
}
|
|
194
|
+
### 高级用法
|
|
127
195
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
"mode": "download",
|
|
132
|
-
"count": 20,
|
|
133
|
-
"source": "google",
|
|
134
|
-
"size": "wallpaper",
|
|
135
|
-
"safeSearch": "strict"
|
|
136
|
-
}
|
|
196
|
+
```jsonc
|
|
197
|
+
// 批量下载多类图片
|
|
198
|
+
{ "query": "猫,狗,兔子", "mode": "download", "count": 5 }
|
|
137
199
|
|
|
138
|
-
//
|
|
139
|
-
{
|
|
140
|
-
"query": "风景",
|
|
141
|
-
"mode": "link",
|
|
142
|
-
"count": 10,
|
|
143
|
-
"size": "large",
|
|
144
|
-
"quality": "high",
|
|
145
|
-
"minFileSize": "100kb"
|
|
146
|
-
}
|
|
147
|
-
```
|
|
200
|
+
// 高质量大图
|
|
201
|
+
{ "query": "风景", "mode": "link", "count": 10, "size": "large", "quality": "high", "minFileSize": "100kb" }
|
|
148
202
|
|
|
149
|
-
|
|
203
|
+
// 电脑壁纸(横屏 + 统一尺寸)
|
|
204
|
+
{ "query": "自然风光", "mode": "download", "count": 10, "aspect": "wide", "targetSize": "desktop_1080p" }
|
|
150
205
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
│ RequestQueue (requestQueue.js) │
|
|
160
|
-
│ - 最大并发: 5 个请求 │
|
|
161
|
-
│ - 请求超时: 60 秒 │
|
|
162
|
-
│ - 队列超时: 30 秒 │
|
|
163
|
-
│ - 自动资源释放 │
|
|
164
|
-
└─────────────────────────────────────────────────────────────────────────┘
|
|
165
|
-
↓
|
|
166
|
-
┌─────────────────────────────────────────────────────────────────────────┐
|
|
167
|
-
│ Orchestrator (orchestrator.js) │
|
|
168
|
-
│ - 关键词并发: 3 个/请求 │
|
|
169
|
-
│ - 智能缓存集成 │
|
|
170
|
-
│ - 快速模式/完整验证模式 │
|
|
171
|
-
└─────────────────────────────────────────────────────────────────────────┘
|
|
172
|
-
↓
|
|
173
|
-
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
|
|
174
|
-
│ BingScraper │ │ GoogleScraper │ │ LinkValidator │
|
|
175
|
-
│ - 并行翻页(5页) │ │ - 并行翻页(5页) │ │ - 并发验证(30) │
|
|
176
|
-
│ - 最小延迟 50ms │ │ - 最小延迟 50ms │ │ - 超时 1.5s │
|
|
177
|
-
└──────────────────┘ └──────────────────┘ └──────────────────┘
|
|
206
|
+
// 手机壁纸(竖屏)
|
|
207
|
+
{ "query": "动漫", "mode": "download", "count": 10, "aspect": "tall", "targetSize": "mobile_hd" }
|
|
208
|
+
|
|
209
|
+
// 关闭防盗链过滤(获取更多结果)
|
|
210
|
+
{ "query": "猫咪", "mode": "link", "count": 10, "filterHotlink": false }
|
|
211
|
+
|
|
212
|
+
// Google 搜索 + 安全过滤
|
|
213
|
+
{ "query": "赛博朋克城市", "mode": "download", "count": 20, "source": "google", "size": "wallpaper", "safeSearch": "strict" }
|
|
178
214
|
```
|
|
179
215
|
|
|
180
216
|
## 项目结构
|
|
@@ -182,136 +218,103 @@ npm install
|
|
|
182
218
|
```
|
|
183
219
|
smart-image-scraper-mcp/
|
|
184
220
|
├── src/
|
|
185
|
-
│ ├── index.js # MCP 服务器入口
|
|
221
|
+
│ ├── index.js # MCP 服务器入口 & Tool Schema 定义
|
|
186
222
|
│ ├── config/
|
|
187
|
-
│ │ └── index.js #
|
|
223
|
+
│ │ └── index.js # 配置模块(环境变量、默认值)
|
|
188
224
|
│ ├── infrastructure/
|
|
189
|
-
│ │ ├── httpClient.js # HTTP
|
|
225
|
+
│ │ ├── httpClient.js # HTTP 客户端(超时、重试)
|
|
190
226
|
│ │ ├── requestQueue.js # 请求队列管理
|
|
191
227
|
│ │ ├── cache.js # LRU 缓存
|
|
192
|
-
│ │ ├── metrics.js #
|
|
228
|
+
│ │ ├── metrics.js # 性能指标收集
|
|
193
229
|
│ │ ├── healthCheck.js # 健康检查
|
|
194
230
|
│ │ ├── gracefulShutdown.js # 优雅关闭
|
|
195
231
|
│ │ ├── rateLimiter.js # 速率限制
|
|
196
|
-
│ │ ├── logger.js #
|
|
197
|
-
│ │ ├── retry.js #
|
|
198
|
-
│ │ ├── errors.js #
|
|
232
|
+
│ │ ├── logger.js # 日志模块(限流保护)
|
|
233
|
+
│ │ ├── retry.js # 指数退避重试
|
|
234
|
+
│ │ ├── errors.js # 错误分类体系
|
|
199
235
|
│ │ └── proxy.js # 代理支持
|
|
200
236
|
│ ├── providers/
|
|
201
|
-
│ │ ├── baseScraper.js #
|
|
202
|
-
│ │ ├── bingScraper.js # Bing
|
|
203
|
-
│ │ ├── googleScraper.js # Google
|
|
204
|
-
│ │ └── index.js #
|
|
237
|
+
│ │ ├── baseScraper.js # 搜索引擎抽象基类
|
|
238
|
+
│ │ ├── bingScraper.js # Bing 图片搜索
|
|
239
|
+
│ │ ├── googleScraper.js # Google 图片搜索
|
|
240
|
+
│ │ └── index.js # 搜索引擎工厂
|
|
205
241
|
│ └── services/
|
|
206
|
-
│ ├── orchestrator.js #
|
|
207
|
-
│ ├── linkValidator.js #
|
|
208
|
-
│ ├── fileManager.js #
|
|
209
|
-
│ ├── imageProcessor.js #
|
|
242
|
+
│ ├── orchestrator.js # 任务编排器(核心调度)
|
|
243
|
+
│ ├── linkValidator.js # 链接验证 & 防盗链检测
|
|
244
|
+
│ ├── fileManager.js # 文件下载 & 存储管理
|
|
245
|
+
│ ├── imageProcessor.js # 图片裁剪/缩放处理
|
|
210
246
|
│ └── index.js # 服务索引
|
|
211
|
-
├── images/ #
|
|
247
|
+
├── images/ # 默认图片存储目录
|
|
212
248
|
├── package.json
|
|
249
|
+
├── LICENSE
|
|
213
250
|
└── README.md
|
|
214
251
|
```
|
|
215
252
|
|
|
216
253
|
## 技术栈
|
|
217
254
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
- 最大并发 5 个请求
|
|
229
|
-
- 队列最大 20 个等待
|
|
230
|
-
- 请求超时 60 秒
|
|
231
|
-
- 队列等待超时 30 秒
|
|
232
|
-
- 自动资源释放
|
|
233
|
-
|
|
234
|
-
### 📊 性能指标
|
|
235
|
-
- 请求成功率统计
|
|
236
|
-
- 缓存命中率统计
|
|
237
|
-
- 响应时间统计(平均值、P95)
|
|
238
|
-
- 错误分类统计
|
|
239
|
-
|
|
240
|
-
### 💾 智能缓存
|
|
241
|
-
- LRU 缓存实现
|
|
242
|
-
- 搜索结果缓存(5分钟 TTL)
|
|
243
|
-
- 统一缓存键策略
|
|
244
|
-
- 自动过期清理
|
|
245
|
-
|
|
246
|
-
### ⚡ 高性能优化
|
|
247
|
-
- HTTP 连接池(Keep-Alive)
|
|
248
|
-
- 并行翻页搜索(5页同时)
|
|
249
|
-
- 极速验证(1.5秒超时)
|
|
250
|
-
- 最小请求延迟(50ms)
|
|
251
|
-
|
|
252
|
-
### 🛡️ 错误处理
|
|
253
|
-
- 统一错误码体系
|
|
254
|
-
- 错误分类(网络/搜索/下载/验证)
|
|
255
|
-
- 自动重试机制(指数退避)
|
|
256
|
-
|
|
257
|
-
### 🔒 优雅关闭
|
|
258
|
-
- 信号处理(SIGINT/SIGTERM)
|
|
259
|
-
- 活跃操作追踪
|
|
260
|
-
- 资源清理
|
|
255
|
+
| 技术 | 用途 |
|
|
256
|
+
|------|------|
|
|
257
|
+
| Node.js >= 18.x | 运行时 |
|
|
258
|
+
| @modelcontextprotocol/sdk | MCP 协议通信 |
|
|
259
|
+
| axios | HTTP 请求 |
|
|
260
|
+
| cheerio | HTML 解析 |
|
|
261
|
+
| p-limit | 并发控制 |
|
|
262
|
+
| fs-extra | 文件系统操作 |
|
|
263
|
+
| sharp *(可选)* | 图片尺寸处理 |
|
|
264
|
+
| uuid | 唯一文件名生成 |
|
|
261
265
|
|
|
262
266
|
## 环境变量配置
|
|
263
267
|
|
|
264
268
|
| 变量名 | 说明 | 默认值 |
|
|
265
269
|
|--------|------|--------|
|
|
266
270
|
| `SAVE_ROOT` | 图片下载根目录 | `./images` |
|
|
267
|
-
| `LOG_LEVEL` | 日志级别 (DEBUG/INFO/WARN/ERROR) | `
|
|
271
|
+
| `LOG_LEVEL` | 日志级别 (`DEBUG` / `INFO` / `WARN` / `ERROR`) | `WARN` |
|
|
268
272
|
| `LOG_FILE` | 日志文件路径 | 无 |
|
|
269
|
-
| `LOG_FORMAT` | 日志格式 (json/text) | `text` |
|
|
270
|
-
| `
|
|
271
|
-
| `MAX_DOWNLOAD_CONCURRENCY` | 下载并发数 | `5` |
|
|
273
|
+
| `LOG_FORMAT` | 日志格式 (`json` / `text`) | `text` |
|
|
274
|
+
| `MAX_DOWNLOAD_CONCURRENCY` | 下载并发数 | `10` |
|
|
272
275
|
| `MAX_VALIDATE_CONCURRENCY` | 验证并发数 | `10` |
|
|
273
|
-
| `
|
|
274
|
-
| `HTTP_PROXY` / `HTTPS_PROXY` | 代理服务器 | 无 |
|
|
275
|
-
|
|
276
|
-
## 运行测试
|
|
277
|
-
|
|
278
|
-
```bash
|
|
279
|
-
npm test
|
|
280
|
-
```
|
|
276
|
+
| `HTTP_PROXY` / `HTTPS_PROXY` | 代理服务器地址 | 无 |
|
|
281
277
|
|
|
282
278
|
## 版本历史
|
|
283
279
|
|
|
284
280
|
| 版本 | 日期 | 主要更新 |
|
|
285
281
|
|------|------|----------|
|
|
286
|
-
| 2.
|
|
287
|
-
| 2.
|
|
288
|
-
| 2.
|
|
289
|
-
| 2.
|
|
290
|
-
| 2.
|
|
291
|
-
| 2.
|
|
292
|
-
| 2.
|
|
293
|
-
|
|
|
294
|
-
|
|
295
|
-
## 注意事项
|
|
296
|
-
|
|
297
|
-
1. 请遵守目标网站的使用条款和 robots.txt
|
|
298
|
-
2. 建议适度使用,避免频繁请求
|
|
299
|
-
3. 下载的图片仅供个人学习使用
|
|
300
|
-
4. 首次请求可能较慢(需要建立连接池)
|
|
282
|
+
| **2.13.x** | 2026-02 | ✨ **新增 `both` 模式**(同时返回链接+下载文件)、**自定义保存路径** `savePath`、**防盗链过滤开关** `filterHotlink`;stderr 日志限流优化 |
|
|
283
|
+
| 2.12.x | 2026-02 | 🛡️ 防盗链检测与过滤、连续调用稳定性修复(stderr 限流、资源释放、超时加固) |
|
|
284
|
+
| 2.11.x | 2026-02 | 🔧 AbortSignal 传播修复、下载超时加固、HTTP keepAlive 关闭 |
|
|
285
|
+
| 2.8.0 | 2026-02 | ⚡ 熔断机制:全局超时、快速失败返回 |
|
|
286
|
+
| 2.7.0 | 2026-02 | 🎯 质量控制:`quality` 参数、`minFileSize` 文件大小过滤 |
|
|
287
|
+
| 2.4.0 | 2026-02 | 🔄 超时策略统一、缓存键一致、版本号动态读取 |
|
|
288
|
+
| 2.3.0 | 2026-02 | 🚀 HTTP 连接池、并行翻页搜索、内存泄漏修复 |
|
|
289
|
+
| 2.0.0 | 2026-02 | 🏗️ 高性能并发模型重构 |
|
|
290
|
+
| 1.0.0 | 2026-01 | 🎉 初始版本 |
|
|
301
291
|
|
|
302
292
|
## 常见问题
|
|
303
293
|
|
|
304
294
|
### Q: 搜索返回 0 张图片?
|
|
305
|
-
A
|
|
295
|
+
**A:** 检查网络连接,或尝试更换搜索源(`bing` → `google`)。部分关键词在特定搜索引擎上结果较少。
|
|
306
296
|
|
|
307
297
|
### Q: 下载速度慢?
|
|
308
|
-
A
|
|
298
|
+
**A:** 可以设置 `HTTP_PROXY` 环境变量使用代理,或使用 `quality: "fast"` 跳过验证步骤。
|
|
299
|
+
|
|
300
|
+
### Q: 连续调用多次后无响应?
|
|
301
|
+
**A:** 建议:
|
|
302
|
+
1. 使用**批量查询**:`"猫,狗,鸟"` 一次获取多个关键词
|
|
303
|
+
2. 单次会话中调用不超过 **5 次**
|
|
304
|
+
3. 如遇卡住,重启 MCP 服务器即可恢复
|
|
305
|
+
|
|
306
|
+
### Q: 下载的图片打不开?
|
|
307
|
+
**A:** 部分网站有防盗链保护。可以尝试设置 `filterHotlink: false` 获取更多源,或使用 `quality: "balanced"` 以上模式自动验证图片有效性。
|
|
308
|
+
|
|
309
|
+
### Q: 如何保存到指定目录?
|
|
310
|
+
**A:** 使用 `savePath` 参数指定绝对路径,如 `"savePath": "D:/my/photos"`。仅在 `download` 和 `both` 模式下生效。
|
|
309
311
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
1.
|
|
313
|
-
2.
|
|
314
|
-
3.
|
|
312
|
+
## 注意事项
|
|
313
|
+
|
|
314
|
+
1. 请遵守目标网站的使用条款和 robots.txt
|
|
315
|
+
2. 建议适度使用,避免短时间内大量请求
|
|
316
|
+
3. 下载的图片版权归原作者所有,仅供个人学习研究使用
|
|
317
|
+
4. 首次运行时 npx 需要下载依赖,可能需要等待几秒
|
|
315
318
|
|
|
316
319
|
## License
|
|
317
320
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "smart-image-scraper-mcp",
|
|
3
|
-
"version": "2.13.
|
|
4
|
-
"description": "全网智能图片抓取 MCP 服务器 - 支持 Bing/Google
|
|
3
|
+
"version": "2.13.3",
|
|
4
|
+
"description": "全网智能图片抓取 MCP 服务器 - 支持 Bing/Google 搜索、三种模式(link/download/both)、自定义保存路径、防盗链处理、质量控制、尺寸统一",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -17,10 +17,16 @@
|
|
|
17
17
|
"mcp",
|
|
18
18
|
"model-context-protocol",
|
|
19
19
|
"image-scraper",
|
|
20
|
+
"image-downloader",
|
|
20
21
|
"bing-images",
|
|
21
22
|
"google-images",
|
|
22
23
|
"ai-tools",
|
|
23
|
-
"claude"
|
|
24
|
+
"claude",
|
|
25
|
+
"windsurf",
|
|
26
|
+
"cursor",
|
|
27
|
+
"mcp-server",
|
|
28
|
+
"image-search",
|
|
29
|
+
"batch-download"
|
|
24
30
|
],
|
|
25
31
|
"author": "",
|
|
26
32
|
"license": "MIT",
|