此模型上下文协议(MCP)服务器提供了一个工具,使用 Puppeteer、Readability 和 Turndown 来抓取网页并将其转换为 Markdown 格式。它具有人工智能驱动的交互功能,可以自动处理 cookie、验证码和其他交互元素。
现在可以通过 npx 轻松运行!
npx 包轻松消费。推荐使用此服务器的方式是通过 npx,这确保您运行的是最新版本,而无需克隆或手动安装。
前提条件: 确保已安装 Node.js 和 npm。
环境设置:
该服务器需要一个 OPENAI_API_KEY。您可以以两种方式提供此键和其他可选配置:
.env 文件: 在您将运行 npx 命令的目录中创建一个 .env 文件。示例 .env 文件或终端导出:
# 必需
OPENAI_API_KEY=your_api_key_here
# 可选(显示默认值)
# VISION_MODEL=gpt-4.1
# API_BASE_URL=https://api.openai.com/v1 # 注释掉以覆盖
# TRANSPORT_TYPE=stdio # 选项:stdio, sse, http
# USE_SSE=true # 已弃用:改为使用 TRANSPORT_TYPE=sse
# PORT=3001 # 仅在 sse/http 模式下使用
# DISABLE_HEADLESS=true # 注释掉以查看浏览器操作
运行服务器: 打开您的终端并运行:
npx -y puppeteer-vision-mcp-server
-y 标志会自动确认 npx 的任何提示。stdio 模式启动。要使用 HTTP 服务器模式,请设置 TRANSPORT_TYPE=sse 或 TRANSPORT_TYPE=http。此服务器设计为集成到与 MCP 兼容的 LLM 编排器中的工具。以下是一个配置片段示例:
{
"mcpServers": {
"web-scraper": {
"command": "npx",
"args": ["-y", "puppeteer-vision-mcp-server"],
"env": {
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE",
// 可选:
// "VISION_MODEL": "gpt-4.1",
// "API_BASE_URL": "https://api.example.com/v1",
// "TRANSPORT_TYPE": "stdio", // 或 "sse" 或 "http"
// "DISABLE_HEADLESS": "true" // 在操作期间查看浏览器
}
}
// ... 其他 MCP 服务器
}
}
当这样配置时,MCP 编排器将管理 puppeteer-vision-mcp-server 进程的生命周期。
无论您如何运行服务器(NPX 或本地开发),它都使用以下环境变量:
OPENAI_API_KEY: (必需)用于访问视觉模型的 API 密钥。VISION_MODEL: (可选)用于视觉分析的模型。
gpt-4.1API_BASE_URL: (可选)自定义 API 端点 URL。
TRANSPORT_TYPE: (可选)使用的传输协议。
stdio(默认)、sse、httpstdio:直接进程通信(适用于大多数用例)sse:通过 HTTP 的服务器发送事件(旧模式)http:具有会话管理的流式 HTTP 传输USE_SSE: (可选,已弃用)设置为 true 以启用 HTTP 上的 SSE 模式。
TRANSPORT_TYPE=sse。PORT: (可选)在 SSE 或 HTTP 模式下的 HTTP 服务器端口。
3001。DISABLE_HEADLESS: (可选)设置为 true 以在可见模式下运行浏览器。
false(浏览器在无头模式下运行)。服务器支持三种通信模式:
TRANSPORT_TYPE=sse 启用。PORT(默认:3001)上启动 HTTP 服务器。http://localhost:3001/sseTRANSPORT_TYPE=http 启用。PORT(默认:3001)上启动 HTTP 服务器。http://localhost:3001/mcp服务器提供了一个 scrape-webpage 工具。
工具参数:
url(字符串,必需):要抓取的网页的 URL。autoInteract(布尔值,可选,默认值:true):是否自动处理交互元素。maxInteractionAttempts(数字,可选,默认值:3):最大 AI 交互尝试次数。waitForNetworkIdle(布尔值,可选,默认值:true):是否在网络空闲前等待处理。响应格式:
工具以结构化的格式返回结果:
content:包含单个文本对象的数组,其中包含抓取网页的原始 Markdown。metadata:包含额外信息:
message:状态消息。success:布尔值,指示成功与否。contentSize:内容大小(字符数,成功时)。示例成功响应:
{
"content": [
{
"type": "text",
"text": "# 页面标题\n\n这是内容..."
}
],
"metadata": {
"message": "抓取成功",
"success": true,
"contentSize": 8734
}
}
示例错误响应:
{
"content": [
{
"type": "text",
"text": ""
}
],
"metadata": {
"message": "抓取网页失败:无法加载 URL",
"success": false
}
}
系统使用具有视觉能力的人工智能模型(可通过 VISION_MODEL 和 API_BASE_URL 配置)来分析网页截图,并决定采取点击、输入或滚动等行动以绕过覆盖层和同意表单。此过程最多重复 maxInteractionAttempts 次。
在交互之后,Mozilla 的 Readability 提取主要内容,然后使用 Turndown 和自定义规则(针对代码块和表格)进行清理和转换为 Markdown。
如果您希望贡献、修改服务器或运行本地开发版本:
克隆存储库:
git clone https://github.com/djannot/puppeteer-vision-mcp.git
cd puppeteer-vision-mcp
安装依赖项:
npm install
构建项目:
npm run build
设置环境:
在项目的根目录中创建一个 .env 文件,包含您的 OPENAI_API_KEY 和任何其他所需的配置(参见“环境配置详情”)。
开发运行:
npm start # 使用本地构建启动服务器
或者,对于更改时自动重建:
npm run dev
您可以通过编辑以下文件来修改抓取器的行为:
src/ai/vision-analyzer.ts (analyzePageWithAI 函数):自定义 AI 提示。src/ai/page-interactions.ts (executeAction 函数):添加新的动作类型。src/scrapers/webpage-scraper.ts (visitWebPage 函数):更改 Puppeteer 选项。src/utils/markdown-formatters.ts:调整 Turndown 规则以进行 Markdown 转换。关键依赖项包括:
@modelcontextprotocol/sdkpuppeteer, puppeteer-extra@mozilla/readability, jsdomturndown, sanitize-htmlopenai(或兼容的视觉模型 API)express(用于 SSE 模式)zod