<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Hacder</title>
        <link>https://hacder.com</link>
        <description>Hacder's blog</description>
        <lastBuildDate>Mon, 29 Sep 2025 08:56:34 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Hacder</title>
            <url>https://hacder.com/favicon.ico</url>
            <link>https://hacder.com</link>
        </image>
        <copyright>All rights reserved Hacder 2025</copyright>
        <item>
            <title><![CDATA[尝试Chrome DevTools MCP集成：从踩坑到成功的Node.js版本兼容性解决方案]]></title>
            <link>https://hacder.com/blogs/cursor-chrome-devtools-mcp-integration-guide</link>
            <guid>https://hacder.com/blogs/cursor-chrome-devtools-mcp-integration-guide</guid>
            <pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[记录一次Cursor与chrome-devtools-mcp集成过程中，Node.js版本兼容性问题及解决方案，让AI能够直接"看到"并"操作"网页进行自动化调试.]]></description>
            <content:encoded><![CDATA[
今天刷技术文章的时候，在[MCP中文站](https://mcpcn.com/blog/chrome-devtools-mcp-ai-debugging/)看到一篇关于Chrome DevTools MCP的深度解析。
Google Chrome团队发布了这个基于Model Context Protocol的工具，核心功能是让AI编程助手能够直接"看见"代码在浏览器中的实际执行效果。

对于AI辅助开发来说，这确实解决了一个痛点问题，不免大喜。
传统的AI编程工具在生成前端代码后，无法直接验证页面效果，开发者需要手动切换到浏览器查看结果，然后再反馈给AI进行调整。
如果AI能够直接获取浏览器的视觉反馈，那整个开发流程应该将会更加高效。

决定尝试配置一下。不过在实际操作过程中，遇到了一些环境兼容性问题。记录一下配置过程和解决方案。

## 初始配置

根据文档说明，需要在Cursor的配置文件中添加MCP服务器配置。配置方式相对简单：

```json
{
  "mcpServers": {
    "chrome-devtools": {
      "command": "npx",
      "args": ["chrome-devtools-mcp@latest"]
    }
  }
}
```

配置逻辑是当Cursor需要chrome-devtools服务时，自动执行`npx chrome-devtools-mcp@latest`命令启动MCP服务器。

配置完成后重启Cursor，发现chrome-devtools功能显示为"不可用"状态。为了排查问题，先在终端手动验证命令是否正常：

```bash
%  npx chrome-devtools-mcp@latest

SyntaxError: Named export 'AgentFocus' not found. 
The requested module '.../AIContext.js' is a CommonJS module, which may not support all module.exports as named exports.
...
Node.js v21.6.1
```

错误信息显示这是ES Module与CommonJS模块系统的兼容性问题。当前使用的Node.js版本是v21.6.1，属于较新的非LTS版本。

**问题分析：** 开源工具通常主要在LTS版本上进行兼容性测试，而较新的Node.js版本可能存在模块系统方面的兼容性问题。

## 工作原理说明

在解决版本问题之前，需要理解chrome-devtools-mcp的工作机制。当命令成功执行后，程序会持续运行而不是立即结束。

这是因为chrome-devtools-mcp是一个常驻服务，类似于其他后台服务，它需要持续运行来维持Cursor与Chrome浏览器之间的通信连接。

正确的使用流程：
1. **启动MCP服务** - 在终端中持续运行chrome-devtools-mcp
2. **启动Chrome调试模式** - 使用特定参数启动Chrome浏览器
3. **建立连接** - Cursor通过MCP协议与Chrome建立通信

从技术架构来看，Chrome DevTools MCP基于以下组件：

- **Puppeteer** - Google官方的浏览器自动化库
- **Chrome DevTools Protocol** - Chrome浏览器的调试接口
- **MCP协议** - Model Context Protocol，AI工具集成标准

这种基于成熟组件的架构设计，确保了工具的稳定性和可靠性。

## 版本兼容性解决

针对Node.js版本兼容性问题，解决方案是切换到LTS版本。使用nvm将Node.js版本切换到v20.19.5：

```bash
# 切换到LTS版本
% nvm use v20.19.5

# 再次尝试手动运行服务
% npx chrome-devtools-mcp@latest
```

切换版本后重新执行命令，MCP服务成功启动，没有出现模块兼容性错误。

按照标准流程启动Chrome浏览器，需要添加调试端口参数：

```bash
#!/bin/bash
# 我的启动脚本: /opt/sh/chrome.sh
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
  --user-data-dir="/Users/hacder/Library/Application Support/Google/Chrome" \
  --remote-debugging-port=9222
```

此时查看Cursor，chrome-devtools功能显示为可用状态。

![Cursor中Chrome DevTools功能启用状态](/images/cursor-chrome-devtools-status-enabled.png)

## 环境隔离问题

手动操作验证成功后，重新测试Cursor的自动配置，发现功能又变成"不可用"状态。

**问题分析：** 手动执行命令成功，但Cursor自动执行失败，这表明存在环境隔离问题。

具体原因是终端环境与GUI应用环境的隔离：

- **终端环境**：`nvm use v20.19.5`只影响当前终端会话的Node版本
- **GUI应用环境**：Cursor启动时读取系统默认环境，不受终端会话影响

通过`nvm list`命令可以确认：
```bash
%  nvm list
       v20.19.5
->      v21.6.1
default -> node (-> v21.6.1)
...
lts/iron -> v20.19.5
```

系统默认版本仍然指向v21.6.1，这就是Cursor使用的版本。

**解决方案：** 修改nvm的全局默认版本：

```bash
# 设置LTS版本为默认版本
% nvm alias default lts/iron
```
或者直接用版本号：

```bash
nvm alias default v20.19.5
```

* 验证 *

% node -v
v20.19.5
% nvm list
->     v20.19.5
        v21.6.1
default -> v20.19.5
iojs -> N/A (default)

执行完成后需要重启Cursor，使新的环境变量生效。

## 功能验证

重启Cursor后，chrome-devtools功能正常可用，显示为绿色状态。

此时只需要启动Chrome调试脚本，AI就能够通过MCP协议直接与浏览器进行交互。

![AI与浏览器的无缝交互](/images/cursor-chrome-devtools-ai-interaction.png)

AI可以接收自然语言指令，如"检查页面加载性能"或"分析按钮点击无响应的原因"。AI会自动调用相应的工具函数，包括`navigate_page`、`take_screenshot`、`evaluate_script`等，执行相应的浏览器操作。

![Cursor中显示的AI调试工具调用日志](/images/cursor-chrome-devtools-logs.png)

例如，在检查页面样式问题时，AI能够快速定位并分析问题原因：

![AI调试后发现的具体问题](/images/cursor-chrome-devtools-debugging-result.png)

## 使用效果

通过一段时间的使用，Chrome DevTools MCP在以下方面显著改善了开发体验：

**开发效率提升**：传统的CSS调试需要在浏览器开发者工具中手动调整，然后回到编辑器修改代码。现在可以直接向AI描述需求，由AI自动完成整个调试过程。

**调试能力增强**：AI不仅能够查看页面效果，还可以进行性能分析、错误检查、用户行为模拟等多维度的测试工作。

**学习门槛降低**：对于前端开发新手，AI的实时指导和自动化操作能够帮助快速掌握调试技巧和最佳实践。

## 问题总结

在配置过程中遇到的主要问题及解决方案：

**Node.js版本兼容性**：新版本Node.js可能存在模块系统兼容性问题，建议使用LTS版本。开源工具通常优先在LTS版本上进行测试和优化。

**服务运行机制理解**：chrome-devtools-mcp是常驻服务而非一次性安装工具。需要持续运行以维持通信连接。

**环境隔离问题**：终端会话的环境变量不会影响GUI应用。需要修改全局默认设置才能影响Cursor等图形界面程序。

**问题排查流程**：建议按照手动验证→环境检查→配置调整→应用重启的顺序进行问题排查。

配置成功后，Chrome DevTools MCP为AI辅助开发提供了强大的浏览器调试能力。
建议在配置前先了解相关技术原理，可以参考[MCP中文站的技术文档](https://mcpcn.com/blog/chrome-devtools-mcp-ai-debugging/)。


]]></content:encoded>
            <author>i@hacder.com (Hacder)</author>
        </item>
        <item>
            <title><![CDATA[修复 Google Analytics 缺少权限无法访问账户的错误]]></title>
            <link>https://hacder.com/blogs/google-analytics-missing-permissions</link>
            <guid>https://hacder.com/blogs/google-analytics-missing-permissions</guid>
            <pubDate>Thu, 19 Dec 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[解决 Google Analytics 突然提示没有权限访问的问题]]></description>
            <content:encoded><![CDATA[
使用 Google Analytics（谷歌分析）有好几年了。这几天访问的时候，突然提示"missing permissions You do not have access to the account or property. Contact an Analytics administrator who has the Manage Users permission."。同时，在左下角还闪现了"Page not found"的提示。

> Missing Permissions
>
> You do not have access to the account, property, or view. Contact an Analytics administrator who has the Manage Users permission.

![Google Analytics 权限错误截图](/images/google-analytics-missing-permissions.png)


这个确实比较神奇，因为我是该账户的唯一管理员。而且一个小时前都还好好的，突然就访问不了了。🤔

## 为什么会出现这个错误？

经过一番研究，查了 Google 的帮助文档、论坛和 Reddit，发现众说纷纭：
- 有人说是账号问题
- 有人说是 cookie 问题
- 还有人说是访问地址问题，因为他都是通过书签去访问。

为此我还特意清理了 Google 的 cookie，但是依然解决不了问题。

后来发现有位老哥的症状跟我特别类似，他是因为之前删除了 第一个 Analytics 资产。这一下点醒了我 ： 我刚刚确实删除了一个 Analytics 的 Property（因为发现有重复的Property）。不过刚刚删除的不是第一个，也不知道为什么会触发这个问题。

看来问题找到了：当删除资产后，Google Analytics 不知道为什么无法自动切换到下一个资产，就会抛出这个"缺少权限"的错误。

## 如何修复这个权限错误？

1. 打开一个无缓存和 cookie 的隐身/私密浏览器窗口（或者清理浏览器缓存和cookie）
2. [访问这个 Google 支持页面](https://support.google.com/analytics/answer/6132368?sjid=14850073660619333886-NA)
3. 复制页面中提到的"Admin"链接，或者直接使用这个链接：
   https://analytics.google.com/analytics/web/#/?pagename=admin
4. 在新窗口中打开该链接，用你的 Google 账号登录（就是平时用的那个账号），然后添加一个 Property。

## 后续处理

谢天谢地，刷新页面后，终于可以进入管理界面了。可以正常访问 Google Analytics 了！ 🎉

不过这里有几点小建议：

1. 建议把那个特殊的管理链接保存到书签，以防万一
2. 如果想要通过正常方式登录 Google Analytics，记得先清除浏览器缓存和 cookie
3. 你也可以把当前正在使用的资产链接保存为书签，这样下次可以直接访问
]]></content:encoded>
            <author>i@hacder.com (Hacder)</author>
        </item>
    </channel>
</rss>