在 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 能:
- 打开本地 HTML 页面(如计算器
index.html) - 点击、输入、执行 JS
- 截图并汇报结果
约束(全程遵守):
| 约束 | 说明 |
|---|---|
| 不随便装软件 | 不为了跑通去 playwright install 下载 Chromium |
| 用已有浏览器 | 固定本机 Microsoft Edge |
| 不碰日常浏览器数据 | 使用 isolated 临时 profile,禁止指向真实 User Data |
| 默认无头 | headless,不弹窗、不抢标签页;只在明确需要时才考虑有头 |
| 走官方 MCP | 使用已安装的 Playwright MCP 的 browser_* 工具,不另写旁路脚本作为主路径 |
2. 安装:Plugins 页安装 Playwright MCP
在 MiMo Desktop 中:
- 打开 Plugins / 插件 页面
- 在精选里找到 Playwright MCP
- 点击 安装
安装后,插件会把一条 MCP 配置写入全局配置文件(通常为 mimocode.jsonc 的 mcp 段)。
也可在 Settings → MCP 中查看是否启用。
配置修改后需要:
- 重启引擎,或
- 新开会话
才会重新拉起 MCP server。仅新开对话、不重启进程时,有时仍会沿用失败的启动结果——若一直没工具,优先完整重启 Desktop。
3. 配置文件位置
全局配置(优先使用):
C:\Users\<你的用户名>\.config\mimocode\mimocode.jsonc
只改顶层 mcp 段,不要动 provider、apiKey 等无关字段。
本地(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.exe 与 npx-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 配置层
- Settings → MCP 中该 server 为 启用
mimocode.jsonc中command[0]是 绝对路径 node,不是裸npx- 日志无
spawn npx ENOENT/local mcp startup failed
7.2 会话层
新开会话后先问一句:
你当前是否有
browser_navigate等 Playwright MCP 工具?
- 有 → 进入测试
- 没有 → 看日志
service=mcp行,对照第 5 节排查;不要擅自装浏览器
7.3 功能层(示例:本地计算器)
文件示例:<你的项目目录>/index.html
建议步骤:
browser_navigate打开file:///.../index.htmlbrowser_take_screenshot确认页面- 真实点击:
7 × 8 =→ 期望 56 - 真实点击:
12 + 34 =→ 期望 46 browser_evaluate执行:() => window.Calculator.runTests()- 保存截图到项目内
screenshots\ - 汇报:用了哪些 MCP 工具、测试结果、截图路径
8. 日常使用方式
-
不需要你手动点
browser_navigate;工具是给 agent 用的 -
你用自然语言下指令即可,例如:
用 Playwright 打开 index.html,跑测试并截图
-
一般 不需要
/或@手动点名 MCP;server 加载成功后 agent 自行调用 -
默认无头:你看不到窗口,以 截图 + 文字进度 为准
全局规则(可写入 instructions / MEMORY)
建议固化类似规则,避免 agent 乱装东西:
- 未经同意禁止
npm/pip/playwright install、下载 Chromium 等 - 浏览器自动化 只用 Playwright MCP(
browser_*),主路径不走自写chromium.launch() - 无
browser_*时:如实告知未加载,不改配置、不装浏览器 - Edge +
--headless+--isolated;禁止--user-data-dir指向真实用户数据
可放在:
~/.config/mimocode/AGENT_RULES.md,并在mimocode.jsonc的instructions中引用- 或全局记忆
~/.local/share/mimocode/memory/global/MEMORY.md
9. 故障速查
| 现象 | 优先检查 |
|---|---|
没有 browser_* |
日志是否 spawn npx ENOENT;command 是否绝对路径 |
| 仍尝试装 Chromium | 是否绕过 MCP 自写脚本;全局规则是否生效 |
| 打不开本地 HTML | 是否有 --allow-unrestricted-file-access |
| 下载 Chrome 失败 | 是否改用 Edge --executable-path |
| 看不到窗口 | 是否配置了 --headless(当前为预期行为) |
| 担心隐私 | 是否 --isolated;是否误配真实 --user-data-dir |
| 改了配置仍无效 | 完整重启 MiMo Desktop,再新开会话 |
10. 小结
- 插件页安装 Playwright MCP → 写入
mimocode.jsonc的mcp - Windows 上关键坑是 裸
npx→ ENOENT,必须用node.exe+npx-cli.js绝对路径 - 浏览器用 本机 Edge(
--executable-path),避免下载 Chrome for Testing --headless+--isolated:无头、不弹窗、不碰日常浏览器数据--allow-unrestricted-file-access:才能打开本地file://页面- 失败先看日志
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 步:配置层自检(改完立刻做)
- 再次读文件,确认 JSONC 合法、command[0] 是绝对路径 node、不是裸 “npx”。
- 终端自检(把路径换成实测值):
- 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。
- 若 --help 失败,报告完整 stderr,不要跳过。
第 6 步:让我重启并验证
输出给我的操作清单:
- 完全退出 Xiaomi MiMo Desktop(托盘退出;必要时确认进程已结束),再重新启动——仅新开对话有时仍沿用失败的启动结果。
- 新开会话后先问我/检查:当前是否有 browser_navigate 等 Playwright MCP 工具。
- 查看日志:~/.local/share/mimocode/log/*.log 中 service=mcp 行,应无 spawn npx ENOENT、无 local mcp startup failed。
- 若仍无工具:把最新 mcp 相关日志行贴给我(命令数组、error 原文),继续排查,而不是让我反复新开对话碰运气。
第 7 步:功能层快速验证(可选,有 browser_* 后)
若我提供了本地 HTML 路径(例如 index.html):
- browser_navigate 打开 file:///绝对路径/index.html
- browser_take_screenshot 截图确认页面
- 按我要求点击/输入/ browser_evaluate
- 汇报:用了哪些 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 → 再新开会话 → 再看日志 |
完成后请输出
- 实际修改的配置文件绝对路径
- 备份文件绝对路径
- 变更摘要:command 数组(可展示路径与参数;若文件中含密钥请打码,且与本次无关的字段不要动)
- 探测到的 node / npx-cli.js / msedge 绝对路径,以及 Test-Path / --help 自检结果
- 重启 + 会话验证 + 看日志的操作清单
- 若失败:当前日志原文关键行、你的下一步排查建议
### 使用方法
1. 复制上面代码块中的全部内容;
2. 粘贴给具备本机文件读写与终端权限的 AI 助手;
3. 按助手提示完成备份、改 `mcp` 段、**完整重启** Desktop,并用新会话确认是否存在 `browser_*` 工具。
若你更习惯手动操作,按本文第 3~7 节修改与验证即可,效果相同。