npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

playwriter-browser-mcp

v0.1.4

Published

MCP server bridging Playwriter's Chrome extension with Playwright-style structured tools for VisionClaw

Readme

Playwriter Browser MCP

一个独立的 MCP (Model Context Protocol) 服务,通过 Playwriter Chrome 扩展连接用户的真实浏览器,提供 37 个结构化浏览器自动化工具

对于任意 Agent 来说,只需添加一个 MCP 配置,就能操控用户真实的 Chrome 浏览器(带完整登录态)—— 无需 --remote-debugging-port,不受 Chrome 136+ 安全限制。

为什么需要这个项目

| 方案 | 能用真实 Profile | 结构化工具 | 不需要调试端口 | |------|:-:|:-:|:-:| | Playwright MCP (@playwright/mcp) | ❌ | ✅ 38 个工具 | ❌ | | Playwriter | ✅ | ❌ 仅 1 个 execute | ✅ | | Browser MCP (本项目) | | ✅ 37 个工具 | |

Browser MCP = Playwriter 的连接方式 + Playwright MCP 的工具生态。

架构

AI Agent (Claude Code / VisionClaw / ...)
   │ MCP Protocol (HTTP / SSE)
   ▼
┌──────────────────────────────────┐
│  Browser MCP Server (port 3280)  │
│                                  │
│  37 个结构化工具:                 │
│  ├── browser_navigate            │
│  ├── browser_snapshot            │
│  ├── browser_click               │
│  ├── browser_type                │
│  ├── browser_take_screenshot     │
│  ├── ... (共 37 个)              │
│                                  │
│  连接层:                          │
│  Playwriter API → connectOverCDP │
└──────────────┬───────────────────┘
               │ WebSocket
               ▼
┌──────────────────────────────────┐
│  Playwriter Relay (port 19988)   │
│  (已有的 relay 或自动启动)        │
└──────────────┬───────────────────┘
               │ chrome.debugger API
               ▼
┌──────────────────────────────────┐
│  Chrome 浏览器 (用户真实 Profile) │
│  ├── 已登录的网站                 │
│  ├── Cookies / Sessions          │
│  └── Playwriter 扩展 (已安装)    │
└──────────────────────────────────┘

快速开始

前置条件

  1. Chrome 浏览器 — 安装 Playwriter 扩展
  2. Node.js >= 18
  3. Playwriter CLInpm install -g playwriter

启动

# 1. 安装依赖
npm install

# 2. 配置环境变量(可选)
cp .env.example .env

# 3. 启动
npm run dev

服务启动后,MCP 端点在 http://localhost:3280/mcp

多 Profile 场景

如果 Chrome 登录了多个 Google 账号,需要指定连接哪个:

# 查看可用的 Profile
playwriter browser list

# 指定 Profile 启动
PLAYWRITER_EXTENSION_ID="profile:104623951740642372686" npm run dev

MCP 工具列表 (37 个)

导航

| 工具 | 说明 | |------|------| | browser_navigate | 导航到 URL,返回页面快照 | | browser_navigate_back | 返回上一页 |

快照与截图

| 工具 | 说明 | |------|------| | browser_snapshot | 获取页面 accessibility tree(带 [ref] 标记,用于后续交互) | | browser_take_screenshot | 截图(支持 png/jpeg、全页、指定元素) |

输入操作

| 工具 | 说明 | |------|------| | browser_click | 点击元素(通过 ref 定位) | | browser_type | 向元素输入文本 | | browser_press_key | 按下键盘按键(Enter、Tab、Escape 等) | | browser_hover | 鼠标悬停在元素上 | | browser_drag | 拖拽元素到目标 | | browser_select_option | 在下拉框中选择选项 | | browser_fill_form | 批量填写表单(文本框、复选框、单选按钮) |

页面管理

| 工具 | 说明 | |------|------| | browser_tabs | 标签页管理(list / new / close / select) | | browser_close | 关闭当前页面 | | browser_wait_for | 等待文本出现/消失或指定时间 | | browser_resize | 调整浏览器窗口大小 |

代码执行

| 工具 | 说明 | |------|------| | browser_evaluate | 在页面中执行 JavaScript | | browser_run_code | 运行 Playwright 代码片段 |

观测

| 工具 | 说明 | |------|------| | browser_console_messages | 获取控制台日志 | | browser_network_requests | 获取网络请求列表 |

文件与对话框

| 工具 | 说明 | |------|------| | browser_file_upload | 上传文件到 file input | | browser_handle_dialog | 处理 alert/confirm/prompt 弹窗 |

Vision(坐标操作)

| 工具 | 说明 | |------|------| | browser_mouse_move_xy | 移动鼠标到坐标 | | browser_mouse_click_xy | 在坐标处点击 | | browser_mouse_drag_xy | 从坐标 A 拖拽到坐标 B | | browser_mouse_down | 按下鼠标按键 | | browser_mouse_up | 释放鼠标按键 | | browser_mouse_wheel | 滚动鼠标滚轮 |

测试验证

| 工具 | 说明 | |------|------| | browser_generate_locator | 生成 Playwright locator(用于编写测试) | | browser_verify_text_visible | 验证文本在页面上可见 | | browser_verify_element_visible | 验证元素可见 | | browser_verify_list_visible | 验证列表包含指定项 | | browser_verify_value | 验证元素的值 |

PDF 与追踪

| 工具 | 说明 | |------|------| | browser_pdf_save | 将页面保存为 PDF | | browser_start_tracing | 开始录制 Playwright trace | | browser_stop_tracing | 停止录制并保存 trace 文件 |

其他

| 工具 | 说明 | |------|------| | browser_install | 安装 Chromium 浏览器二进制文件 | | browser_session | 诊断工具:检查连接状态(无需主动调用,连接是自动的) |

接入方式

作为 HTTP MCP Server

{
  "mcpServers": {
    "browser": {
      "type": "http",
      "url": "http://localhost:3280/mcp"
    }
  }
}

接入 VisionClaw

在 VisionClaw 的 mcp-servers.json 中添加上述配置即可。Agent 无需任何额外操作,直接调用 browser_navigate 等工具,连接会自动建立。

工作流程示例

AI 使用这套工具的典型流程:

1. browser_navigate({ url: "https://x.com" })
   → 自动连接浏览器,导航到 X,返回页面快照

2. browser_snapshot()
   → 获取 accessibility tree,包含 [ref] 标记

3. browser_click({ ref: "compose-btn" })
   → 点击发帖按钮

4. browser_type({ ref: "tweet-input", text: "Hello World!" })
   → 输入帖子内容

5. browser_click({ ref: "post-btn" })
   → 发布

无需手动连接、创建 session、选择 tab —— 一切自动完成。

环境变量

| 变量 | 默认值 | 说明 | |------|--------|------| | MCP_PORT | 3280 | MCP HTTP 服务端口 | | PLAYWRITER_RELAY_PORT | 19988 | Playwriter WebSocket relay 端口 | | PLAYWRITER_RELAY_HOST | 127.0.0.1 | Relay 地址 | | PLAYWRITER_EXTENSION_ID | (自动检测) | 多 Profile 时指定连接哪个扩展 | | OUTPUT_DIR | ./output | 截图、PDF、trace 文件输出目录 |

技术原理

传统方案需要 --remote-debugging-port 来让程序操控浏览器,但 Chrome 136+ 禁止在默认 Profile 上使用该参数。

本项目利用 Playwriter 的 Chrome 扩展,通过 chrome.debugger API 从浏览器内部获取 CDP 访问权限,再通过 WebSocket relay 转发给 Playwright。这样:

  • ✅ 不需要 --remote-debugging-port
  • ✅ 可以使用用户的真实 Chrome Profile(带登录态)
  • ✅ 暴露 37 个结构化 MCP 工具(与 Playwright MCP 对齐)
  • ✅ 连接自动建立,无需手动操作

开发

npm install          # 安装依赖
npm run dev          # 开发模式启动
npm run build        # 编译 TypeScript
npm run lint         # 类型检查
npm test             # 运行测试