1. 为什么要在 ClaudeCode 里接 Chrome DevTools MCP如果你刚开始用 ClaudeCode 写前端或做数据采集大概率会遇到一个尴尬模型能读你本地的源码文件却看不见浏览器里真实渲染出来的页面。SPA 路由切换后的 DOM、异步接口返回后插入的列表、控制台里那条红色报错——这些信息 ClaudeCode 默认拿不到你只能手动复制粘贴给它来回折腾。Chrome DevTools MCP 解决的就是这个断层。MCP 全称 Model Context Protocol你可以把它理解成给 ClaudeCode 装的一根“数据线”一头连着模型一头连着本地已经打开的 Chrome。接上之后ClaudeCode 就能通过标准化的工具调用去操作浏览器打开页面、抓取 DOM 结构、读取控制台日志、监听网络请求。整个过程不需要你写爬虫脚本也不需要把页面 HTML 手动喂给模型。这篇是基础入门面向第一次接触 ClaudeCode 和 Chrome DevTools MCP 的开发者。我会带你走完一次完整的端到端闭环启动带调试端口的 Chrome、配置 MCP 服务、确认工具注册成功、抓取目标页面 DOM、回读控制台日志。每一步都有可复制的配置片段和验证动作跟着做就能跑通。先说清楚适合谁如果你在做前端调试、页面数据提取、自动化测试辅助或者只是想让 ClaudeCode 帮你看看某个页面到底长什么样这套流程都适用。前置条件也不复杂——本地装了 Node.js 环境、有 Chrome 浏览器、ClaudeCode 能正常启动就行。不需要你懂 CDP 协议的底层细节MCP 已经把这些封装成模型能直接调用的工具了。我试过在几个不同的项目里接这套东西最直观的感受是以前排查一个“按钮点了没反应”的问题要在 DevTools 里翻半天现在直接让 ClaudeCode 去读控制台和 DOM它能自己定位到是哪个元素绑事件失败了。下面从环境准备开始。2. 前置准备TaoToken 接入与 Chrome 调试端口启动在配置 MCP 之前得先保证 ClaudeCode 本身能正常调用模型。这里涉及两个独立的部分模型接入和浏览器调试端口别搞混了。2.1 通过 TaoToken 获取可用的 API 凭证ClaudeCode 需要一个大模型后端来驱动。你可以通过 TaoToken 获取 API Key它兼容 Anthropic 的接口格式配置起来比较直接。打开 https://taotoken.net/api-keys 创建密钥拿到一串以sk-开头的字符串先存好。然后在 ClaudeCode 的配置里填入 Base URL 和 Key。Base URL 用https://taotoken.net/api注意这里不加任何查询参数。配置方式有两种环境变量或者 settings 文件。推荐用 settings 文件路径和内容如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的密钥 } }这个文件一般放在~/.claude/settings.jsonmacOS/Linux或%USERPROFILE%\.claude\settings.jsonWindows。如果你用的是 Claude Code 的 CLI也可以用claude config set命令写入。配好之后启动 ClaudeCode随便问一句“你好”能正常回复就说明模型通道通了。模型 ID 这块ClaudeCode 默认会用它自己的模型映射。如果你想指定具体模型可以在 settings 里加ANTHROPIC_MODEL字段值填你账号下可用的模型标识。不确定的话先不填用默认的跑通再说。2.2 启动带远程调试端口的 ChromeMCP 要连上浏览器Chrome 必须以调试模式启动开放一个端口。默认用 9222。关键点是如果你已经开着 Chrome必须先完全退出否则新参数不生效。macOS 下这样启动/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ --remote-debugging-port9222 \ --user-data-dir/tmp/chrome-debug-profileWindows 下C:\Program Files\Google\Chrome\Application\chrome.exe ^ --remote-debugging-port9222 ^ --user-data-dirC:\tmp\chrome-debug-profileLinux 类似路径换成你的 Chrome 可执行文件位置。--user-data-dir指定一个独立的用户数据目录这样不会和你日常用的 Chrome 配置冲突也避免因为已有实例占用导致端口起不来。启动后验证端口是否在监听curl http://localhost:9222/json/version正常会返回一段 JSON里面有Browser、Protocol-Version等字段。如果返回连接拒绝说明 Chrome 没起来或者端口被占。这一步是整个链路的地基端口不通后面全白搭。注意调试端口只监听本地不要把它暴露到公网。这个端口没有任何鉴权暴露出去等于把浏览器控制权交出去。3. 配置 Chrome DevTools MCP可复制的 settings 片段环境通了接下来把 MCP 服务挂到 ClaudeCode 上。MCP 服务本身是一个独立进程ClaudeCode 通过标准输入输出和它通信。你需要告诉 ClaudeCode有这么个服务用 npx 启动参数是什么。3.1 MCP 配置文件位置与结构ClaudeCode 的 MCP 配置通常放在项目根目录的.mcp.json或者用户级的~/.claude.json。项目级配置只对当前项目生效用户级对所有项目生效。入门阶段建议先用项目级方便调试。配置结构长这样{ mcpServers: { chrome-devtools: { command: npx, args: [ -y, chrome-devtools-mcplatest, --browserUrl, http://localhost:9222 ] } } }逐字段说明chrome-devtools是服务名你可以改成别的但后面调用工具时会用到这个名字command是启动命令这里用 npx 直接拉取最新版args里-y表示自动确认安装chrome-devtools-mcplatest是包名--browserUrl指向刚才启动的调试端口。如果你不想每次拉最新版可以把latest换成具体版本号比如chrome-devtools-mcp0.6.0这样行为更稳定。生产环境建议锁版本。3.2 三件套对齐Base URL、Key、Model ID这里要强调一个容易踩的坑。MCP 配置和模型接入是两套独立的配置但很多人会把它们混在一起。MCP 的.mcp.json里只写浏览器连接信息不写 API Key。模型接入的 Base URL、Key、Model ID 写在settings.json的env里。两者各管各的别串了。为了让你一次对齐把三件套列清楚配置项值写在哪Base URLhttps://taotoken.net/apisettings.json 的 envAPI Keysk-开头settings.json 的 envModel ID账号下可用模型标识settings.json 的 env 或默认MCP 那边只需要--browserUrl http://localhost:9222。如果你用的是 Cline 或 CC Switch 这类工具来管理 MCP配置界面里填的也是这三样服务名、启动命令、浏览器地址。Codex 的auth.json则是另一套凭证体系和 MCP 无关别搞混。3.3 启动 ClaudeCode 并确认工具注册配置写好后在项目目录下启动 ClaudeCode。启动时它会读取.mcp.json尝试拉起 chrome-devtools 服务。你可以在 ClaudeCode 里输入/mcp命令不同版本命令可能略有差异查看已注册的 MCP 服务列表。正常的话会看到chrome-devtools处于 connected 状态展开能看到它提供的工具比如navigate_page、get_dom、get_console_logs、evaluate_script等。工具名可能随版本变化但核心能力就这几类导航、抓 DOM、读日志、执行脚本。如果显示 failed 或一直 connecting先检查 npx 能不能单独跑起来npx -y chrome-devtools-mcplatest --browserUrl http://localhost:9222这条命令在终端里应该能启动一个进程并保持运行。如果报错多半是 Node 版本太低或者网络拉包失败。Node 建议 18 以上。4. 验证请求抓取 DOM 并回读控制台日志工具注册成功后来跑一次真实的端到端验证。目标很简单让 ClaudeCode 打开一个页面抓取页面里某个元素的文本再读回控制台日志。4.1 让 ClaudeCode 导航到目标页面在 ClaudeCode 对话框里直接说“用 chrome-devtools 打开 https://example.com”。模型会调用导航工具把调试端口对应的浏览器标签页跳到这个地址。你可以在本地 Chrome 窗口里看到页面确实变了。如果模型没有自动调用工具你可以更明确一点“调用 chrome-devtools 的 navigate 工具url 是 https://example.com”。MCP 工具调用对措辞有一定敏感性明确指定工具名成功率更高。导航完成后让模型抓取 DOM“获取当前页面的 DOM 结构找出 h1 元素的文本”。模型会调用类似get_dom的工具返回页面的 DOM 树或指定选择器的结果。example.com 的 h1 文本应该是 “Example Domain”。4.2 读取控制台日志的完整动作光抓 DOM 还不够调试场景下控制台日志才是关键。让模型执行“读取当前页面的控制台日志”。它会调用get_console_logs之类的工具把浏览器控制台里积累的日志拉回来。为了验证日志确实能读到你可以在页面里手动触发一条。在本地 Chrome 的 DevTools 控制台里输入console.log(mcp-test-marker, { ts: Date.now() });然后再让 ClaudeCode 读一次日志。如果返回结果里出现了mcp-test-marker说明日志通道是通的。这一步很关键因为很多页面报错不会显示在 DOM 里只在控制台。4.3 用 evaluate_script 做一次主动探测除了被动读取MCP 通常还提供执行脚本的能力。让模型调用evaluate_script传入一段 JSJSON.stringify({ title: document.title, h1: document.querySelector(h1)?.innerText, url: location.href })返回的 JSON 里应该包含页面标题、h1 文本和当前 URL。这个能力比单纯抓 DOM 更灵活你可以让模型动态计算一些值比如统计页面上有多少个链接、某个元素是否可见。到这里一次完整的闭环就跑通了导航 → 抓 DOM → 读日志 → 执行脚本。整个过程你只需要用自然语言描述意图模型负责翻译成 MCP 工具调用。5. 常见报错排查401、local proxy failed、reading choices跑不通的时候报错信息往往很模糊。下面列几个高频问题对照着排查。5.1 401 未授权这个报错基本都出在模型接入层不是 MCP 的问题。原因通常是 API Key 填错、过期或者 Base URL 写成了带路径的形式。检查settings.json里的ANTHROPIC_BASE_URL是不是https://taotoken.net/api结尾不要多加/v1之类。Key 确认是sk-开头且没有多余空格。如果用的是环境变量注意 shell 里有没有旧的同名变量覆盖了配置文件。可以用echo $ANTHROPIC_API_KEY确认实际生效的值。5.2 local proxy failed这个报错指向 MCP 服务启动失败或浏览器连不上。分两步查先确认npx -y chrome-devtools-mcplatest --browserUrl http://localhost:9222能单独跑起来再确认curl http://localhost:9222/json/version有返回。两个都通但 ClaudeCode 里还是报这个错那可能是 ClaudeCode 启动 MCP 时的环境变量和终端不一致比如 npx 路径找不到。可以在.mcp.json的command里写 npx 的绝对路径试试。还有一种情况是 Chrome 虽然开着但调试端口没真正监听。用lsof -i :9222macOS/Linux或netstat -ano | findstr 9222Windows确认端口状态。5.3 reading choices 相关报错这类报错通常出现在模型返回结构不符合预期时比如工具调用返回的 JSON 解析失败。常见诱因是 MCP 服务版本和 ClaudeCode 版本不匹配。解决办法是锁定一个已知可用的版本组合把chrome-devtools-mcplatest换成具体版本号同时确认 ClaudeCode 是最新稳定版。如果报错里提到choices字段为空多半是模型侧返回了空响应。检查一下当前用的 Model ID 是否可用换个模型试试。有时候是额度问题返回体里会有提示。5.4 OAuth 与鉴权类报错如果你看到 OAuth 相关的提示说明 ClaudeCode 在尝试走另一套鉴权流程而不是用你配的 API Key。这通常是因为 settings 里同时存在多种鉴权配置优先级冲突了。把settings.json里无关的鉴权字段清掉只保留ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY。排查的核心思路是分层模型层的问题看 401 和 OAuthMCP 层的问题看 local proxy failed协议层的问题看 reading choices。一层层往下剥别一上来就怀疑所有配置。6. 把这条链路用起来下一步可以做什么跑通基础闭环之后这套东西能延伸出不少实用场景。比如前端调试时让 ClaudeCode 直接读控制台报错并定位到源码行做页面数据提取时让它抓取列表页的 DOM 并整理成结构化数据自动化测试辅助时用evaluate_script做断言检查。如果你打算长期在编码和 Agent 场景里用这套组合可以考虑用 Coding Plan 来管理调用额度地址是 https://taotoken.net/coding-plan。模型对话调试可以在 https://taotoken.net/chat 里快速验证提示词效果。接入文档在 https://taotoken.net/doc遇到配置细节可以对照查。最后给个实用技巧把常用的 MCP 调用封装成 ClaudeCode 的自定义指令比如“检查页面”对应导航加读日志加抓 DOM 的组合动作。这样每次调试不用重复描述一句话就能触发整套流程。链路搭好只是开始把它变成日常习惯才算真正用起来。