Safari工具MCP
](https://npmjs.org/package/safari-devtools-mcp) ](https://npmjs.org/package/safari-devtools-mcp)  ](https://npmjs.org/package/safari-devtools-mcp)
safari-devtools-mcp 允许您的编码代理(如Claude、Cursor、Copilot或Gemini)控制和检查macOS上的实时Safari浏览器。它充当模型上下文协议(MCP)服务器,让您的AI编码助手访问Safari DevTools进行调试、自动化和测试。
Chrome开发人员通过以下方式获得强大的AI调试 chrome开发工具mcp 谷歌。Safari开发人员应该有类似的东西——这个项目为Safari带来了同样的体验,具有匹配的工具名称和参数模式,这样你就可以在浏览器之间以最小的摩擦进行交换。
更新日志 | 贡献
注: 此服务器向MCP客户端公开浏览器内容(页面数据、控制台日志、网络流量)。避免在会话处于活动状态时浏览敏感网站或输入凭据。
为什么选择safari devtools mcp?
此项目使用 WebDriver 对于仅靠脚本无法提供的功能:
- 网络请求/响应正文捕获 --拦截带有完整标头、有效载荷和计时的fetch和XHR调用
- 通过可访问性树创建DOM快照 --在页面重新呈现后仍然存在的稳定元素UID,而不是脆弱的CSS选择器
- CSS计算样式检查 --从任何元素读取任何计算属性
- Cookie和存储管理 --读取、写入和删除Cookie、本地存储和会话存储
- 元素级截图 --捕捉单个元素,而不仅仅是整个视口
- 会话自动恢复 --检测死亡的SafariDriver会话并透明地重新连接
主要特点
- 浏览器调试:捕获控制台日志、检查网络请求和评估JavaScript——使用堆栈跟踪和完整的请求/响应详细信息。
- 可靠的自动化:使用具有稳定UID的辅助功能树快照,单击、键入、填写表单、拖放和按下键盘快捷键。
- 原生macOS集成:通过AppleScript进行选项卡管理,用于在窗口中列出、切换和控制Safari选项卡
需求
- macOS (Safari和SafariDriver是苹果独有的)
- Node.js 18+ (22+推荐)
- 游猎 启用远程自动化
Safari设置
- 打开Safari浏览器>设置>高级>检查 “为web开发人员显示功能”
- 开发菜单>检查 “允许远程自动化”
- 授权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
将标准配置添加到光标MCP设置中。
VS Code
将标准配置添加到 .vscode/mcp.json.
Copilot CLI
copilot mcp add safari-devtools -- npx -y safari-devtools-mcp@latestGemini 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中打开“安装MCP服务器”并填写:
- 命令:
npx - 参数:
-y safari-devtools-mcp@latest
或者在打开命令之前复制上面的标准配置JSON——Raycast将自动填充表单。
Visual Studio
将标准配置添加到您的 .vs/mcp.json 在溶液根中。
Warp
将标准配置添加到Warp MCP设置文件中 ~/.warp/mcp.json.
From source
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"
]
}
}
}您的第一个提示
导航至https://example.com,拍摄快照,并列出任何控制台错误。
苗条模式
使用 --slim 通过缩短工具描述来减少令牌使用。在处理上下文受限的模型或长时间对话时很有用:
{
"mcpServers": {
"safari-devtools": {
"command": "npx",
"args": ["-y", "safari-devtools-mcp@latest", "--slim"]
}
}
}提示(技能)
服务器将引导调试工作流作为MCP提示公开。支持提示的客户端(例如Claude Desktop、Claude Code)可以按名称调用它们:
| 提示 | 描述 |
|---|---|
safari-devtools | 入门指南——工具概述、推荐的工作流程以及Safari特有的注意事项 |
a11y-debugging | 可访问性审计——11年树木检查、斧头芯注入、WCAG检查 |
safari-specific-debugging | 调试WebKit怪癖——CSS前缀、JS功能差距、ITP/CORS问题 |
performance-debugging | 性能分析——导航计时、核心Web生命周期、资源瀑布 |
工具(45)
调试
| 工具 | 说明 |
|---|---|
list_console_messages | 按级别(日志、警告、错误)筛选列出控制台消息 |
get_console_message | 获取包括堆栈跟踪和参数的详细消息 |
clear_console | 清除所有捕获的控制台消息 |
list_network_requests | 监控网络请求——获取、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 | 提取元标签(og:、twitter:、描述等) |
导航
| 工具 | 说明 |
|---|---|
list_pages | 列出窗口中所有打开的Safari选项卡 |
select_page | 切换到特定选项卡 |
new_page | 打开新选项卡并导航到URL |
close_page | 关闭选项卡 |
navigate_page | 导航到URL,返回、前进或重新加载 |
wait_for | 等待特定文本出现在页面上 |
resize_page | 调整浏览器窗口大小 |
handle_dialog | 接受或关闭浏览器对话框(警告、确认、提示) |
滚动
| 工具 | 说明 |
|---|---|
scroll | 按给定的量在任何方向滚动页面 |
scroll_to_element | 按UID滚动元素进入视图 |
CSS检查
| 工具 | 说明 |
|---|---|
get_computed_style | 通过UID获取任何元素的计算CSS样式 |
Cookie和存储
| 工具 | 说明 |
|---|---|
get_cookies | 获取浏览器Cookie,可选择按名称或域进行过滤 |
set_cookie | 设置一个具有名称、值和可选属性的cookie |
delete_cookie | 按名称删除cookie,或删除所有cookie |
get_storage | 从本地存储或会话存储读取 |
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 | 解析视口元标记,并根据iOS最佳实践(宽度、缩放、视口适配)进行验证 |
get_safe_area_insets | 读取CSS安全区域插入值,并检查页面是否正确处理凹口设备 |
check_ios_web_app_readiness | 审核页面是否已准备好添加到主屏幕/PWA(苹果触摸图标、清单、启动画面、状态栏) |
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是苹果独有的——此服务器在Linux或Windows上无法运行。
- 无无头模式:Safari不支持无头操作。需要一个可见的浏览器窗口。
- 控制台预喷射间隙:在注入捕获脚本之前记录的控制台消息不会被捕获。
- 网络预注入间隙:注入前发出的网络请求通过Performance API进行回填,但细节有限(时间和大小,但没有标题或状态代码)。
- 仅PNG:Safari WebDriver仅支持PNG屏幕截图,不支持JPEG或WebP。无法进行完整页面捕获。
- AppleScript权限:选项卡管理功能需要macOS辅助功能权限
osascript.
学分
- chrome开发工具mcp 谷歌/ChromeDevTools——该项目所反映的灵感和界面标准。工具名称和模式有意兼容,因此您可以在Chrome和Safari之间无缝切换。
- safari mcp服务器 --我们在开发过程中研究的Safari MCP集成的现有技术。
