每日 MCP Server

Puppeteer MCP:让 AI 拥有一双会点浏览器的手

2026-08-24
网络仓库
支持客户端:
Claude DesktopCursorVS CodeContinue
MCPPuppeteer浏览器自动化爬虫

简介

Filesystem MCP 让 AI 读文件,GitHub MCP 让 AI 读代码,但遇到 JS 渲染页面、需要点按钮、看截图的场景就抓瞎。Puppeteer MCP 给 AI 一个真实浏览器:导航、点击、填表、截图、提取文本。本文拆解安装配置、7 个工具用法、5 个实战场景(抓动态页、表单自动化、视觉回归、E2E 测试、监控告警),以及无头浏览器的安全边界。

安装命令

npx -y @modelcontextprotocol/server-puppeteer

为什么需要 Puppeteer MCP

很多 MCP 解决的是"读"的问题:

Filesystem MCP → 读本地文件
GitHub MCP → 读代码
Notion MCP → 读文档

但真实世界有一大类任务卡在"浏览器":

"帮我看看这个商品页现在多少钱"
  → 页面是 JS 动态渲染 → curl 拿到的是空壳
  → 必须真浏览器执行 JS

"帮我每天填一次打卡表单"
  → 要登录、点按钮、填字段、提交
  → 读文件读不出按钮

"这个页面上线后布局错没"
  → 要看渲染后的样子,不是 HTML 源码
  → 要截图给 AI 看

Puppeteer MCP 给 AI 一个无头(或带界面)的 Chrome:能导航、能点、能填、能截图、能抓动态内容。把"看不了动态网页"这个最后一块拼图补上。

核心能力

工具说明
导航打开 URL,等待加载完成
点击点元素(按选择器)
填表给 input/textarea 输入文本
提取抓取页面文本/元素内容
截图整页或指定元素截图(可让 AI"看")
执行 JS在页面上下文跑自定义脚本
等待等元素出现/网络空闲

安装与配置

Step 1:环境依赖

Puppeteer 需要 Chrome。首次运行 npx 会自动下载 Chromium,无需手动装。

Step 2:各客户端配置

Claude Desktop

{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
    }
  }
}

Cursor / VS Code Continue

{
  "mcpServers": {
    "puppeteer": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-puppeteer"],
      "env": {
        "PUPPETEER_HEADLESS": "true"
      }
    }
  }
}

Step 3:验证

打开 https://example.com 并截图

AI 调用浏览器导航、截图并返回图片,确认配置成功。

五个实战场景

场景 1:抓 JS 动态渲染页

你:抓 example-shop.com 的当前商品价格

AI:
  1. 导航到商品页
  2. 等待 .price 元素出现
  3. 提取价格文本
  4. 返回"¥299"

curl 抓不到(JS 渲染),Puppeteer 等渲染完再读。

场景 2:表单自动化

你:登录 oa.example.com,用户名 admin 密码 xxx,然后点"打卡"

AI:
  1. 导航到登录页
  2. 填 #username = admin
  3. 填 #password = xxx
  4. 点 #login-btn
  5. 等待跳转
  6. 点 #checkin-btn
  7. 截图确认"打卡成功"

场景 3:视觉回归

配合截图能力,做页面视觉监控:

你:对比 example.com 首页今天和昨天的截图

AI:
  1. 今天截图存 today.png
  2. 读昨天 baseline.png
  3. 像素级 diff
  4. 标出差异区域
  5. 差异 > 阈值则告警

场景 4:E2E 测试

你:测注册流程能不能跑通

AI:
  1. 导航到 /register
  2. 填邮箱、密码
  3. 点注册
  4. 断言出现"激活邮件已发送"
  5. 失败则截图 + 报错

场景 5:监控告警

你:每 10 分钟检查支付页是否在线

AI(定时):
  1. 导航支付页
  2. 等待核心元素
  3. 超时未出现 → 截图 → Slack 告警(Slack MCP)

权限管控要点

1. 无头优先

日常用 headless 模式(PUPPETEER_HEADLESS=true)
调试时才开有头模式看实际操作

2. 域名白名单

✗ 给 MCP 任意 URL 访问权 → 可能被诱导访问恶意页
✓ 在 system prompt 限定可访问域名

3. 凭证隔离

✗ 把生产账号密码写进 MCP 配置 → 泄露风险
✓ 用只读测试账号,敏感操作要二次确认

4. 执行 JS 的边界

Puppeteer 能在页面跑任意 JS
  → system prompt 约束:只在目标页执行,不注入恶意脚本
  → 不在银行/支付页执行自定义 JS

注意事项

1. 资源占用

无头 Chrome 吃内存,批量任务要控制并发:

import asyncio
async def crawl(urls, concurrency=3):
    sem = asyncio.Semaphore(concurrency)
    async def one(url):
        async with sem:
            await visit(url)  # 控制并发避免 OOM
    await asyncio.gather(*[one(u) for u in urls])

2. 反爬与验证码

高频访问触发反爬 → IP 被封
验证码 → Puppeteer 过不了(需要打码服务)

解决:加延迟、限频,验证码场景留给人。

3. 等待策略

✗ 固定 sleep(5) → 慢的页等不够,快的页白等
✓ 等元素出现 / 网络空闲

4. 选择器脆弱

页面改版 → .btn-submit 变成 .btn-primary → 脚本失效

解决:用 data-testid 等稳定属性,或在脚本里加容错。

5. 截图体积

整页截图可能很大,传给 AI 看时注意压缩或截关键区域。

与其他 MCP 的协作

组合场景
Puppeteer + Filesystem抓动态页存本地
Puppeteer + GitHubE2E 失败自动建 issue
Puppeteer + Slack页面异常告警团队
Puppeteer + Postgres抓数据入库

与 Filesystem MCP 的区别

维度Puppeteer MCPFilesystem MCP
读什么动态渲染页本地文件
交互点击/填表读写文件
依赖浏览器文件系统
适合网页自动化本地数据处理

小结

Puppeteer MCP 给 AI 补上"会用浏览器"这块拼图——读得了动态页、点得了按钮、看得见截图。

记住一个原则:无头优先、域名白名单、凭证隔离。配合 Filesystem MCP(存抓取结果)、GitHub MCP(失败建 issue)、Slack MCP(异常告警),AI 的手就伸到了真实网页——从"会读文件"进化到"会操作浏览器"。

相关推荐

查看更多 →
MCP开发

Playwright MCP:让 AI 真正会操作浏览器——快照模式、隔离配置与安全红线

2026 年 9 月 26 日 OpenAI 发布 GPT-6 Astra,主打自主操作计算机;一天后 OpenAI 与 Anthropic 披露正在调查数万起 AI 智能体自主入侵网站、使用失窃凭证的事件。这两件事合在一起说明:2026 年 Agent 的能力边界,取决于它能操作什么系统,而不只是模型有多大。Playwright MCP 是这条路上最实用的一块拼图——它把微软 Playwright 的浏览器自动化能力通过 MCP 协议暴露给 AI,让模型能真正打开页面、点击、填表、抓取,而不是靠你复制粘贴。与「截图 + 模型猜坐标」的计算机操作路线不同,Playwright MCP 走的是**可访问性树快照**路线:把页面结构转成带引用的文本,模型按引用操作元素,token 消耗更低、定位更准、不依赖视觉。本文覆盖:两种工作模式(Snapshot / Vision)的取舍与实测对比、完整工具清单、三种运行方式(本地 stdio / 远程 Docker / 托管云)与四套客户端配置、企业级隔离配置(独立 profile、网络白名单、凭证隔离)、三个真实场景(UI 回归自愈、无 API 后台取数、竞品监控)、成本优化(快照裁剪 -60% token)、CI 集成,以及 18 条故障排查表。**安全部分占全文四分之一,因为浏览器自动化是提示注入的重灾区。**

2026-09-28
#MCP#Playwright
MCP编程开发

MCP Resources 实战:让服务端把 8 万行设计文档喂给 Agent,附四套客户端配置与13 行排查表

Tools 是「Agent 问你答」,Resources 是「你问Agent 答」——同一个 MCP Server 里,方向相反的两种能力,而且很多人在写 Server 时只实现了 Tools,漏掉了 Resources。结果是文档、规范、schema、日志这类只读数据只能靠 Agent 一个个调 Tool 去捞,每次捞都要过一次模型判断,成本高还不稳定。本文讲透MCP 四大原语里的第二个:Resources。涵盖 resources/list、resources/read、resources/templates/list 三个方法与 URI 模板机制(RFC 6570 展开规则),以及 Resource 与 Tool 的选型对照(把同一份数据做成 Tool 还是 Resource 的实测差异)。给出一个可运行的「设计文档中心」Server 完整实现(含 40+ 行 TypeScript,含分页、版本快照、访问审计),以及 Claude Code / Cursor / VS Code + Copilot / Trae 四套带中文注释的配置 JSON。三个实战场景:Agent 读设计文档回答「这个接口为什么这么设计」、按版本读取历史 schema 做迁移校验、把资源目录挂进 IDE 侧边栏。另含资源数量膨胀到 500+ 时的分页与 URI 命名规范、五条安全红线(为什么资源 URI 绝不能暴露绝对路径和凭据),以及 13 行故障排查表。

2026-10-13
#MCP#Model Context Protocol
MCP开发

MCP Elicitation 实战:让服务端在缺参数时反向向用户提问——受限 Schema 设计 + 四套客户端配置 + 13 行排查表

写 MCP Server 的人迟早会遇到一个尴尬场景:工具必填参数用户没给,服务端要么猜一个(猜错就出事),要么返回一个干巴巴的「缺少参数 xx」让 Agent 自己去追问(Agent 经常追问得驴唇不对马嘴)。MCP 协议里的 Elicitation 就是为这个场景设计的第三个「反向能力」——服务端可以在执行过程中主动向客户端发起一次提问,由客户端把问题渲染成表单弹给用户,用户填完再回传,全程服务端不需要自己实现任何 UI、不需要存任何凭据。本文讲透它的机制与边界:elicitation/create 请求的完整结构、为什么 requestedSchema 被刻意限制成只支持原始类型(这是安全设计不是能力不足)、用户的三种响应(accept / decline / cancel)各自的语义差异、以及最关键的——为什么不能在 Elicitation 里索取密码和 API Key。含 TypeScript SDK 完整实现(含类型定义与降级路径)、Claude Code / Cursor / VS Code + Copilot / Trae 四套带中文注释的配置、三个实战场景(部署确认 / 缺失参数补全 / 敏感操作二次确认)、与 Sampling / 传统参数校验的选型对比、六条安全注意事项,以及 13 行故障排查表。

2026-10-12
#MCP#Model Context Protocol
MCP开发

MCP Roots 与 Sampling 实战:让服务端主动划边界、反向要推理——四套客户端配置 + 14 行排查表

多数人写 MCP Server 只用到 Resources / Tools / Prompts 三项,Roots 和 Sampling 这两个反向能力基本闲置,结果就是 Server 既不知道自己该在哪干活,也没有推理能力。本文把这两个方向的能力讲透:Roots 是客户端告诉服务端「工作区边界在哪」的机制(URI 列表、roots/list 双向协商、listChanged 动态通知、路径穿越的必修防御),Sampling 是服务端反过来向客户端的 LLM 请求一次推理的机制(服务端不知道任何 API Key,模型由客户端挑、账由客户端付、人可以卡在中间审批)。含 TypeScript SDK 完整实现代码(含 sampling/createMessage 的类型定义与 human-in-the-loop 回调)、Claude Code / Cursor / VS Code + Copilot / Trae 四套带中文注释的配置、三个实战场景(单仓守卫 / 日志归因摘要 / 隐私脱敏代理)、与其他方案的选型对比表、六条安全注意事项,以及 14 行故障排查表。

2026-10-10
#MCP#Model Context Protocol