@lmcc-dev/mult-fetch-mcp-server 1.0.1
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/LICENSE +21 -0
- package/README.md +512 -0
- package/README.zh.md +510 -0
- package/dist/index.js +21 -0
- package/dist/src/cli-language.js +78 -0
- package/dist/src/client.js +284 -0
- package/dist/src/index.js +21 -0
- package/dist/src/lib/BrowserFetcher.js +753 -0
- package/dist/src/lib/NodeFetcher.js +428 -0
- package/dist/src/lib/example.js +93 -0
- package/dist/src/lib/i18n/index.js +36 -0
- package/dist/src/lib/i18n/locales/en/browser.js +53 -0
- package/dist/src/lib/i18n/locales/en/client.js +40 -0
- package/dist/src/lib/i18n/locales/en/errors.js +18 -0
- package/dist/src/lib/i18n/locales/en/fetcher.js +67 -0
- package/dist/src/lib/i18n/locales/en/index.js +26 -0
- package/dist/src/lib/i18n/locales/en/node.js +42 -0
- package/dist/src/lib/i18n/locales/en/prompts.js +72 -0
- package/dist/src/lib/i18n/locales/en/resources.js +47 -0
- package/dist/src/lib/i18n/locales/en/server.js +32 -0
- package/dist/src/lib/i18n/locales/en/tools.js +25 -0
- package/dist/src/lib/i18n/locales/zh/browser.js +53 -0
- package/dist/src/lib/i18n/locales/zh/client.js +39 -0
- package/dist/src/lib/i18n/locales/zh/errors.js +18 -0
- package/dist/src/lib/i18n/locales/zh/fetcher.js +67 -0
- package/dist/src/lib/i18n/locales/zh/index.js +26 -0
- package/dist/src/lib/i18n/locales/zh/node.js +42 -0
- package/dist/src/lib/i18n/locales/zh/prompts.js +72 -0
- package/dist/src/lib/i18n/locales/zh/resources.js +47 -0
- package/dist/src/lib/i18n/locales/zh/server.js +32 -0
- package/dist/src/lib/i18n/locales/zh/tools.js +25 -0
- package/dist/src/lib/i18n/logger.js +57 -0
- package/dist/src/lib/logger.js +126 -0
- package/dist/src/lib/server/browser.js +86 -0
- package/dist/src/lib/server/fetcher.js +130 -0
- package/dist/src/lib/server/index.js +73 -0
- package/dist/src/lib/server/logger.js +23 -0
- package/dist/src/lib/server/prompts.js +207 -0
- package/dist/src/lib/server/resources.js +171 -0
- package/dist/src/lib/server/tools.js +346 -0
- package/dist/src/lib/server/types.js +6 -0
- package/dist/src/lib/types.js +35 -0
- package/dist/src/mcp-server.js +22 -0
- package/dist/tests/test-direct-client.js +129 -0
- package/dist/tests/test-mcp-methods.js +114 -0
- package/dist/tests/test-mcp.js +145 -0
- package/dist/tests/test-mini4k.js +147 -0
- package/images/example_en.png +0 -0
- package/images/example_zh.png +0 -0
- package/package.json +80 -0
package/README.zh.md
ADDED
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
# mult-fetch-mcp-server
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/mult-fetch-mcp-server)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
[](https://www.typescriptlang.org/)
|
|
7
|
+
[](https://github.com/modelcontextprotocol/typescript-sdk)
|
|
8
|
+
[](https://github.com/lmcc-dev/mult-fetch-mcp-server/stargazers)
|
|
9
|
+
[](https://github.com/lmcc-dev/mult-fetch-mcp-server/network/members)
|
|
10
|
+
[](https://github.com/lmcc-dev/mult-fetch-mcp-server/issues)
|
|
11
|
+
[](https://github.com/lmcc-dev/mult-fetch-mcp-server/pulls)
|
|
12
|
+
[](https://www.npmjs.com/package/mult-fetch-mcp-server)
|
|
13
|
+
[](https://github.com/lmcc-dev/mult-fetch-mcp-server/commits/main)
|
|
14
|
+
[](https://github.com/lmcc-dev/mult-fetch-mcp-server/graphs/contributors)
|
|
15
|
+
|
|
16
|
+
<!-- 未来可考虑添加的徽章:
|
|
17
|
+
[](https://codecov.io/gh/lmcc-dev/mult-fetch-mcp-server)
|
|
18
|
+
[](https://www.codefactor.io/repository/github/lmcc-dev/mult-fetch-mcp-server)
|
|
19
|
+
[](https://codeclimate.com/github/lmcc-dev/mult-fetch-mcp-server/maintainability)
|
|
20
|
+
-->
|
|
21
|
+
|
|
22
|
+
本项目实现了一个符合MCP规范的客户端和服务器,用于在AI助手和外部工具之间进行通信。
|
|
23
|
+
|
|
24
|
+
[English](./README.md) | [中文文档](./README.zh.md)
|
|
25
|
+
|
|
26
|
+
## 项目结构
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
fetch-mcp/
|
|
30
|
+
├── src/ # 源代码目录
|
|
31
|
+
│ ├── lib/ # 库文件
|
|
32
|
+
│ │ ├── BrowserFetcher.ts # 浏览器模式获取器
|
|
33
|
+
│ │ ├── NodeFetcher.ts # Node.js 模式获取器
|
|
34
|
+
│ │ ├── server/ # 服务器相关模块
|
|
35
|
+
│ │ │ ├── index.ts # 服务器入口
|
|
36
|
+
│ │ │ ├── browser.ts # 浏览器管理
|
|
37
|
+
│ │ │ ├── fetcher.ts # 网页获取逻辑
|
|
38
|
+
│ │ │ ├── logger.ts # 日志工具
|
|
39
|
+
│ │ │ ├── tools.ts # 工具注册和处理
|
|
40
|
+
│ │ │ └── types.ts # 服务器类型定义
|
|
41
|
+
│ │ ├── i18n/ # 国际化支持
|
|
42
|
+
│ │ │ ├── index.ts # 国际化配置
|
|
43
|
+
│ │ │ └── logger.ts # 国际化日志工具
|
|
44
|
+
│ │ └── types.ts # 通用类型定义
|
|
45
|
+
│ ├── client.ts # MCP 客户端实现
|
|
46
|
+
│ └── mcp-server.ts # MCP 服务器主入口
|
|
47
|
+
├── index.ts # 服务器入口点
|
|
48
|
+
├── tests/ # 测试文件
|
|
49
|
+
│ ├── test-mcp.ts # MCP 功能测试
|
|
50
|
+
│ ├── test-mini4k.ts # 特定网站测试
|
|
51
|
+
│ └── test-direct-client.ts # 直接客户端调用测试
|
|
52
|
+
└── dist/ # 编译后的文件
|
|
53
|
+
├── index.js # 编译后的入口点
|
|
54
|
+
├── src/ # 编译后的源代码
|
|
55
|
+
└── tests/ # 编译后的测试文件
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## MCP规范
|
|
59
|
+
|
|
60
|
+
模型上下文协议(Model Context Protocol, MCP)定义了两种主要的传输方式:
|
|
61
|
+
|
|
62
|
+
1. **标准输入输出(Stdio)**:客户端将MCP服务器作为子进程启动,双方通过标准输入(stdin)和标准输出(stdout)进行通信。
|
|
63
|
+
2. **服务器发送事件(Server-Sent Events, SSE)**:用于在客户端和服务器之间传递消息。
|
|
64
|
+
|
|
65
|
+
本项目实现了基于标准输入输出(Stdio)的传输方式。
|
|
66
|
+
|
|
67
|
+
## 特性
|
|
68
|
+
|
|
69
|
+
- 基于官方 MCP SDK 的实现
|
|
70
|
+
- 支持标准输入输出(Stdio)传输方式
|
|
71
|
+
- 提供了多种网页抓取方法(HTML、JSON、文本、Markdown)
|
|
72
|
+
- 智能模式切换:自动在标准请求和浏览器模式之间切换
|
|
73
|
+
- 详细的调试日志输出到标准错误流
|
|
74
|
+
- 支持中英文双语国际化
|
|
75
|
+
- 模块化设计,便于维护和扩展
|
|
76
|
+
|
|
77
|
+
## 安装
|
|
78
|
+
|
|
79
|
+
### 本地安装
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npm install
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 全局安装
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npm install -g mult-fetch-mcp-server
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
或者直接使用 npx 运行(无需安装):
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npx mult-fetch-mcp-server
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 与 Claude 集成
|
|
98
|
+
|
|
99
|
+
要将此工具与 Claude 桌面版集成,需要添加服务器配置:
|
|
100
|
+
|
|
101
|
+
### 配置文件位置
|
|
102
|
+
|
|
103
|
+
- **MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
104
|
+
- **Windows**: `%APPDATA%/Claude/claude_desktop_config.json`
|
|
105
|
+
|
|
106
|
+
### 配置示例
|
|
107
|
+
|
|
108
|
+
#### 方式一:使用 npx(推荐)
|
|
109
|
+
|
|
110
|
+
这种方式最简单,不需要指定完整路径,适合全局安装或直接使用 npx:
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"mcpServers": {
|
|
115
|
+
"mult-fetch-mcp-server": {
|
|
116
|
+
"command": "npx",
|
|
117
|
+
"args": ["mult-fetch-mcp-server"],
|
|
118
|
+
"env": {
|
|
119
|
+
"MCP_LANG": "zh" // 设置语言为中文,可选值: "zh" 或 "en"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
#### 方式二:指定完整路径
|
|
127
|
+
|
|
128
|
+
如果您需要使用特定位置的安装,可以指定完整路径:
|
|
129
|
+
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"mcpServers": {
|
|
133
|
+
"mult-fetch-mcp-server": {
|
|
134
|
+
"command": "path-to/bin/node",
|
|
135
|
+
"args": ["path-to/mult-fetch-mcp-server/dist/index.js"],
|
|
136
|
+
"env": {
|
|
137
|
+
"MCP_LANG": "zh" // 设置语言为中文,可选值: "zh" 或 "en"
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
请将 `path-to/bin/node` 替换为您系统上 Node.js 可执行文件的路径,将 `path-to/mult-fetch-mcp-server` 替换为此项目的实际路径。
|
|
145
|
+
|
|
146
|
+
### 使用示例
|
|
147
|
+
|
|
148
|
+
以下是在 Claude 桌面客户端中使用此工具的示例:
|
|
149
|
+
|
|
150
|
+

|
|
151
|
+
|
|
152
|
+
图片展示了 Claude 如何使用 fetch 工具获取网页内容并根据您的指令进行处理。
|
|
153
|
+
|
|
154
|
+
### 使用方法
|
|
155
|
+
|
|
156
|
+
配置完成后,重启 Claude 桌面版,然后您可以在对话中使用以下工具:
|
|
157
|
+
|
|
158
|
+
- `fetch_html`: 获取网页 HTML 内容
|
|
159
|
+
- `fetch_json`: 获取 JSON 数据
|
|
160
|
+
- `fetch_txt`: 获取纯文本内容
|
|
161
|
+
- `fetch_markdown`: 获取 Markdown 格式内容
|
|
162
|
+
|
|
163
|
+
## 构建
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
npm run build
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## 运行服务器
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
npm run server
|
|
173
|
+
# 或者
|
|
174
|
+
node dist/index.js
|
|
175
|
+
# 如果全局安装,可以直接运行
|
|
176
|
+
mult-fetch-mcp-server
|
|
177
|
+
# 或者使用 npx
|
|
178
|
+
npx mult-fetch-mcp-server
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## 运行客户端
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
npm run client <method> <params_json>
|
|
185
|
+
# 例如
|
|
186
|
+
npm run client fetch_html '{"url": "https://example.com", "debug": true}'
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## 运行测试
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# 运行 MCP 功能测试
|
|
193
|
+
npm run test:mcp
|
|
194
|
+
|
|
195
|
+
# 运行 mini4k.com 网站测试
|
|
196
|
+
npm run test:mini4k
|
|
197
|
+
|
|
198
|
+
# 运行直接客户端调用测试
|
|
199
|
+
npm run test:direct
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## 语言设置
|
|
203
|
+
|
|
204
|
+
本项目支持中英文双语国际化。您可以使用环境变量设置语言:
|
|
205
|
+
|
|
206
|
+
### 使用环境变量
|
|
207
|
+
|
|
208
|
+
设置 `MCP_LANG` 环境变量来控制语言:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# 设置为英文
|
|
212
|
+
export MCP_LANG=en
|
|
213
|
+
npm run server
|
|
214
|
+
|
|
215
|
+
# 设置为中文
|
|
216
|
+
export MCP_LANG=zh
|
|
217
|
+
npm run server
|
|
218
|
+
|
|
219
|
+
# Windows 系统
|
|
220
|
+
set MCP_LANG=zh
|
|
221
|
+
npm run server
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
使用环境变量的方式可以确保所有相关进程(包括 MCP 服务器)都使用相同的语言设置。
|
|
225
|
+
|
|
226
|
+
### 默认语言
|
|
227
|
+
|
|
228
|
+
默认情况下,系统会按照以下优先级选择语言:
|
|
229
|
+
1. `MCP_LANG` 环境变量
|
|
230
|
+
2. 操作系统语言(如果以 "zh" 开头,则使用中文)
|
|
231
|
+
3. 英文(作为最终回退选项)
|
|
232
|
+
|
|
233
|
+
## 调试
|
|
234
|
+
|
|
235
|
+
本项目遵循 MCP 协议的规范,默认情况下不会输出任何日志,以避免干扰 JSON-RPC 通信。调试信息通过调用参数控制:
|
|
236
|
+
|
|
237
|
+
### 使用 debug 参数
|
|
238
|
+
|
|
239
|
+
在调用工具时,设置 `debug: true` 参数:
|
|
240
|
+
|
|
241
|
+
```json
|
|
242
|
+
{
|
|
243
|
+
"url": "https://example.com",
|
|
244
|
+
"debug": true
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
调试消息会发送到标准错误流(stderr),使用以下格式:
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
[MCP-SERVER] MCP 服务器启动中...
|
|
252
|
+
[CLIENT] 正在获取URL: https://example.com
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### 调试日志文件
|
|
256
|
+
|
|
257
|
+
当启用调试模式时,所有调试消息也会写入到位于以下位置的日志文件:
|
|
258
|
+
|
|
259
|
+
```
|
|
260
|
+
~/.mult-fetch-mcp-server/debug.log
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
可以通过 MCP 资源 API 访问此日志文件:
|
|
264
|
+
|
|
265
|
+
```typescript
|
|
266
|
+
// 访问调试日志文件
|
|
267
|
+
const result = await client.readResource({ uri: "file:///logs/debug" });
|
|
268
|
+
console.log(result.contents[0].text);
|
|
269
|
+
|
|
270
|
+
// 清除调试日志文件
|
|
271
|
+
const clearResult = await client.readResource({ uri: "file:///logs/clear" });
|
|
272
|
+
console.log(clearResult.contents[0].text);
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
日志文件包含来自所有组件(服务器、客户端、获取器)的带时间戳的条目,可用于排查问题。
|
|
276
|
+
|
|
277
|
+
## 代理设置
|
|
278
|
+
|
|
279
|
+
本工具支持多种配置代理设置的方法:
|
|
280
|
+
|
|
281
|
+
### 1. 使用 `proxy` 参数
|
|
282
|
+
|
|
283
|
+
最直接的方式是在请求参数中指定代理:
|
|
284
|
+
|
|
285
|
+
```json
|
|
286
|
+
{
|
|
287
|
+
"url": "https://example.com",
|
|
288
|
+
"proxy": "http://your-proxy-server:port",
|
|
289
|
+
"debug": true
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### 2. 使用环境变量
|
|
294
|
+
|
|
295
|
+
工具会自动检测并使用标准环境变量中的代理设置:
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
# 设置代理环境变量
|
|
299
|
+
export HTTP_PROXY=http://your-proxy-server:port
|
|
300
|
+
export HTTPS_PROXY=http://your-proxy-server:port
|
|
301
|
+
|
|
302
|
+
# 运行服务器
|
|
303
|
+
npm run server
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### 3. 系统代理检测
|
|
307
|
+
|
|
308
|
+
工具会根据您的操作系统尝试检测系统代理设置:
|
|
309
|
+
|
|
310
|
+
- **Windows**:使用 `set` 命令从环境变量中读取代理设置
|
|
311
|
+
- **macOS/Linux**:使用 `env` 命令从环境变量中读取代理设置
|
|
312
|
+
|
|
313
|
+
### 4. 代理故障排除
|
|
314
|
+
|
|
315
|
+
如果您在代理检测方面遇到问题:
|
|
316
|
+
|
|
317
|
+
1. 使用 `debug: true` 参数查看有关代理检测的详细日志
|
|
318
|
+
2. 使用 `proxy` 参数明确指定代理
|
|
319
|
+
3. 确保您的代理 URL 格式正确:`http://host:port` 或 `https://host:port`
|
|
320
|
+
4. 对于需要浏览器功能的网站,设置 `useBrowser: true` 使用浏览器模式
|
|
321
|
+
|
|
322
|
+
### 5. 浏览器模式和代理
|
|
323
|
+
|
|
324
|
+
当使用浏览器模式(`useBrowser: true`)时,工具将:
|
|
325
|
+
|
|
326
|
+
1. 首先尝试使用明确指定的代理(如果提供)
|
|
327
|
+
2. 然后尝试使用系统代理设置
|
|
328
|
+
3. 最后,如果没有找到代理,则不使用代理继续
|
|
329
|
+
|
|
330
|
+
浏览器模式对于实现了反爬虫措施或需要 JavaScript 执行的网站特别有用。
|
|
331
|
+
|
|
332
|
+
## 参数处理
|
|
333
|
+
|
|
334
|
+
本项目采用以下方式处理参数:
|
|
335
|
+
|
|
336
|
+
- **debug**: 通过调用参数传递,每个请求可以单独控制是否启用调试输出
|
|
337
|
+
- **MCP_LANG**: 通过环境变量获取,控制整个服务器的语言设置
|
|
338
|
+
|
|
339
|
+
## 使用方法
|
|
340
|
+
|
|
341
|
+
### 创建客户端
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
345
|
+
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
346
|
+
import path from 'path';
|
|
347
|
+
import { fileURLToPath } from 'url';
|
|
348
|
+
|
|
349
|
+
// 获取当前文件的目录路径
|
|
350
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
351
|
+
const __dirname = path.dirname(__filename);
|
|
352
|
+
|
|
353
|
+
// 创建客户端传输层
|
|
354
|
+
const transport = new StdioClientTransport({
|
|
355
|
+
command: 'node',
|
|
356
|
+
args: [path.resolve(__dirname, 'dist/index.js')],
|
|
357
|
+
stderr: 'inherit',
|
|
358
|
+
env: {
|
|
359
|
+
...process.env // 传递所有环境变量,包括MCP_LANG
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
|
|
363
|
+
// 创建客户端
|
|
364
|
+
const client = new Client({
|
|
365
|
+
name: "example-client",
|
|
366
|
+
version: "1.0.0"
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
// 连接到传输层
|
|
370
|
+
await client.connect(transport);
|
|
371
|
+
|
|
372
|
+
// 使用客户端
|
|
373
|
+
const result = await client.callTool({
|
|
374
|
+
name: 'fetch_html',
|
|
375
|
+
arguments: {
|
|
376
|
+
url: 'https://example.com',
|
|
377
|
+
debug: true // 通过参数控制调试输出
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
if (result.isError) {
|
|
382
|
+
console.error('获取失败:', result.content[0].text);
|
|
383
|
+
} else {
|
|
384
|
+
console.log('获取成功!');
|
|
385
|
+
console.log('内容预览:', result.content[0].text.substring(0, 500));
|
|
386
|
+
}
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### 支持的工具
|
|
390
|
+
|
|
391
|
+
- `fetch_html`: 获取网页HTML内容
|
|
392
|
+
- `fetch_json`: 获取JSON数据
|
|
393
|
+
- `fetch_txt`: 获取纯文本内容
|
|
394
|
+
- `fetch_markdown`: 获取Markdown格式内容
|
|
395
|
+
|
|
396
|
+
### 资源支持
|
|
397
|
+
|
|
398
|
+
服务器包含对 resources/list 和 resources/read 方法的支持,但当前实现中没有定义任何资源。资源系统设计用于提供对项目文件和文档的访问,但此功能尚未完全实现。
|
|
399
|
+
|
|
400
|
+
#### 资源使用示例
|
|
401
|
+
|
|
402
|
+
```typescript
|
|
403
|
+
// 示例:列出可用资源
|
|
404
|
+
const resourcesResult = await client.listResources({});
|
|
405
|
+
console.log('可用资源:', resourcesResult);
|
|
406
|
+
|
|
407
|
+
// 注意:目前这将返回空的资源列表和资源模板列表
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
### 支持的提示模板
|
|
411
|
+
|
|
412
|
+
服务器提供以下提示模板:
|
|
413
|
+
|
|
414
|
+
- `fetch-website`: 获取网站内容,支持不同格式和浏览器模式
|
|
415
|
+
- `extract-content`: 从网站提取特定内容,支持CSS选择器和数据类型指定
|
|
416
|
+
- `debug-fetch`: 调试网站获取问题,分析可能的原因并提供解决方案
|
|
417
|
+
|
|
418
|
+
#### 提示模板使用方法
|
|
419
|
+
|
|
420
|
+
1. 使用 `prompts/list` 获取可用提示模板列表
|
|
421
|
+
2. 使用 `prompts/get` 获取特定提示模板内容
|
|
422
|
+
|
|
423
|
+
```typescript
|
|
424
|
+
// 示例:列出可用提示模板
|
|
425
|
+
const promptsResult = await client.listPrompts({});
|
|
426
|
+
console.log('可用提示模板:', promptsResult);
|
|
427
|
+
|
|
428
|
+
// 示例:获取网站内容提示
|
|
429
|
+
const fetchPrompt = await client.getPrompt({
|
|
430
|
+
name: "fetch-website",
|
|
431
|
+
arguments: {
|
|
432
|
+
url: "https://example.com",
|
|
433
|
+
format: "html",
|
|
434
|
+
useBrowser: "false"
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
console.log('获取网站提示:', fetchPrompt);
|
|
438
|
+
|
|
439
|
+
// 示例:调试网站获取问题
|
|
440
|
+
const debugPrompt = await client.getPrompt({
|
|
441
|
+
name: "debug-fetch",
|
|
442
|
+
arguments: {
|
|
443
|
+
url: "https://example.com",
|
|
444
|
+
error: "连接超时"
|
|
445
|
+
}
|
|
446
|
+
});
|
|
447
|
+
console.log('调试获取提示:', debugPrompt);
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### 参数选项
|
|
451
|
+
|
|
452
|
+
每个工具支持以下参数:
|
|
453
|
+
|
|
454
|
+
#### 基本参数
|
|
455
|
+
- `url`: 要获取的URL(必需)
|
|
456
|
+
- `headers`: 自定义请求头(可选,默认为{})
|
|
457
|
+
- `proxy`: 代理服务器URL,格式为http://host:port或https://host:port(可选)
|
|
458
|
+
|
|
459
|
+
#### 网络控制参数
|
|
460
|
+
- `timeout`: 超时时间(毫秒)(可选,默认为30000)
|
|
461
|
+
- `maxRedirects`: 最大重定向次数(可选,默认为10)
|
|
462
|
+
- `noDelay`: 是否禁用请求间的随机延迟(可选,默认为false)
|
|
463
|
+
- `useSystemProxy`: 是否使用系统代理(可选,默认为true)
|
|
464
|
+
|
|
465
|
+
#### 模式控制参数
|
|
466
|
+
- `useBrowser`: 是否使用浏览器模式(可选,默认为false)
|
|
467
|
+
- `useNodeFetch`: 是否强制使用Node.js模式(可选,默认为false,与`useBrowser`互斥)
|
|
468
|
+
- `autoDetectMode`: 是否自动检测并切换到浏览器模式(可选,默认为true)
|
|
469
|
+
|
|
470
|
+
#### 浏览器模式特有参数
|
|
471
|
+
- `waitForSelector`: 浏览器模式下等待的选择器(可选,默认为'body')
|
|
472
|
+
- `waitForTimeout`: 浏览器模式下等待的超时时间(毫秒)(可选,默认为5000)
|
|
473
|
+
- `scrollToBottom`: 浏览器模式下是否滚动到页面底部(可选,默认为false)
|
|
474
|
+
- `saveCookies`: 浏览器模式下是否保存cookies(可选,默认为true)
|
|
475
|
+
- `closeBrowser`: 是否关闭浏览器实例(可选,默认为false)
|
|
476
|
+
|
|
477
|
+
#### 调试参数
|
|
478
|
+
- `debug`: 是否启用调试输出(可选,默认为false)
|
|
479
|
+
|
|
480
|
+
### 特殊用法
|
|
481
|
+
|
|
482
|
+
#### 不获取内容直接关闭浏览器
|
|
483
|
+
要关闭浏览器实例而不执行任何获取操作:
|
|
484
|
+
```json
|
|
485
|
+
{
|
|
486
|
+
"url": "about:blank",
|
|
487
|
+
"closeBrowser": true
|
|
488
|
+
}
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
#### 代理优先级
|
|
492
|
+
代理的确定顺序如下:
|
|
493
|
+
1. 命令行指定的代理
|
|
494
|
+
2. 请求中的`proxy`参数
|
|
495
|
+
3. 环境变量中的代理(如果`useSystemProxy`为true)
|
|
496
|
+
4. Git配置中的代理(如果`useSystemProxy`为true)
|
|
497
|
+
|
|
498
|
+
如果设置了`proxy`参数,`useSystemProxy`将自动设置为false。
|
|
499
|
+
|
|
500
|
+
### 调试输出
|
|
501
|
+
|
|
502
|
+
当设置`debug: true`时,日志将输出到stderr,带有以下前缀:
|
|
503
|
+
- `[MCP-SERVER]`: MCP服务器的日志
|
|
504
|
+
- `[NODE-FETCH]`: Node.js获取器的日志
|
|
505
|
+
- `[BROWSER-FETCH]`: 浏览器获取器的日志
|
|
506
|
+
- `[CLIENT]`: 客户端的日志
|
|
507
|
+
|
|
508
|
+
## 许可证
|
|
509
|
+
|
|
510
|
+
MIT
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Author: Martin <lmccc.dev@gmail.com>
|
|
4
|
+
* Co-Author: AI Assistant (Claude)
|
|
5
|
+
* Description: This code was collaboratively developed by Martin and AI Assistant.
|
|
6
|
+
*
|
|
7
|
+
* MCP 服务器启动入口 (MCP Server Entry Point)
|
|
8
|
+
*
|
|
9
|
+
* 这个文件是 MCP 服务器的主入口点,它导入并启动 src/mcp-server.ts 中定义的服务器。
|
|
10
|
+
* (This file is the main entry point of the MCP server, it imports and starts the server defined in src/mcp-server.ts.)
|
|
11
|
+
*
|
|
12
|
+
* 使用方法 (Usage):
|
|
13
|
+
* node dist/index.js
|
|
14
|
+
*/
|
|
15
|
+
// 导入服务器模块 (Import server module)
|
|
16
|
+
import './src/mcp-server.js';
|
|
17
|
+
// 服务器在 src/mcp-server.js 中已经启动,这里不需要额外的代码
|
|
18
|
+
// 在 MCP 模式下,不能有任何标准输出,否则会干扰 JSON-RPC 通信
|
|
19
|
+
// (The server is already started in src/mcp-server.js, no additional code is needed here)
|
|
20
|
+
// (In MCP mode, there should be no standard output, otherwise it will interfere with JSON-RPC communication)
|
|
21
|
+
// console.log('MCP 服务器入口已加载,服务器正在启动...');
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Author: Martin <lmccc.dev@gmail.com>
|
|
4
|
+
* Co-Author: AI Assistant (Claude)
|
|
5
|
+
* Description: This code was collaboratively developed by Martin and AI Assistant.
|
|
6
|
+
*/
|
|
7
|
+
import { getCurrentLanguage, changeLanguage } from './lib/i18n/index.js';
|
|
8
|
+
import { createLogger } from './lib/i18n/logger.js';
|
|
9
|
+
// 创建日志记录器 (Create logger)
|
|
10
|
+
const logger = createLogger('LANGUAGE');
|
|
11
|
+
/**
|
|
12
|
+
* 显示帮助信息 (Show help information)
|
|
13
|
+
*/
|
|
14
|
+
function showHelp() {
|
|
15
|
+
console.error(`
|
|
16
|
+
语言设置工具 (Language Setting Tool)
|
|
17
|
+
|
|
18
|
+
用法 (Usage):
|
|
19
|
+
node dist/cli-language.js [命令] (node dist/cli-language.js [command])
|
|
20
|
+
|
|
21
|
+
命令 (Commands):
|
|
22
|
+
get 获取当前语言设置 (Get current language setting)
|
|
23
|
+
set <lang> 设置语言 (Set language)
|
|
24
|
+
<lang> 可以是 'en' 或 'zh' (<lang> can be 'en' or 'zh')
|
|
25
|
+
help 显示此帮助信息 (Show this help information)
|
|
26
|
+
|
|
27
|
+
示例 (Examples):
|
|
28
|
+
node dist/cli-language.js get
|
|
29
|
+
node dist/cli-language.js set en
|
|
30
|
+
node dist/cli-language.js set zh
|
|
31
|
+
|
|
32
|
+
注意 (Note):
|
|
33
|
+
此工具只会影响当前进程的语言设置,不会影响已经运行的服务器进程。
|
|
34
|
+
对于服务器进程,建议使用 MCP_LANG 环境变量来设置语言。
|
|
35
|
+
(This tool only affects the language setting of the current process, not running server processes.
|
|
36
|
+
For server processes, it is recommended to use the MCP_LANG environment variable to set the language.)
|
|
37
|
+
|
|
38
|
+
例如 (Example):
|
|
39
|
+
MCP_LANG=zh node dist/index.js
|
|
40
|
+
`);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 主函数 (Main function)
|
|
44
|
+
*/
|
|
45
|
+
async function main() {
|
|
46
|
+
const args = process.argv.slice(2);
|
|
47
|
+
const command = args[0];
|
|
48
|
+
if (!command || command === 'help') {
|
|
49
|
+
showHelp();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
switch (command) {
|
|
53
|
+
case 'get':
|
|
54
|
+
console.error(`当前语言 (Current language): ${getCurrentLanguage()}`);
|
|
55
|
+
break;
|
|
56
|
+
case 'set':
|
|
57
|
+
const lang = args[1];
|
|
58
|
+
if (lang !== 'en' && lang !== 'zh') {
|
|
59
|
+
console.error('错误: 语言必须是 "en" 或 "zh" (Error: Language must be "en" or "zh")');
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
changeLanguage(lang);
|
|
63
|
+
console.error(`语言已设置为 (Language set to): ${lang}`);
|
|
64
|
+
// 测试翻译 (Test translation)
|
|
65
|
+
logger.info('server.starting');
|
|
66
|
+
logger.info('server.started');
|
|
67
|
+
break;
|
|
68
|
+
default:
|
|
69
|
+
console.error(`未知命令: ${command} (Unknown command: ${command})`);
|
|
70
|
+
showHelp();
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// 执行主函数 (Execute main function)
|
|
75
|
+
main().catch(error => {
|
|
76
|
+
console.error('错误 (Error):', error);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
});
|