PageLens
MCP服务器,为AI编码代理提供前端应用程序的视觉反馈。一个命令,无需配置——你的AI代理现在可以看到你的应用程序、点击按钮、读取控制台错误和差异视觉变化。
npx pagelens http://localhost:3000问题
当使用AI编码代理(Claude Code、Cursor、Windsurf)进行前端开发时,代理是盲目的。它可以编辑代码,但看不到应用程序的样子。这会产生一个痛苦的手动循环:
- 代理进行代码更改
- 你看浏览器
- 您可以用文字描述视觉问题,或截图并拖动到聊天中
- 您手动复制控制台错误
- 每次会话重复数十次
PageLens完全消除了这种循环。
运作原理
Your app (localhost:3000)
|
Headless Chrome (Puppeteer)
|
PageLens MCP Server
|
Claude Code / Cursor / WindsurfPageLens启动一个指向您的开发服务器的无头浏览器,被动收集控制台日志和网络错误,并公开任何兼容MCP的AI代理都可以调用的工具——屏幕截图、点击、打字、DOM检查、视觉差异——而无需您手动执行任何操作。
为什么PageLens胜过剧作家MCP/浏览器MCP?
通用浏览器自动化MCP公开了低级原语——你会得到 evaluate JavaScript, take screenshot, click element 作为单独的、断开连接的动作。PageLens是专门为AI前端开发循环构建的,它以重要的方式改变了设计:
| PageLens | 通用浏览器MCP | |
|---|---|---|
| 设置 | npx pagelens --零配置 | 需要浏览器启动管理、连接处理 |
| 控制台/网络错误 | 在后台被动收集。代理人随时都会检查。 | 代理必须主动轮询或设置侦听器。工具调用之间的错误丢失。 |
| 互动反馈 | 每一个 click, type, navigate 自动返回屏幕截图 | 代理必须记住在每次操作后进行屏幕截图 |
| 视觉回归 | 内置 visual_diff --基线捕获、像素比较、差异图像、变化百分比 | 不可用。代理需要手动截图、存储、比较。 |
| 视觉质量审查 | visual_audit 返回一个结构化的检查表,提示代理批判性地评估布局、对比度、内容准确性 | 没有等效项。代理人往往在没有指导的情况下,表面上确认“看起来不错”。 |
| 现场调试 | toggle_headless 打开Chrome浏览器并实时查看代理程序的工作情况 | 通常仅支持无头模式或需要重新启动 |
| 多路径审计 | multi_route_screenshot 在一次通话中捕获多个页面 | 客服必须单独导航和截图每条路线 |
PageLens并不试图成为一个通用的浏览器自动化框架。它只做一件事——让你的AI编码代理关注你的前端——并从循环中删除每一个手动步骤。
快速开始
1.启动您的开发服务器
npm run dev
# App running at http://localhost:51732.将PageLens添加到MCP配置中
注: PageLens还没有在npm上。看 发展 部分从源代码安装,然后使用下面的配置和本地路径。
克劳德代码 (.mcp.json 在项目根目录中):
{
"mcpServers": {
"pagelens": {
"command": "node",
"args": ["/path/to/PageLens/dist/index.js", "http://localhost:5173"]
}
}
}光标 (.cursor/mcp.json):
{
"mcpServers": {
"pagelens": {
"command": "node",
"args": ["/path/to/PageLens/dist/index.js", "http://localhost:5173"]
}
}
}3.启动您的代理
就是这样。代理现在可以访问所有PageLens工具。让它“截取我的应用程序的屏幕截图”或“检查控制台错误”,它就可以正常工作了。
工具
观察
| 工具 | 说明 |
|---|---|
screenshot | 将当前页面捕获为PNG格式。可选的 route 为了首先导航, fullPage 对于整个可滚动页面。 |
screenshot_element | 通过CSS选择器对特定DOM元素进行截图。 |
console_logs | 返回自上次调用以来的所有控制台输出(日志、警告、错误)。返回后清除缓冲区。 |
network_errors | 返回自上次调用以来所有失败的网络请求。返回后清除缓冲区。 |
visual_audit | 带有指导性检查表的屏幕截图促使代理批判性地评估内容的准确性、布局、对比度和抛光度,而不仅仅是确认呈现的内容。 |
交互
| 工具 | 说明 |
|---|---|
click | 按选择器单击元素。点击后返回屏幕截图。 |
type | 在输入框中键入文本。可选的 clear 以替换现有内容。返回屏幕截图。 |
scroll | 按给定的像素数向上/向下滚动页面或特定元素。返回屏幕截图。 |
hover | 通过选择器将鼠标悬停在元素上,以触发工具提示、下拉菜单或悬停样式。返回屏幕截图。 |
select | 从以下选项中选择一个 `` 按值下拉。返回屏幕截图。 |
navigate | 转到URL或路径。返回新页面的屏幕截图。 |
set_viewport | 调整到预设大小(mobile 375x812, tablet 768×1024, desktop 1280x720)或定制 width/height。返回屏幕截图。 |
dom_inspect | 获取元素的计算样式、类、子元素和边界框。 |
get_page_info | 返回当前URL、页面标题、视口大小、滚动位置和文档尺寸。 |
困难
| 工具 | 说明 |
|---|---|
visual_diff | 将当前页面与存储的基线进行比较。第一次调用捕获基线,后续调用返回一个差异图像,突出显示更改的像素和百分比摘要。 |
multi_route_screenshot | 一次通话中多条路线的截图。返回每条路线的标记图像。 |
调试
| 工具 | 说明 |
|---|---|
toggle_headless | 在无头浏览器和可见浏览器之间切换。当可见时,会出现一个Chrome窗口,以便您可以实时观看代理与您的应用程序的交互。 |
CLI选项
pagelens [options]
Options:
--no-headless Show the browser window
--viewport
Initial viewport: mobile | tablet | desktop (default: desktop)
-h, --help Show help建筑
src/
├── index.ts # CLI entry point, arg parsing
├── server.ts # MCP server, tool registration
├── browser.ts # Puppeteer lifecycle, passive log/error collection
├── tools/
│ ├── screenshot.ts # screenshot, screenshot_element, multi_route_screenshot
│ ├── console.ts # console_logs, network_errors
│ ├── interact.ts # click, type, navigate, set_viewport
│ ├── inspect.ts # dom_inspect
│ └── diff.ts # visual_diff
└── utils/
└── viewport-presets.ts关键设计决策:
- 延迟连接 --MCP服务器立即启动。导航到您的应用程序发生在第一次工具调用时,因此如果您的开发服务器尚未运行,PageLens永远不会崩溃。
- 被动收集 --从浏览器启动的那一刻起,控制台日志和网络错误就被捕获在环形缓冲区中。代理会在它想要的时候进行检查,而不是在事件发生的时候。
- 每次互动后的截图 —
click,type,navigate,以及set_viewport所有这些都会返回一个屏幕截图,这样代理就可以始终看到它所做操作的结果。 - 基线存储 --视觉差异基线按路线存储在内存中。不需要文件系统设置。
发展
git clone https://github.com/amoghmanral/pagelens.git
cd pagelens
npm install
npm run build使用Claude Code进行本地测试:
claude mcp add pagelens -- node /path/to/PageLens/dist/index.js http://localhost:3000技术栈
- TypeScript --类型安全工具处理程序和MCP集成
- 操纵者 --无头Chrome自动化(捆绑Chromium)
- @模型上下文协议/sdk --官方MCP服务器SDK
- 像素匹配 + pngjs --用于视觉差异的像素级图像比较
许可证
麻省理工学院

