MCP 显示已连接,并不能保证 Agent 能操控浏览器。找到第一条缺失的回执。服务要初始化,当前客户端要暴露浏览器工具,目标和动作要获准,实际调用还要返回预期页面状态。逐层核对。
第一层:服务是否启动并初始化
读第一条启动或握手错误。本地 stdio 服务要确认客户端在实际环境里能找到并启动命令。远程服务要核对获准的端点、传输和登录。本机诊断故意使用不存在的命令,返回 FileNotFoundError、errno 2,没有初始化回执。
第二层:工具是否对当前会话可见
核对原始 tools/list 和当前 Agent 会话显示的工具。服务返回空列表,与客户端过滤了非空列表是两回事。也要查工具 schema、客户端模式以及工具发现是否结束。本机固定 Playwright MCP 0.0.84 返回 25 个工具,含 browser_navigate。我们在诊断客户端故意过滤,客户端显示 0 个。这是测试条件,并非 Playwright 默认。
MCP · Tools VS Code · MCP servers
第三层:浏览器和目标是否获准
工具可见后,查工作区策略、目标浏览器与配置、以及准确来源和动作的权限。实测 Playwright 来源路由过滤拒绝未列入的回环来源,返回 net::ERR_BLOCKED_BY_CLIENT,目标测试服务器收到 0 个 HTTP 请求。这里只验证应用路由过滤,真实管理与网络限制要另查。
Playwright MCP · Configuration
第四层:Agent 是否真的发出调用
在任务记录里查 tools/call。计划或文字回复不能证明执行。本机脚本先停在工具发现,此时调用数为 0。随后显式对允许来源执行 browser_navigate 和 browser_snapshot,读到 J01-FIXTURE。脚本没有调用模型。真实 Agent 还要核对模型与模式是否暴露工具,提示中是否给出工具、URL 和只读结果。
| 步骤 | 预期结果 |
|---|---|
| initialize | FileNotFoundError · errno 2 |
| tools/list | 25 → 0 |
| Origin filter | ERR_BLOCKED_BY_CLIENT · 0 requests |
| tools/call | 0 → J01-FIXTURE |
复杂流程前先做最小检查
让 Agent 打开获准的本机或公开页面,返回最终 URL、标题和已知标记,然后停止。对照模型回复与浏览器回执。直接调用成功而模型仍跳过时,查客户端工具选择或审批记录。调用返回错误时,保留工具名称和结构化报错,修复该层后再试。
| 工具 | 预期结果 |
|---|---|
browser_navigate | URL · title |
browser_snapshot | J01-FIXTURE |
社区实际遇到什么
一位 r/mcp 用户说,某个 stdio 服务成功连接后 tools/list 仍超时。另一位 r/ClaudeAI 用户说同一连接器在 Chat 可用,到了 Code 标签却没有可调用工具。这是不同环境,排查时既要看协议层,也要看实际会话。
显示已连接就代表浏览器工具能用吗?
已连接可能只表示连上服务。另行核对当前会话工具、实际授权调用和页面结果。
常见问题
显示已连接就代表浏览器工具能用吗?
已连接可能只表示连上服务。另行核对当前会话工具、实际授权调用和页面结果。
怎样验证初始化?
读第一条启动或握手错误。本地 stdio 服务要确认客户端在实际环境里能找到并启动命令。远程服务要核对获准的端点、传输和登录。本机诊断故意使用不存在的命令,返回 FileNotFoundError、errno 2,没有初始化回执。
当前会话为什么会显示零工具?
核对原始 tools/list 和当前 Agent 会话显示的工具。服务返回空列表,与客户端过滤了非空列表是两回事。也要查工具 schema、客户端模式以及工具发现是否结束。本机固定 Playwright MCP 0.0.84 返回 25 个工具,含 browser_navigate。我们在诊断客户端故意过滤,客户端显示 0 个。这是测试条件,并非 Playwright 默认。
怎样确认权限?
工具可见后,查工作区策略、目标浏览器与配置、以及准确来源和动作的权限。实测 Playwright 来源路由过滤拒绝未列入的回环来源,返回 net::ERR_BLOCKED_BY_CLIENT,目标测试服务器收到 0 个 HTTP 请求。这里只验证应用路由过滤,真实管理与网络限制要另查。
怎样知道工具实际运行了?
在任务记录里查 tools/call。计划或文字回复不能证明执行。本机脚本先停在工具发现,此时调用数为 0。随后显式对允许来源执行 browser_navigate 和 browser_snapshot,读到 J01-FIXTURE。脚本没有调用模型。真实 Agent 还要核对模型与模式是否暴露工具,提示中是否给出工具、URL 和只读结果。