# Playwright MCP 找不到 Chrome 的绕行

> **日期**: 2026-04-14
> **场景**: 在没有系统 Chrome 的机器上用 Playwright MCP 跑 E2E
> **错误码**: [ERR-20260414-001]

## 问题

调用 `browser_navigate` 立即报错：
```
Chromium distribution 'chrome' is not found at /opt/google/chrome/chrome
```

- `@playwright/mcp@0.0.70` 默认 `--browser chrome`，即 chrome channel
- Playwright 在 Linux 按硬编码路径搜索系统 Chrome：`/opt/google/chrome/chrome`、`/usr/bin/google-chrome` 等
- 本机没装系统 Chrome
- Playwright 自带的 chromium 已通过 `npx playwright install chromium` 下载到 `~/.cache/ms-playwright/chromium-1217/chrome-linux64/chrome`，但 MCP 默认走 chrome channel，不会用它
- `/opt` 是 root 所有，用户态做不了符号链接
- MCP server 进程一旦启动就锁定 CLI 参数，会话内无法重启

## 解决方案（无 sudo）

编辑 `~/.claude/plugins/cache/claude-plugins-official/playwright/unknown/.mcp.json`，加 `--executable-path`：

```json
{
  "playwright": {
    "command": "npx",
    "args": [
      "@playwright/mcp@latest",
      "--executable-path",
      "/home/chentao/.cache/ms-playwright/chromium-1217/chrome-linux64/chrome"
    ]
  }
}
```

然后 **退出 Claude Code 再重启**（或 `/mcp` 重载，如可用）。`.mcp.json` 只在 MCP server 启动时读取一次。

**注意**：`--browser` 选项只支持 `chrome|firefox|webkit|msedge`，**没有 `chromium`**。不能改 `--browser` 为 chromium。`--executable-path` 配合默认的 `--browser chrome` 绕过 channel 路径查找。

## 验证

重启后 `browser_navigate` 正常工作，Playwright chromium 1217 被加载，robot-manager L2 E2E 完整跑通 8 个流程。

## 通用原则

Playwright MCP 的浏览器查找是在 MCP server 启动时由 CLI 参数决定，运行时无法修改。任何改动都要求：
1. 改 `.mcp.json`
2. 重启 Claude Code
3. 不需要 sudo

如果 chromium 二进制路径变化（例如 playwright 升级后 `chromium-1217` 变 `chromium-1220`），也要同步更新 `.mcp.json`。更鲁棒的做法是用 glob：但 MCP args 不支持 glob，只能手动同步，或者写一个 shim 脚本在 args 里执行 shim：

```json
"args": ["@playwright/mcp@latest", "--executable-path", "/home/chentao/bin/playwright-chromium"]
```
然后 `~/bin/playwright-chromium` 是：
```bash
#!/bin/bash
exec "$(ls -d ~/.cache/ms-playwright/chromium-*/chrome-linux64/chrome | sort -V | tail -1)" "$@"
```
