1. 为什么要在 Claude Code 里接 Playwright MCP
如果你用 Claude Code 写前端或做自动化测试,大概率遇到过这种场景:让模型帮你点一下页面、填个表单、截个图,结果它只能“纸上谈兵”给你写代码,真正跑起来还得自己复制到终端。Playwright MCP 就是来解决这个断层的——它把浏览器操作拆成 33 个可调用工具,模型能直接“动手”,而不是只“动嘴”。
但问题也随之而来:Claude Code 本身要连模型通道,Playwright MCP 又要单独跑一个进程,如果你手上还有别的 AI 工具,Key 就会散落在四五个配置文件里。改一次 Key 要翻半天,团队协作时更是灾难。我试过把 Key 统一收口到 TaoToken,用一套 Key 同时喂给 Claude Code 和 MCP 服务,配置文件从三份变成一份,排查问题也快了很多。
这篇就聚焦一件事:Claude Code 通过 Playwright MCP 调用 Playwright 工具时,怎么用 TaoToken 统一 Key 把 settings.json 和 config.toml 配好,并跑通一次真实的浏览器调用验证。适合需要统一管理多 AI 工具 Key 的开发者,也适合刚接触 MCP 想找个能跟做范例的人。全程给可复制骨架,不玩虚的。
2. TaoToken 前置:统一 Key 与 API 通道准备
在动手改配置之前,先把“钥匙”和“门”理清楚。TaoToken 在这里扮演的角色是统一入口:你只需要一个 API Key,就能让 Claude Code 和 Playwright MCP 都走同一条通道,不用为每个工具单独申请、单独记。
2.1 拿到统一 Key
登录 TaoToken 控制台后,进入 API Keys 页面创建一个新 Key。建议按用途命名,比如claude-code-playwright,这样以后要吊销或轮换时一眼能认出来。创建后立刻复制保存,页面刷新后就看不到完整值了。
注意:Key 只显示一次,别偷懒存在聊天记录里,直接写进本地环境变量或配置文件。
2.2 确认 API 通道地址
TaoToken 的 API 基地址是https://taotoken.net/api,这个地址在 Claude Code 和 MCP 配置里都会用到。注意它和官网首页不是一回事,配置时别填错。
如果你还没创建 Key,可以直接去控制台操作:
- 创建和管理 Key:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
- Key 列表直达:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
2.3 环境变量先落地
不管后面配置文件怎么写,先把 Key 放进环境变量,这样配置文件里只引用变量名,不暴露明文。Linux/macOS 在~/.zshrc或~/.bashrc里加:
export TAOTOKEN_API_KEY="sk-你的统一Key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"Windows PowerShell 用:
$env:TAOTOKEN_API_KEY="sk-你的统一Key" $env:TAOTOKEN_BASE_URL="https://taotoken.net/api"改完记得source ~/.zshrc或重开终端,用echo $TAOTOKEN_API_KEY确认能打印出来。这一步看着简单,但后面 90% 的“Key 无效”报错都是这里没生效。
3. 可复制配置:settings.json 与 config.toml 骨架
Claude Code 的配置分两层:一层是 Claude Code 自己的settings.json,管模型通道;另一层是 MCP 服务的config.toml,管 Playwright 工具怎么启动。两份都给你骨架,改掉路径就能用。
3.1 Claude Code 的 settings.json
Claude Code 读取的settings.json一般放在项目根目录的.claude/下,或者用户级~/.claude/settings.json。核心是把模型请求指向 TaoToken 的 API 通道:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的统一Key" }, "permissions": { "allow": [ "mcp__playwright__*" ] } }这里有两个关键点。第一,ANTHROPIC_BASE_URL指向 TaoToken 的 API 地址,Claude Code 的模型请求就走这条通道。第二,permissions.allow里放行mcp__playwright__*,否则 Claude Code 会拦下 Playwright 工具调用,你会看到“工具未授权”的提示。
如果你不想把 Key 写死在 JSON 里,可以改成引用环境变量(部分版本支持${TAOTOKEN_API_KEY}语法),或者干脆用系统环境变量覆盖,配置文件里留空。
3.2 Playwright MCP 的 config.toml
Playwright MCP 服务通过@executeautomation/playwright-mcp-server提供工具,它的config.toml决定服务怎么启动、连哪个浏览器。一个可用的骨架:
[mcp] name = "playwright" command = "npx" args = ["-y", "@executeautomation/playwright-mcp-server"] [mcp.env] PLAYWRIGHT_HEADLESS = "true" PLAYWRIGHT_BROWSER = "chromium" TAOTOKEN_API_KEY = "sk-你的统一Key" TAOTOKEN_BASE_URL = "https://taotoken.net/api"PLAYWRIGHT_HEADLESS = "true"表示无头模式,服务器或 CI 环境必须开;本地调试想看浏览器界面就改成false。PLAYWRIGHT_BROWSER可选chromium、firefox、webkit,按你项目实际需要选。
3.3 两份配置怎么串起来
Claude Code 启动时会读settings.json,拿到模型通道;同时它会根据 MCP 配置拉起 Playwright 服务进程,服务进程读config.toml。两份配置里的 Key 都指向同一个 TaoToken Key,这就是“统一”的含义——换 Key 只改一处,两边同时生效。
提示:如果你用项目级配置,记得把
.claude/settings.json和 MCP 的config.toml都提交到版本库时脱敏,Key 用环境变量占位。
4. 验证请求:跑通一次 Playwright 工具调用
配置写完不算数,得让 Claude Code 真的调一次 Playwright 工具,看到浏览器动作和返回结果,才算配置生效。下面走一遍完整验证。
4.1 启动 Claude Code 并确认 MCP 已加载
在项目目录下启动 Claude Code,然后输入斜杠命令查看 MCP 状态:
claude进入交互界面后输入:
/mcp如果配置正确,你会看到playwright服务处于 connected 状态,并且列出了可用的工具,比如playwright_navigate、playwright_click、playwright_screenshot等。如果显示 failed 或没有 playwright,先回到第 5 节排查。
4.2 发起一次导航调用
在 Claude Code 对话框里直接说:
用 playwright_navigate 打开 https://example.com,headless 模式,视口 1280x720Claude Code 会解析成工具调用,实际执行类似:
{ "tool": "playwright_navigate", "arguments": { "url": "https://example.com", "browserType": "chromium", "headless": true, "width": 1280, "height": 720 } }如果通道和 MCP 都正常,你会看到返回的页面标题、状态码,以及一句“导航成功”。这一步验证的是模型通道(TaoToken)+ MCP 服务(Playwright)整条链路。
4.3 截图取证确认渲染
导航成功后,紧接着让它截图:
用 playwright_screenshot 截当前页面,整页截图,保存为 example.png对应工具调用:
{ "tool": "playwright_screenshot", "arguments": { "fullPage": true, "savePng": true, "name": "example" } }执行完去项目目录找example.png,打开能看到 example.com 的页面内容,说明浏览器真的渲染了,不是模型编的。这一步很关键——很多“配置看起来对但没生效”的情况,截图会直接暴露问题。
4.4 读取页面文本做内容断言
再补一个内容读取,确认工具返回的是真实 DOM:
用 playwright_get_visible_text 取当前页面可见文本返回里应该包含 “Example Domain” 这类字样。到这一步,导航、截图、内容读取三个动作都通了,可以判定配置完全生效。
5. 本篇常见错排查
配置过程中最容易卡在几个固定位置,我按出现频率排一下,遇到问题直接对号入座。
5.1 MCP 服务起不来:npx 找不到包
报错长这样:Error: Cannot find module '@executeautomation/playwright-mcp-server'。原因通常是 npx 缓存没命中或网络拉取失败。先手动跑一次确认:
npx -y @executeautomation/playwright-mcp-server --help如果能跑通,说明包没问题,是 Claude Code 启动 MCP 时的环境变量没带上。检查config.toml里command和args是否写对,npx是否在 PATH 里。
5.2 工具调用被拒:permissions 没放行
现象是 Claude Code 提示“工具未授权”或直接跳过 Playwright 调用。回到settings.json,确认permissions.allow里有mcp__playwright__*。注意通配符写法,少一个下划线都会匹配不上。
5.3 Key 无效:环境变量没生效
报错401 Unauthorized或invalid api key。先在终端确认:
echo $TAOTOKEN_API_KEY curl -H "Authorization: Bearer $TAOTOKEN_API_KEY" https://taotoken.net/api/models如果 curl 也 401,说明 Key 本身有问题,去控制台重新生成。如果 curl 通了但 Claude Code 还报错,说明配置文件里的 Key 没引用对环境变量,检查settings.json和config.toml里的写法。
5.4 浏览器启动失败:缺系统依赖
Linux 服务器上常见libnss3、libatk之类缺失。Playwright 官方有依赖安装命令:
npx playwright install-deps chromium npx playwright install chromium跑完再重启 Claude Code。无头模式在容器里还要注意--no-sandbox,可以在config.toml的 args 里追加。
5.5 截图空白:页面没加载完就截
如果example.png是白图,多半是导航后立刻截图,DOM 还没渲染。可以在调用前加等待,或者用playwright_expect_response先等某个请求返回再截图。工具本身支持非阻塞登记响应,善用它比硬等 sleep 靠谱。
6. 统一 Key 之后:把 Playwright 工具用顺
配置跑通只是起点,真正提升效率的是把 Playwright 工具用进日常流程。统一 Key 之后,你换模型通道、轮换 Key、加新工具,都只动一处,维护成本直线下降。
如果你主要做长期编码和 Agent 任务,建议把 Claude Code 的通道固定到 Coding Plan,额度更稳,适合高频调用 Playwright 做回归测试:
- Coding Plan 入口:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite
想先在对话里验证模型和工具配合效果,可以用模型对话页面快速试:
- 模型对话:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite
接入细节和参数说明都在文档里,遇到工具名、参数对不上时优先查文档:
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
最后给个实用习惯:把playwright_navigate+playwright_screenshot+playwright_get_visible_text三个工具串成一个固定验证动作,每次改完配置先跑一遍。三分钟能确认整条链路,比事后在业务代码里 debug 省事得多。配置这东西,能一次跑通就别留到第二次。