关于 Safari Devtools Mcp
Safari DevTools MCP 是面向 macOS 编码 Agent 的 MCP 服务,可检查、调试和自动化操作运行中的 Safari。它结合 WebDriver 控制浏览器,并提供网络、DOM、CSS、存储和标签页检查能力。
主要功能
- 01控制台与网络检查
- 02带稳定 UID 的 DOM 快照
- 03CSS 样式与存储管理
- 04Safari 标签页与页面控制
- 05表单、键盘和指针自动化
- 06iOS Safari 就绪度检查
适用场景
- 01诊断页面错误和网络响应
- 02自动化 Safari 页面测试
- 03检查 CSS 与无障碍结构
- 04检查移动 Safari 兼容性
MCP 相关
它通过 stdio 向 MCP 客户端提供 Safari 调试和自动化工具及引导式提示词。客户端可借此检查和控制运行中的 Safari 会话。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Safari DevTools MCP
safari-devtools-mcp 可让你的编码 Agent(例如 Claude、Cursor、Copilot 或 Gemini)控制和检查 macOS 上正在运行的 Safari 浏览器。它充当 Model-Context-Protocol(MCP)服务,让你的 AI 编码助手能够使用 Safari DevTools 进行调试、自动化和测试。
Chrome 开发者可以通过 Google 的 chrome-devtools-mcp 获得强大的 AI 调试能力。Safari 开发者也应该拥有同等的工具——本项目将同样的体验带到 Safari,并采用匹配的工具名称和参数架构,让你能够轻松切换浏览器。
更新日志 | 贡献指南
注意: 此服务会向 MCP 客户端公开浏览器内容(页面数据、控制台日志、网络流量)。会话处于活动状态时,请避免浏览敏感网站或输入凭据。
为什么选择 safari-devtools-mcp?
本项目使用 WebDriver 提供仅靠脚本无法实现的功能:
- 捕获网络请求/响应正文 — 拦截 fetch 和 XHR 调用,获取完整的标头、负载和时间信息
- 通过无障碍树生成 DOM 快照 — 使用页面重新渲染后仍然稳定的元素 UID,而非脆弱的 CSS 选择器
- 检查 CSS 计算样式 — 读取任意元素的任意计算属性
- 管理 Cookie 和存储 — 读取、写入和删除 Cookie、localStorage 及 sessionStorage
- 元素级截图 — 捕获单个元素,而不仅仅是整个视口
- 会话自动恢复 — 检测失效的 SafariDriver 会话并自动重新连接
主要功能
- 浏览器调试:捕获控制台日志、检查网络请求并执行 JavaScript,同时获取堆栈跟踪以及完整的请求/响应详情。
- 可靠的自动化:使用带有稳定 UID 的无障碍树快照进行点击、输入、填写表单、拖放和触发键盘快捷键。
- 原生 macOS 集成:通过 AppleScript 管理标签页,包括列出、切换和控制多个窗口中的 Safari 标签页
要求
- macOS(Safari 和 SafariDriver 仅适用于 Apple 平台)
- Node.js 18+(推荐使用 22+)
- Safari,并已启用远程自动化
Safari 设置
- 打开 Safari > 设置 > 高级 > 勾选 “显示网页开发者功能”
- 开发菜单 > 勾选 “允许远程自动化”
- 授权 SafariDriver:
sudo safaridriver --enable
开始使用
标准 MCP 配置:
{
"mcpServers": {
"safari-devtools": {
"command": "npx",
"args": ["-y", "safari-devtools-mcp@latest"]
}
}
}
Claude Code
claude mcp add safari-devtools -- npx -y safari-devtools-mcp@latest
或者使用上方的标准配置,添加到项目的 .mcp.json 中。
Claude Desktop
将标准配置添加到 ~/Library/Application Support/Claude/claude_desktop_config.json。
Cursor
将标准配置添加到 Cursor 的 MCP 设置中。
VS Code
将标准配置添加到 .vscode/mcp.json。
Copilot CLI
copilot mcp add safari-devtools -- npx -y safari-devtools-mcp@latest
Gemini CLI
gemini mcp add safari-devtools -- npx -y safari-devtools-mcp@latest
或者将标准配置添加到 ~/.gemini/settings.json。
Gemini Code Assist
将标准配置添加到项目根目录下的 .gemini/settings.json 中。
JetBrains AI Assistant & Junie
将标准配置添加到项目根目录下的 .junie/mcp.json 中。
Raycast
在 Raycast 中打开“Install MCP Server”并填写:
- 命令:
npx - 参数:
-y safari-devtools-mcp@latest
或者在打开命令前复制上方的标准配置 JSON,Raycast 会自动填充表单。
Visual Studio
将标准配置添加到解决方案根目录下的 .vs/mcp.json 中。
Warp
将标准配置添加到 Warp MCP 设置文件 ~/.warp/mcp.json 中。
从源代码构建
git clone https://github.com/HayoDev/safari-devtools-mcp.git
cd safari-devtools-mcp
npm install && npm run build
然后将 MCP 客户端指向构建后的入口点:
{
"mcpServers": {
"safari-devtools": {
"command": "node",
"args": [
"/path/to/safari-devtools-mcp/build/src/bin/safari-devtools-mcp.js"
]
}
}
}
你的第一个提示词
精简模式
使用 --slim,通过缩短工具描述来减少 token 用量。适用于使用上下文受限的模型或进行长时间对话的场景:
{
"mcpServers": {
"safari-devtools": {
"command": "npx",
"args": ["-y", "safari-devtools-mcp@latest", "--slim"]
}
}
}
提示词(技能)
该服务通过 MCP 提示词提供引导式调试工作流。支持提示词的客户端(例如 Claude Desktop、Claude Code)可以按名称调用:
| 提示词 | 描述 |
|---|---|
safari-devtools | 入门指南——工具概览、推荐工作流和 Safari 特定说明 |
a11y-debugging | 无障碍审计——检查 a11y 树、注入 axe-core、进行 WCAG 检查 |
safari-specific-debugging | 调试 WebKit 特有问题——CSS 前缀、JS 功能缺失、ITP/CORS 问题 |
performance-debugging | 性能分析——Navigation Timing、Core Web Vitals、资源瀑布图 |
工具(45)
调试
| 工具 | 描述 |
|---|---|
list_console_messages | 列出控制台消息,可按级别(log、warn、error)筛选 |
get_console_message | 获取详细消息,包括堆栈跟踪和参数 |
clear_console | 清除所有已捕获的控制台消息 |
list_network_requests | 监控网络请求:Fetch、XHR 和资源加载 |
get_network_request | 获取完整的请求/响应详细信息,包括标头和正文 |
clear_network | 清除所有已捕获的网络请求 |
evaluate_script | 在浏览器上下文中执行 JavaScript 并返回结果 |
take_screenshot | 截取页面或特定元素的 PNG 屏幕截图 |
take_snapshot | 获取 DOM 的无障碍树快照,其中包含用于定位元素的稳定 UID |
页面内容
| 工具 | 描述 |
|---|---|
get_page_content | 获取页面标题、URL 和可见文本内容 |
get_html_source | 获取页面的完整 HTML 源代码 |
extract_links | 提取所有链接及其文本、href 和 rel 属性 |
extract_meta | 提取 meta 标签(og:、twitter:、description 等) |
导航
| 工具 | 描述 |
|---|---|
list_pages | 列出所有窗口中打开的 Safari 标签页 |
select_page | 切换到指定标签页 |
new_page | 打开新标签页并导航到指定 URL |
close_page | 关闭标签页 |
navigate_page | 导航到指定 URL、返回、前进或重新加载 |
wait_for | 等待页面上出现指定文本 |
resize_page | 调整浏览器窗口大小 |
handle_dialog | 接受或关闭浏览器对话框(alert、confirm、prompt) |
滚动
| 工具 | 描述 |
|---|---|
scroll | 按指定距离向任意方向滚动页面 |
scroll_to_element | 根据元素的 UID 将其滚动到可见位置 |
CSS 检查
| 工具 | 描述 |
|---|---|
get_computed_style | 根据元素的 UID 获取其计算后的 CSS 样式 |
Cookie 和存储
| 工具 | 描述 |
|---|---|
get_cookies | 获取浏览器 Cookie,可按名称或域名筛选 |
set_cookie | 设置 Cookie,包括名称、值和可选属性 |
delete_cookie | 按名称删除 Cookie,或删除所有 Cookie |
get_storage | 从 localStorage 或 sessionStorage 读取 |
set_storage | 向 localStorage 或 sessionStorage 写入键值对 |
delete_storage | 删除键,或清除 localStorage/sessionStorage 中的所有条目 |
输入自动化
| 工具 | 描述 |
|---|---|
click | 根据快照中的 UID 点击元素 |
click_at | 点击指定的 x/y 坐标 |
right_click | 右键点击元素(打开上下文菜单) |
select_option | 根据值或标签选择下拉菜单中的选项 |
hover | 将鼠标悬停在元素上 |
fill | 在输入框中键入内容,或从下拉菜单中选择选项 |
fill_form | 一次填写多个表单字段 |
type_text | 在当前聚焦的元素中输入文本 |
drag | 在元素或坐标之间拖放 |
press_key | 按下按键或组合键(例如 Meta+A、Enter) |
upload_file | 通过文件输入框上传文件 |
iOS Safari 验证
| 工具 | 描述 |
|---|---|
inspect_viewport_meta | 解析 viewport meta 标签,并根据 iOS 最佳实践验证(宽度、缩放、viewport-fit) |
get_safe_area_insets | 读取 CSS safe-area-inset 值,并检查页面是否正确适配带刘海的设备 |
check_ios_web_app_readiness | 检查页面是否满足添加到主屏幕 / PWA 的要求(apple-touch-icon、manifest、启动屏幕、状态栏) |
check_webkit_compatibility | 通过 CSS.supports(),对照当前 Safari 会话检查页面 CSS 兼容性 |
架构
MCP Client (Claude, Cursor, etc.)
| stdio (MCP protocol)
v
Safari DevTools MCP Server
|
v
+-------------------------------+
| SafariDriver |
| +-- Selenium WebDriver | <-- Browser automation
| +-- JS Injection | <-- Console/Network capture
| +-- AppleScript (osascript) | <-- Native tab management
+-------------------------------+
|
v
Safari Browser
已知限制
- 单一会话:Safari 一次只允许一个 WebDriver 会话。不支持同时运行多个实例。
- 仅限 macOS:Safari 和 SafariDriver 仅适用于 Apple 系统,此 MCP 服务无法在 Linux 或 Windows 上运行。
- 不支持无头模式:Safari 不支持无头运行。必须使用可见的浏览器窗口。
- 控制台注入前的空缺:在注入捕获脚本之前记录的控制台消息不会被捕获。
- 网络注入前的空缺:注入前发出的网络请求会通过 Performance API 补录,但详情有限(只有时间和大小,没有标头或状态码)。
- 仅支持 PNG:Safari WebDriver 仅支持 PNG 截图,不支持 JPEG 或 WebP。无法捕获整页。
- AppleScript 权限:标签页管理功能需要 macOS 辅助功能权限才能使用
osascript。
致谢
- chrome-devtools-mcp,由 Google/ChromeDevTools 开发——本项目的灵感来源及其借鉴的接口标准。工具名称和架构有意保持兼容,因此你可以在 Chrome 和 Safari 之间无缝切换。
- safari-mcp-server——我们在开发期间研究的 Safari MCP 集成先例。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。