← 返回目录
S

Safari MCP

社区
让 AI 驱动你已登录的原生 Safari。
GitHub 源仓库 ↗
★ 158 Stars 分类 · 浏览器自动化 非常热门
50FMRS · D
可靠性
8/20
安全与权限
6/20
维护活跃度
12/20
文档质量
13/20
安装易用性
11/20

这是一个 MIT 许可、面向 macOS 稳定版 Safari 的社区维护 MCP 服务器,提供 97 个浏览器自动化工具和 stdio 传输。其主要优势是复用真实 Safari 会话、后台运行以及覆盖存储、网络、控制台、数据提取和 WebKit 验证;主要限制是仅支持 macOS,并需要多项系统权限。

查看 FMRS 评分方法 →

Safari MCP 是面向 macOS 的 Safari 浏览器自动化 MCP 服务器,通过 AppleScript 和可选的 Safari 扩展提供 97 个工具。它使用本机 WebKit,复用现有 Safari 的登录状态、Cookie 和会话,并支持后台运行。服务器通过 Node.js npm 包以 stdio 传输运行。

工具能力

safari_navigate
导航到 URL。
safari_go_back
返回上一页。
safari_go_forward
前进到下一页。
safari_reload
重新加载页面,可选强制刷新。
safari_read_page
读取页面标题、URL 和文本内容。
safari_get_source
获取完整 HTML 源码。
safari_navigate_and_read
导航并读取页面。
safari_click
按 CSS 选择器、可见文本或坐标点击。
safari_double_click
双击元素。
safari_right_click
右键点击元素。
safari_hover
将鼠标悬停在元素上。
safari_click_and_wait
点击并等待导航。
safari_click_and_read
点击后返回更新后的页面。
safari_fill
填写输入框,兼容 React、Vue 和 Angular。
safari_clear_field
清空输入框。
safari_select_option
选择下拉选项。
safari_fill_form
批量填写多个字段。
safari_fill_and_submit
填写表单并提交。
safari_type_text
输入真实按键。
safari_press_key
按键,可使用修饰键。
safari_react_select_set
通过 React fiber 设置 react-select v5 的值。
safari_react_select_list_options
列出 react-select v5 下拉框选项。
safari_replace_editor
替换代码编辑器中的全部内容。
safari_verify_state
验证编辑器的框架级状态。
safari_screenshot
截取视口或整页 PNG。
safari_screenshot_element
截取指定元素。
safari_save_pdf
将页面导出为 PDF。
safari_scroll
按像素上下滚动。
safari_scroll_to
滚动到指定位置。
safari_scroll_to_element
平滑滚动到元素。
safari_list_tabs
列出所有标签页。
safari_new_tab
在后台打开新标签页。
safari_close_tab
关闭标签页。
safari_switch_tab
按索引切换标签页。
safari_wait_for_new_tab
等待新标签页并自动切换。
safari_wait_for
等待元素、文本或 URL 变化。
safari_wait
等待指定毫秒数。
safari_evaluate
执行 JavaScript 并返回结果。
safari_eval_file
执行文件中的 JavaScript。
safari_get_element
获取元素标签、矩形、属性和可见性。
safari_query_all
查找所有匹配元素。
safari_get_computed_style
获取计算后的 CSS 样式。
safari_detect_forms
自动检测页面表单及字段选择器。
safari_accessibility_snapshot
获取完整无障碍树。
safari_snapshot
获取带交互元素引用 ID 的无障碍树。
safari_drag
在元素或坐标之间拖拽。
safari_upload_file
通过 JavaScript DataTransfer 上传文件。
safari_paste_image
将图像粘贴到编辑器。
safari_handle_dialog
处理 alert、confirm 和 prompt。
safari_resize
调整浏览器窗口大小。
safari_emulate
模拟 iPhone、iPad、Pixel 或 Galaxy。
safari_reset_emulation
恢复桌面模式。
safari_get_cookies
获取所有 Cookie。
safari_set_cookie
设置带完整选项的 Cookie。
safari_delete_cookies
删除一个或全部 Cookie。
safari_local_storage
读取 localStorage。
safari_set_local_storage
写入 localStorage。
safari_delete_local_storage
删除或清空 localStorage。
safari_session_storage
读取 sessionStorage。
safari_set_session_storage
写入 sessionStorage。
safari_delete_session_storage
删除或清空 sessionStorage。
safari_export_storage
将全部存储导出为 JSON。
safari_import_storage
从 JSON 导入存储状态。
safari_clipboard_read
读取剪贴板文本。
safari_clipboard_write
写入文本到剪贴板。
safari_network
通过 Performance API 快速读取网络请求。
safari_start_network_capture
开始捕获 fetch 和 XHR 请求。
safari_network_details
获取已捕获请求的标头和计时信息。
safari_clear_network
清除已捕获请求。
safari_mock_route
模拟网络响应并拦截 fetch 或 XHR。
safari_clear_mocks
移除所有网络模拟。
safari_start_console
开始捕获控制台消息。
safari_get_console
获取已捕获的控制台消息。
safari_clear_console
清除控制台消息。
safari_console_filter
按级别筛选控制台消息。
safari_performance_metrics
获取导航计时、Web Vitals 和内存指标。
safari_throttle_network
模拟慢速网络或离线状态。
safari_extract_tables
将表格提取为结构化 JSON。
safari_extract_meta
提取 OG、Twitter、JSON-LD 和 canonical 元数据。
safari_extract_images
提取图像及尺寸和加载信息。
safari_extract_links
提取链接及 rel、外部和 nofollow 信息。
safari_override_geolocation
覆盖浏览器地理位置。
safari_list_indexed_dbs
列出 IndexedDB 数据库。
safari_get_indexed_db
读取 IndexedDB 记录。
safari_css_coverage
查找未使用的 CSS 规则。
safari_analyze_page
在一次调用中分析页面。
safari_doctor
诊断 macOS 权限和守护进程链。
safari_reload_extension
热重载 Safari MCP Bridge 扩展。
safari_run_script
在一次调用中运行多个操作。
safari_native_click
使用操作系统级鼠标点击。
safari_native_hover
使用操作系统级光标悬停。
safari_native_type
通过真实粘贴流程插入文本。
safari_native_keyboard
向 Safari 发送操作系统级按键。
safari_inspect_viewport
检查 iOS Safari viewport 元标签。
safari_safe_area_insets
读取安全区域 inset 和 viewport-fit 使用情况。
safari_check_pwa
检查 iOS 添加到主屏幕和 PWA 准备情况。
safari_webkit_compat
使用 CSS.supports 检查 Safari WebKit 兼容性。

安装接入

要求 macOS、Node.js 18+,并在 Safari 设置中启用“显示网页开发者功能”和“允许来自 Apple Events 的 JavaScript”。运行 npx safari-mcp;也可使用 npm install -g safari-mcp 或 Homebrew 安装。将提供的 stdio 配置加入 MCP 客户端。扩展是可选的,但构建扩展需要从源码克隆项目、安装 Xcode、构建并签名,然后在 Safari 中启用 Safari MCP Bridge;每次 Safari 重启后可能需要重新启用“允许未签名扩展”。

claude_desktop_config.json
{"mcpServers":{"safari":{"command":"npx","args":["safari-mcp"]}}}

选型与风险

适合谁

  • 使用 macOS 和 Safari 的 AI 编程代理
  • 需要复用真实 Safari 登录状态、Cookie 和会话的自动化
  • 希望浏览器在后台运行并减少额外 CPU 使用的用户
  • 需要 Safari、WebKit 或 iOS 页面验证的开发者

不适合谁

  • 非 macOS 环境
  • 需要 Chrome 专属调试、Lighthouse 或性能追踪的任务
  • 需要隔离、无登录状态的干净 WebDriver 会话的任务
  • 不愿授予 Safari 自动化、屏幕录制或辅助功能权限的用户

所需权限

  • Safari 中允许来自 Apple Events 的 JavaScript
  • macOS 自动化权限:运行 MCP 的 Terminal、VS Code 或其他父进程访问 Safari
  • 屏幕录制权限:用于截图
  • 辅助功能权限:用于 safari_native_* 工具和 safari_save_pdf

风险与副作用

  • 工具可操作真实已登录 Safari,因此可能访问账户、Cookie、剪贴板和页面数据
  • safari_evaluate 及相关脚本工具可在当前页面执行任意 JavaScript
  • 导出或导入存储可能包含会话信息
  • 操作系统级输入工具可能对非前台 Safari 产生真实点击、键盘和悬停事件
  • 自动化金融、社交或其他敏感网站时应先确认目标页面和操作

常见排障

  1. 遇到 AppleScript 错误时,启用 Safari 的“允许来自 Apple Events 的 JavaScript”
  2. 未授权发送 Apple Events 时,为启动 MCP 的 IDE 或 Terminal 授予访问 Safari 的自动化权限
  3. 截图为空时,为 Terminal 或 VS Code 授予屏幕录制权限
  4. 找不到标签页时先调用 safari_list_tabs 刷新索引
  5. safari_native_* 成功但页面无反应时,将 safari-helper 加入辅助功能并启用
  6. npm 更新后权限失效时,重新运行来源提供的 osascript 权限触发命令
  7. 若需要现代 SPA、封闭 Shadow DOM 或严格 CSP 支持,检查可选扩展是否已安装并连接

使用场景

自动浏览和读取网页
在已登录的 Gmail、GitHub、Slack 或其他网站中执行操作
填写 React、Vue、Angular 表单及代码编辑器
截屏、导出 PDF、提取表格和页面元数据
测试网络、控制台、存储、性能和 WebKit 兼容性

支持客户端

Claude Code完整支持
Claude Desktop完整支持
Cursor完整支持
Windsurf部分支持
VS Code部分支持
Cline部分支持
Continue部分支持
Goose部分支持
LM Studio部分支持
Zed部分支持