Google 自定义搜索 API 是免费提供的,但有使用限制(例如,每天免费提供 100 次查询,超出部分需要付费)。关于配额、定价和限制的详细信息,请参阅 官方文档。

开发者:Rayss
🚀 开源项目
🛠️ 使用 Node.js 和 TypeScript 构建(需要 Node.js v18+)
如果您的平台支持,您也可以下载并播放 demo/demo_1.mp4。
<div align="center"> <video width="640" height="360" controls autoplay> <source src="https://assets.rayzs.my.id/MCP-Web-Curl/demo_1.mp4" type="video/mp4"> 您的浏览器不支持 video 标签。 </video> </div><a name="changelog"></a>
完整的更新和新功能历史记录,请参阅 CHANGELOG.md。
<a name="overview"></a>
Web-curl 是一个强大的工具,用于从网页和 API 中抓取和提取文本内容。可以作为独立的 CLI 工具或 MCP(模型上下文协议)服务器使用。Web-curl 利用 Puppeteer 进行强大的网络爬虫,并支持高级功能,如资源阻塞、自定义头、身份验证和 Google 自定义搜索。
<a name="features"></a>
logs/error-log.txt 超过约 1MB 时(重命名为 error-log.txt.bak),以防止无限制增长。logs/ 目录中的旧临时文件。startIndex/maxLength/chunkSize 分割的影响。blockResources 现在总是强制为 false,意味着资源永远不会被阻塞,以加快页面加载速度。download_file):
destinationFolder 接受相对路径(相对于 process.cwd() 解析)或绝对路径。destinationFolder。pipeline 下载,以最小化内存使用并确保稳健的写入。https://.../path/file.jpg -> file.jpg)。如果没有文件名,则回退名为 downloaded_file。destinationFolder 或在调用工具之前在 URL 路径或目标中包含唯一文件名(时间戳、UUID)。(可选地,代码可以扩展以支持 noOverwrite 标志以自动重命名文件——如果您希望实现这一点,请询问。)pipeline 流式传输以避免部分写入,并仅在成功时返回最终路径。fetch_api 在适当的情况下返回 JSON/文本,并对二进制响应进行 base64 编码。fetch_api 现在需要一个数字 limit 参数;响应将被截断至最多 limit 字符。响应对象包括 bodyLength(原始字符长度)和 truncated(布尔值)。fetch_api 在 MCP 工具列表中标记为 autoApprove,因此兼容的 MCP 主机可以在无需交互批准的情况下调用它。此代码库中的内部调用使用合理的默认 limit 为 1000 字符(适用时)。APIKEY_GOOGLE_SEARCH 和 CX_GOOGLE_SEARCH。translate 导入)。翻译是一种尽力而为的后备措施,可能会无声失败;在失败时保留原始文本。nextPageSelector(首先尝试 href,然后点击元素)。startIndex、maxLength、remainingCharacters 以及一个用于获取更多内容的 instruction(包括如果收集到足够信息则建议停止)。startIndex(或别名 index)和至少一个 chunkSize(首选)、limit(别名)或 maxLength 必须提供且必须是数字。缺少这些必需参数的调用将因无效参数错误而被拒绝。根据需要设置这些值;它们不能为空。src/index.ts 中强制执行运行时验证,当缺少或无效的必需参数时,MCP 工具将抛出/拒绝。如果您希望在缺少参数时自动回退而不是拒绝,请修改 src/index.ts 中的验证逻辑。logs/error-log.txt。debug 参数,这将启用更详细的控制台日志记录;并非所有代码路径都一致支持 debug 标志。建议检查 logs/error-log.txt 以获得完整的跟踪。DEBUG=true 环境变量或全局 --debug CLI 选项(推荐用于开发)。fetch API,消除了对 node-fetch 依赖的需求。这简化了依赖树并利用了内置功能。npm run build 运行 tsc 和一个在 Windows 上为空操作的 chmod 步骤;CI 或跨平台脚本应在执行 chmod 时进行平台检查。fetch_api/fetch_webpage,请验证/白名单目标主机。--no-sandbox 减少隔离;仅在必要时使用,并了解在多租户系统上的风险。npm run lint;建议使用预提交钩子(例如,使用 husky 和 lint-staged)在提交前强制执行代码检查标准,以确保代码质量。fetch_api 和 download_file)添加全面的集成测试,以确保可靠性并防止回归。<a name="architecture"></a>
本节概述了 Web-curl 的高层架构。
graph TD
A[用户/MCP 主机] --> B(CLI / MCP 服务器)
B --> C{工具处理器}
C -- fetch_webpage --> D["Puppeteer (网络爬虫)"]
C -- fetch_api --> E["REST 客户端"]
C -- google_search --> F["Google 自定义搜索 API"]
C -- smart_command --> G["语言检测与翻译"]
C -- download_file --> H["文件系统 (下载)"]
D --> I["网页内容"]
E --> J["外部 API"]
F --> K["Google 搜索结果"]
H --> L["本地存储"]
src/index.ts
实现了 CLI 入口点和 MCP 服务器,暴露了 fetch_webpage、fetch_api、google_search 和 smart_command 工具。src/rest-client.ts
提供了一个灵活的 HTTP 客户端用于 API 请求,被 CLI 和 MCP 工具共同使用。logs/ 并将相对路径解析为 process.cwd()。暴露的工具包括 download_file(流式写入)、fetch_webpage、fetch_api、google_search 和 smart_command。<a name="installation"></a>
要将 web-curl 作为 MCP 服务器集成,请在 mcp_settings.json 中添加以下配置:
{
"mcpServers": {
"web-curl": {
"command": "node",
"args": [
"build/index.js"
],
"disabled": false,
"alwaysAllow": [
"fetch_webpage",
"fetch_api",
"google_search",
"smart_command",
"download_file"
],
"env": {
"APIKEY_GOOGLE_SEARCH": "YOUR_GOOGLE_API_KEY",
"CX_GOOGLE_SEARCH": "YOUR_CX_ID"
}
}
}
}
获取 Google API 密钥:
获取自定义搜索引擎(CX)ID:
启用自定义搜索 API:
替换上述配置中的 YOUR_GOOGLE_API_KEY 和 YOUR_CX_ID。
<a name="installation"></a>
# 克隆仓库
git clone https://github.com/rayss868/MCP-Web-Curl
cd web-curl
# 安装依赖
npm install
# 构建项目
npm run build
Windows:只需运行 npm install。
Linux:您必须安装 Chromium 的额外依赖项。运行:
sudo apt-get install -y \
ca-certificates fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 \
libatk1.0-0 libcups2 libdbus-1-3 libdrm2 libgbm1 libnspr4 libnss3 \
libx11-xcb1 libxcomposite1 libxdamage1 libxrandr2 xdg-utils
更多详细信息,请参阅 Puppeteer 故障排除指南。
<a name="usage"></a>
CLI 支持从网页中抓取和提取文本内容。
# 基本用法
node build/index.js https://example.com
# 带选项
node build/index.js --timeout 30000 --no-block-resources https://example.com
# 将输出保存到文件
node build/index.js -o result.json https://example.com
--timeout <ms>:设置导航超时(默认:60000)--no-block-resources:此选项现在已弃用,因为默认情况下资源阻塞总是禁用的。-o <file>:将结果输出到指定文件Web-curl 可以作为 MCP 服务器运行,以与 Roo Context 或其他 MCP 兼容环境集成。
npm run start
服务器将通过标准输入/输出通信,并在 src/index.ts 中定义的工具中暴露。
{
"name": "fetch_webpage",
"arguments": {
"url": "https://example.com",
"timeout": 60000,
"maxLength": 10000
}
}
对于大型文档,您可以使用 startIndex 和 maxLength 来切片获取内容。服务器将返回切片的内容、总字符数(删除空白后)以及获取下一部分的指令。
客户端请求第一部分:
{
"name": "fetch_webpage",
"arguments": {
"url": "https://example.com/long-article",
"blockResources": false,
"timeout": 60000,
"maxLength": 2000, // 本次切片的最大字符数
"startIndex": 0
}
}
服务器响应(示例):
{
"url": "https://example.com/long-article",
"title": "长文章标题",
"content": "前 2000 个删除空白后的 HTML 字符...",
"fetchedAt": "2025-08-19T15:00:00.000Z",
"startIndex": 0,
"maxLength": 2000,
"remainingCharacters": 8000, // 总字符数 - (startIndex + content.length)