在 Xiaomi MiMo Desktop 上安装与配置 Playwright MCP

记录一次真实配置过程:从插件页安装 Playwright MCP,到修通 spawn npx ENOENT,最终稳定使用 本机 Edge + 无头(headless)+ 隔离 profile 做页面自动化测试。
适用环境:Windows 10/11 · Xiaomi MiMo Desktop · 已安装 Microsoft Edge


1. 背景与目标

希望 MiMo Desktop 中的 agent 能:

  1. 打开本地 HTML 页面(如计算器 index.html
  2. 点击、输入、执行 JS
  3. 截图并汇报结果

约束(全程遵守):

约束 说明
不随便装软件 不为了跑通去 playwright install 下载 Chromium
用已有浏览器 固定本机 Microsoft Edge
不碰日常浏览器数据 使用 isolated 临时 profile,禁止指向真实 User Data
默认无头 headless,不弹窗、不抢标签页;只在明确需要时才考虑有头
走官方 MCP 使用已安装的 Playwright MCPbrowser_* 工具,不另写旁路脚本作为主路径

2. 安装:Plugins 页安装 Playwright MCP

在 MiMo Desktop 中:

  1. 打开 Plugins / 插件 页面
  2. 在精选里找到 Playwright MCP
  3. 点击 安装

安装后,插件会把一条 MCP 配置写入全局配置文件(通常为 mimocode.jsoncmcp 段)。
也可在 Settings → MCP 中查看是否启用。

配置修改后需要:

  • 重启引擎,或
  • 新开会话

才会重新拉起 MCP server。仅新开对话、不重启进程时,有时仍会沿用失败的启动结果——若一直没工具,优先完整重启 Desktop。


3. 配置文件位置

全局配置(优先使用):

C:\Users\<你的用户名>\.config\mimocode\mimocode.jsonc

只改顶层 mcp 段,不要动 providerapiKey 等无关字段。

本地(stdio)server 形态示意:

{
  "mcp": {
    "playwright-mcp:playwright": {
      "type": "local",
      "command": [ /* 可执行文件 + 参数,写在一个数组里 */ ],
      "enabled": true
    }
  }
}

说明:MiMo 的 local MCP 是 command 一整层数组(不是某些 harness 里 command / args 分离的写法)。


4. 关键参数:为什么这样配

4.1 用 Edge,跳过 Chrome for Testing

Playwright 默认可能尝试下载 Chrome for Testing。在网络不佳时会出现 ECONNRESET 等失败。
即使加了 --browser msedge,部分版本仍可能先去找默认 Chrome。

稳妥做法:用 --executable-path 直接指定本机 Edge:

--executable-path
C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe

并同时保留:

--browser
msedge

4.2 无头(保持你当前的选择)

--headless
  • 不弹出可见浏览器窗口
  • 更安静,适合后台跑测试、只收截图
  • 工具参数里一般没有「有头/无头」开关,模式由 MCP 启动参数 决定

若以后想「看得见操作」,只需去掉该参数并重启;当前方案按需求 保持无头

4.3 隔离,不碰真实浏览器数据

--isolated
  • profile 在内存中,不落盘到你日常 Chrome/Edge 的用户目录
  • 不读取 书签、密码、已登录 Cookie、扩展
  • 禁止 配置指向真实浏览器 User Data 的 --user-data-dir

页面内容(DOM/截图)仍会作为工具结果进入模型上下文——敏感站点请用测试账号。

4.4 允许打开本地 file 页面

--allow-unrestricted-file-access

否则 MCP 可能默认限制 file:// 导航,打不开本地 index.html

4.5 可选

--viewport-size 1280x720

固定视口,截图尺寸更稳定。


5. 曾经踩过的坑

坑 1:spawn npx ENOENT(最常见)

现象: 新会话里没有 browser_navigate 等工具;agent 回复「MCP 未加载」。

日志特征~/.local/share/mimocode/log/*.log):

service=mcp key=playwright-mcp:playwright
command=["npx","-y","@playwright/mcp@0.0.78",...]
error=spawn npx ENOENT
local mcp startup failed

原因:

  • 配置里写的是裸名 "npx"
  • Desktop 引擎进程 spawn 时 PATH 里找不到可用的 npx
  • 终端里 npx --version 正常,是因为 交互 shell 的 PATH 含 Node 安装目录(示例:C:\nodejs
  • Windows 上还常见:只有 npx.cmd / npx.ps1,Node 的 spawn('npx') 解析失败

修复:改成 Node 绝对路径启动(推荐):

"command": [
  "C:/nodejs/node.exe",
  "C:/nodejs/node_modules/npm/bin/npx-cli.js",
  "-y",
  "@playwright/mcp@0.0.78",
  "--executable-path",
  "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe",
  "--browser",
  "msedge",
  "--headless",
  "--isolated",
  "--allow-unrestricted-file-access"
]

请按本机实际路径修改 node.exenpx-cli.js(示例路径仅供示意)。
改完后 重启 Desktop / 新开会话,再看是否出现 browser_*

自检命令(终端,路径按本机替换):

Test-Path "C:\nodejs\node.exe"
Test-Path "C:\nodejs\node_modules\npm\bin\npx-cli.js"
& "C:\nodejs\node.exe" "C:\nodejs\node_modules\npm\bin\npx-cli.js" -y "@playwright/mcp@0.0.78" --help

能打出 Usage: Playwright MCP 即说明该路径可拉起 server。

坑 2:想下 Chromium / 说要 playwright install

不要执行。 按全局规则:缺浏览器时应报告并走 Edge --executable-path,而不是静默安装。

坑 3:误以为「新对话就一定加载」

新对话会 重新读配置并尝试 spawn;若仍是 npx ENOENT,会再次失败。
修 command 路径 才是根治,不是反复新开对话。

坑 4:有头 vs 无头预期不符

  • 配置了 --headless永远看不到窗口,只有截图
  • 工具没有 per-call 的 headed 开关
  • 要看得见 → 去掉 --headless 再重启(你当前选择:保持无头

6. 推荐完整配置(当前定稿)

保持无头 + Edge + 隔离:

"mcp": {
  "playwright-mcp:playwright": {
    "type": "local",
    "command": [
      "C:/nodejs/node.exe",
      "C:/nodejs/node_modules/npm/bin/npx-cli.js",
      "-y",
      "@playwright/mcp@0.0.78",
      "--executable-path",
      "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe",
      "--browser",
      "msedge",
      "--headless",
      "--isolated",
      "--allow-unrestricted-file-access"
    ],
    "enabled": true
  }
}
参数 作用
node.exe + npx-cli.js 绝对路径(如 C:/nodejs/... 绝对路径,避免 spawn npx ENOENT
@playwright/mcp@0.0.78 固定版本,避免行为漂移
--executable-path + Edge 不用下载 Chrome for Testing
--browser msedge 浏览器通道与 Edge 一致
--headless 无头,不弹窗
--isolated 临时 profile,不碰真实用户数据
--allow-unrestricted-file-access 允许打开本地 file:// 页面

7. 验证是否成功

7.1 配置层

  1. Settings → MCP 中该 server 为 启用
  2. mimocode.jsonccommand[0]绝对路径 node,不是裸 npx
  3. 日志无 spawn npx ENOENT / local mcp startup failed

7.2 会话层

新开会话后先问一句:

你当前是否有 browser_navigate 等 Playwright MCP 工具?

  • → 进入测试
  • 没有 → 看日志 service=mcp 行,对照第 5 节排查;不要擅自装浏览器

7.3 功能层(示例:本地计算器)

文件示例:<你的项目目录>/index.html

建议步骤:

  1. browser_navigate 打开 file:///.../index.html
  2. browser_take_screenshot 确认页面
  3. 真实点击:7 × 8 = → 期望 56
  4. 真实点击:12 + 34 = → 期望 46
  5. browser_evaluate 执行:() => window.Calculator.runTests()
  6. 保存截图到项目内 screenshots\
  7. 汇报:用了哪些 MCP 工具、测试结果、截图路径

8. 日常使用方式

  • 不需要你手动点 browser_navigate;工具是给 agent 用的

  • 你用自然语言下指令即可,例如:

    用 Playwright 打开 index.html,跑测试并截图

  • 一般 不需要 /@ 手动点名 MCP;server 加载成功后 agent 自行调用

  • 默认无头:你看不到窗口,以 截图 + 文字进度 为准

全局规则(可写入 instructions / MEMORY)

建议固化类似规则,避免 agent 乱装东西:

  1. 未经同意禁止 npm/pip/playwright install、下载 Chromium 等
  2. 浏览器自动化 只用 Playwright MCPbrowser_*),主路径不走自写 chromium.launch()
  3. browser_* 时:如实告知未加载,不改配置、不装浏览器
  4. Edge + --headless + --isolated禁止 --user-data-dir 指向真实用户数据

可放在:

  • ~/.config/mimocode/AGENT_RULES.md,并在 mimocode.jsoncinstructions 中引用
  • 或全局记忆 ~/.local/share/mimocode/memory/global/MEMORY.md

9. 故障速查

现象 优先检查
没有 browser_* 日志是否 spawn npx ENOENTcommand 是否绝对路径
仍尝试装 Chromium 是否绕过 MCP 自写脚本;全局规则是否生效
打不开本地 HTML 是否有 --allow-unrestricted-file-access
下载 Chrome 失败 是否改用 Edge --executable-path
看不到窗口 是否配置了 --headless(当前为预期行为)
担心隐私 是否 --isolated;是否误配真实 --user-data-dir
改了配置仍无效 完整重启 MiMo Desktop,再新开会话

10. 小结

  1. 插件页安装 Playwright MCP → 写入 mimocode.jsoncmcp
  2. Windows 上关键坑是 npx → ENOENT,必须用 node.exe + npx-cli.js 绝对路径
  3. 浏览器用 本机 Edge--executable-path),避免下载 Chrome for Testing
  4. --headless + --isolated:无头、不弹窗、不碰日常浏览器数据
  5. --allow-unrestricted-file-access:才能打开本地 file:// 页面
  6. 失败先看日志 service=mcp不要为了跑通去装 Chromium

按上述配置稳定后,新开会话即可直接让 agent 用 browser_* 打开页面、点击、跑测试、交截图。


文档基于 Xiaomi MiMo Desktop 实机配置过程整理。路径(Node、Edge、配置文件)请按本机实际修改。


附:可直接发给 AI 助手的完整 Prompt

如果你希望 AI 助手自动修好「MiMo Desktop 装了 Playwright MCP 却没有 browser_* 工具 / 报 spawn npx ENOENT」等问题,可将下面整段 Prompt 复制给具备本机文件读写能力的助手(如 MiMo Code、Claude Code 等):

请你帮我修复「Xiaomi MiMo Desktop 上 Playwright MCP 无法加载 / 报 spawn npx ENOENT」的问题。请严格按以下步骤执行,不要跳步,不要臆造不存在的文件内容,不要为了跑通而随意安装软件。

## 背景

- 系统:Windows 10/11
- 应用:Xiaomi MiMo Desktop(底层配置为 mimocode)
- 已通过 Plugins 页安装 Playwright MCP,Settings → MCP 中可见该 server
- 现象(满足其一即可):
  1. 新会话里没有 browser_navigate / browser_click / browser_take_screenshot 等 browser_* 工具
  2. agent 回复「Playwright MCP 未加载」
  3. 日志(~/.local/share/mimocode/log/*.log)出现类似:
     service=mcp key=playwright-mcp:playwright
     command=["npx","-y","@playwright/mcp@...",...]
     error=spawn npx ENOENT
     local mcp startup failed
- 常见根因:
  1. mcp 配置里 command 写的是裸名 "npx",Desktop 引擎进程 spawn 时 PATH 找不到 npx(终端里 npx --version 正常不代表引擎能找到)
  2. Windows 上只有 npx.cmd / npx.ps1,Node 的 spawn('npx') 解析失败
  3. 默认尝试下载 Chrome for Testing 失败(ECONNRESET),而不是用本机 Edge

## 目标

把 mimocode.jsonc 里 playwright MCP 的 local server 配成「Node 绝对路径启动 + 本机 Edge + headless + isolated + 允许 file:// 本地页」,使新会话稳定出现 browser_* 工具。

## 约束(全程遵守,优先级最高)

1. **禁止**未经我明确同意执行安装类操作:npm install / npm i -g / pip install / playwright install / 下载 Chromium 或 Chrome for Testing / winget / choco 等。
2. 浏览器自动化**只走已安装的 Playwright MCP**(browser_* 工具);**不要**改写自写 Playwright/Puppeteer 脚本并 chromium.launch() 作为主路径;**不要**另起一套浏览器方案。
3. 固定使用**本机 Microsoft Edge**,且必须:
   - --executable-path 指向本机 msedge.exe
   - --browser msedge
   - --headless(保持无头;除非我明确要求有头)
   - --isolated(临时 profile)
   - **禁止**配置 --user-data-dir 指向真实 Chrome/Edge 用户数据目录
4. **只修改**配置文件顶层 **mcp** 段中与 playwright 相关的条目;不要动 provider、apiKey、instructions 等无关字段。
5. 修改前先**完整读取**配置文件;修改前先**备份**(见下)。
6. 不要向我回显完整 apiKey/密钥。
7. 若当前会话**已经**有 browser_* 工具,告诉我「已可用」,仍可帮你检查配置是否规范,但不要无意义破坏性改写。

## 操作步骤

### 第 1 步:定位配置文件

候选路径(按顺序,以当前 Windows 用户为准):

- %USERPROFILE%\.config\mimocode\mimocode.jsonc
- 即类似:C:\Users\<你的用户名>\.config\mimocode\mimocode.jsonc

若文件不存在或没有 mcp 段,停下来告诉我你实际找到了什么,不要凭空新建与现状无关的整份配置。

### 第 2 步:备份

将原文件复制为同目录 mimocode.jsonc.bak;若已存在,复制为 mimocode.jsonc.bak.时间戳,避免覆盖旧备份。

### 第 3 步:探明本机真实路径(不要写死示例路径)

在本机探测并记录实际存在的:

1. **node.exe 绝对路径**  
   例如可用:Get-Command node | Select-Object -Expand Source  
   或 Test-Path 常见位置;Windows 上常见形如 `C:/Program Files/nodejs/node.exe` 或 `C:/nodejs/node.exe`——**以实测为准**。
2. **npx-cli.js 绝对路径**(通常在 node 同级的 node_modules/npm/bin/ 下)  
   例如:`.../node_modules/npm/bin/npx-cli.js`  
   必须 Test-Path 确认文件真实存在。
3. **Edge msedge.exe 绝对路径**,优先探测:
   - C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe
   - C:/Program Files/Microsoft/Edge/Application/msedge.exe
   - 任一存在即可。
4. **@playwright/mcp 是否已可被拉起**:用下方 command 形态试 `--help`(见第 5 步);不要为此全局安装新包,除非我明确批准。若配置里已有版本号(如 @playwright/mcp@0.0.78),优先保留原版本号;找不到再告诉我。

探测失败时:明确报告「哪个路径不存在、你试过哪些」,不要假装成功。

### 第 4 步:改写 mcp 段(最小改动)

MiMo 的 local MCP 是 **command 一整层数组**(不是 command / args 分离的写法)。

确保存在(server key 以文件中已有为准;若已有 playwright-mcp:playwright 则只改它的 command/enabled,没有再新建同名 key):

​```jsonc
"mcp": {
  "playwright-mcp:playwright": {
    "type": "local",
    "command": [
      "<实测 node.exe 绝对路径>",
      "<实测 npx-cli.js 绝对路径>",
      "-y",
      "@playwright/mcp@0.0.78",
      "--executable-path",
      "<实测 msedge.exe 绝对路径>",
      "--browser",
      "msedge",
      "--headless",
      "--isolated",
      "--allow-unrestricted-file-access"
    ],
    "enabled": true
  }
}

说明:

  • 所有路径中的反斜杠建议写成 / 或按 JSON 转义,保证是合法 JSON 字符串。
  • 保留 -y 与原版本 pin;@playwright/mcp@0.0.78 仅作示例,以你本机配置里已有版本为准,没有版本再问我或用当前可解析到的版本。
  • 可选:追加 "--viewport-size", "1280x720" 固定视口。
  • 不要加入 --user-data-dir。
  • 若已有 headers 等其他字段,合并保留,不要整段盲目覆盖。

第 5 步:配置层自检(改完立刻做)

  1. 再次读文件,确认 JSONC 合法、command[0] 是绝对路径 node、不是裸 “npx”。
  2. 终端自检(把路径换成实测值):
    • Test-Path 对 node.exe、npx-cli.js、msedge.exe 均为 True
    • 用同一 command 数组拉起:& "<node.exe>" "<npx-cli.js>" -y "@playwright/mcp@<version>" --help
    • 若能打出 Usage: Playwright MCP(或类似帮助信息)即说明路径可拉起 server。
  3. 若 --help 失败,报告完整 stderr,不要跳过。

第 6 步:让我重启并验证

输出给我的操作清单:

  1. 完全退出 Xiaomi MiMo Desktop(托盘退出;必要时确认进程已结束),再重新启动——仅新开对话有时仍沿用失败的启动结果。
  2. 新开会话后先问我/检查:当前是否有 browser_navigate 等 Playwright MCP 工具。
  3. 查看日志:~/.local/share/mimocode/log/*.log 中 service=mcp 行,应无 spawn npx ENOENT、无 local mcp startup failed。
  4. 若仍无工具:把最新 mcp 相关日志行贴给我(命令数组、error 原文),继续排查,而不是让我反复新开对话碰运气。

第 7 步:功能层快速验证(可选,有 browser_* 后)

若我提供了本地 HTML 路径(例如 index.html):

  1. browser_navigate 打开 file:///绝对路径/index.html
  2. browser_take_screenshot 截图确认页面
  3. 按我要求点击/输入/ browser_evaluate
  4. 汇报:用了哪些 browser_* 工具、结果、截图路径

若没有本地页面,做到「会话中确认 browser_* 存在 + 日志无启动失败」即可,不要为了演示去访问无关外网站点。

故障对照(仍失败时按此排查)

现象 优先检查
没有 browser_* 日志是否仍 spawn npx ENOENT;command[0] 是否绝对路径;是否完整重启 Desktop
仍尝试装 Chromium / playwright install 是否绕过 MCP 自写脚本;是否遵守本 Prompt 禁止安装
打不开本地 file:// HTML 是否包含 --allow-unrestricted-file-access
下载 Chrome 失败 ECONNRESET 是否已改用 Edge --executable-path
看不到窗口 是否配置了 --headless(当前预期无头)
担心隐私 是否 --isolated;是否误配真实 --user-data-dir(应无此项)
改了配置仍无效 完整重启 MiMo Desktop → 再新开会话 → 再看日志

完成后请输出

  1. 实际修改的配置文件绝对路径
  2. 备份文件绝对路径
  3. 变更摘要:command 数组(可展示路径与参数;若文件中含密钥请打码,且与本次无关的字段不要动)
  4. 探测到的 node / npx-cli.js / msedge 绝对路径,以及 Test-Path / --help 自检结果
  5. 重启 + 会话验证 + 看日志的操作清单
  6. 若失败:当前日志原文关键行、你的下一步排查建议
### 使用方法

1. 复制上面代码块中的全部内容;
2. 粘贴给具备本机文件读写与终端权限的 AI 助手;
3. 按助手提示完成备份、改 `mcp` 段、**完整重启** Desktop,并用新会话确认是否存在 `browser_*` 工具。

若你更习惯手动操作,按本文第 3~7 节修改与验证即可,效果相同。