Safari MCP

让 AI 直接操控已登录的真实 Safari,并在后台完成网页自动化。

Star 数
★ 235
最近更新
3 天前
License
MIT
主语言
JavaScript

30 秒速览

运行形态
MCP 服务器命令行工具
可在哪里用
平台专用Claude Code · Claude.ai
费用
免费,无需付费服务
上手难度
中 · 需要几步配置
开始前需要
macOSSafariNode.js 20+Safari 的 Apple Events JavaScript 权限macOS 自动化权限Shell / 命令行网络访问本地文件系统MCP Server
典型场景
使用 Claude Code、Cursor 或 VS Code 的 macOS 开发者,需要让代理在已经登录 GitHub、Gmail、Slack 或内部后台的 Safari 会话中执行操作。
不适合
  • 使用 Windows 或 Linux 的团队——仅支持 macOS 上的 Safari
  • 需要 Lighthouse 或 Chrome 性能追踪的团队
  • 希望自动化不触碰真实登录账号和实时数据的用户

这个 Agent 能做什么,适合哪些场景?

Safari MCP 是一个仅限 macOS 的本地 MCP 服务器,为 AI 编程工具提供 98 项 Safari 浏览器操作。它通过 Node.js 服务协调 Safari 扩展、AppleScript 与持久化 Swift 辅助进程,直接操作用户日常使用且已登录的 Safari,而不是启动独立的无头浏览器。能力覆盖导航、页面读取、表单、截图、存储、网络捕获与模拟、控制台、性能指标、数据提取、原生输入及 iOS/WebKit 检查。服务器可通过 stdio 为单个客户端运行,也可作为 localhost HTTP 守护进程供多个会话共享,并以会话级标签所有权防止代理误操作其他标签页。它适合需要继承现有登录、Cookie、扩展和浏览环境的本机自动化,但部署边界严格限定在安装了 Safari 的 Mac。

MCP 客户端以 npx safari-mcp 启动服务器后,代理通常先调用 safari_snapshot 获取带 ref 的可访问性树,再用 safari_click、safari_fill、safari_navigate 等工具操作页面,最后再次快照验证结果。safari_read_page 和 safari_get_source 读取文本或 HTML;safari_screenshot、safari_save_pdf 生成 PNG 或 PDF;safari_extract_tables、safari_extract_links 等返回结构化数据。服务器还可读写 Cookie、localStorage、sessionStorage 和 IndexedDB,捕获或模拟 fetch/XHR,收集控制台消息与性能指标,并通过 safari_run_script 批量执行多个动作。默认情况下,它只操作本会话打开的标签页;共享 HTTP 模式按 MCP session id 保存标签状态和唯一标记,找不到所属标签时会拒绝回退到用户当前标签。可选 Safari MCP Bridge 扩展负责闭合 Shadow DOM、严格 CSP 页面和深层框架状态,AppleScript 与 Swift 辅助进程则提供回退、原生 CGEvent 输入、对话框及 PDF 等能力。

  1. 使用 Claude Code、Cursor 或 VS Code 的 macOS 开发者,需要让代理在已经登录 GitHub、Gmail、Slack 或内部后台的 Safari 会话中执行操作。
  2. 测试 React、Vue、Angular、Svelte 或复杂编辑器的工程师,需要填写表单、替换 Monaco、CodeMirror、Ace 或 ProseMirror 内容,并验证框架层状态。
  3. 前端与兼容性团队需要检查 iOS viewport、安全区、PWA 配置以及当前 Safari 对 CSS 特性的支持。
  4. 自动化工程师需要在真实 WebKit 页面中提取表格、链接、图片和元数据,或捕获控制台、网络请求与 Web Vitals。
  5. 同时运行多个代理的团队,需要通过共享 HTTP 守护进程隔离各会话的标签页,并减少重复 Node.js 进程。
  6. 需要在本机浏览器中模拟网络响应、限速、设备尺寸或地理位置,但不想部署 Chromium、Playwright 或 Puppeteer 的用户。

如何安装或部署这个 Agent?

前置条件是 macOS、Safari 和 Node.js 20+。在 Safari 中依次启用“设置 → 高级 → 显示网页开发者功能”和“设置 → 开发者 → 允许来自 Apple 事件的 JavaScript”,并向启动 MCP 的终端或 IDE授予“自动化 → Safari”权限。直接运行:

npx safari-mcp

也可永久安装:

npm install -g safari-mcp

Claude Code 可执行:

claude mcp add safari -- npx safari-mcp

其他 MCP 客户端可配置命令 npx、参数 safari-mcp。截图、PDF 和 safari_native_* 功能还分别需要屏幕录制与辅助功能权限。可选扩展需要从 GitHub 克隆仓库并使用 Xcode 构建;npm 包不包含其 xcode/ 目录。

如何使用这个 Agent?

推荐工作流是先调用 safari_snapshot 获取页面状态和元素 ref,再以 ref 调用 safari_click、safari_fill 或其他交互工具,随后再次调用 safari_snapshot 验证结果。使用 safari_new_tab 创建由当前会话拥有的后台标签页;默认安全策略不会直接接管用户已有标签。若确需操作已有标签,可设置 SAFARI_MCP_ALLOW_USER_TABS=1,再显式调用 safari_switch_tab 采用指定标签,但 safari_close_tab 仍会拒绝关闭该标签。多代理场景可运行 SAFARI_MCP_HTTP=1 SAFARI_MCP_HTTP_PORT=9225 npx safari-mcp,并将各客户端连接到 http://127.0.0.1:9225/mcp。遇到权限或辅助进程问题时运行 safari_doctor 检查 Apple Events、Accessibility、Screen Recording、签名和守护进程链路。

这个 Agent 有哪些优点和局限?

优点
  • 直接复用真实 Safari 的登录、Cookie、会话和现有扩展,无需为自动化重新登录独立浏览器。
  • 提供 98 个工具,除常规导航和表单外,还覆盖存储、网络模拟、控制台、性能、数据提取、原生输入与 WebKit 专项检查。
  • 双引擎架构优先使用扩展,并以 AppleScript 和持久化 Swift 辅助进程回退;文档称持久进程单次命令约 5ms。
  • 默认标签所有权、丢失标签时失败关闭以及共享 HTTP 模式的会话隔离,可降低代理误操作用户标签或其他代理标签的风险。
  • 后台打开和操作标签,常规流程不会抢占窗口焦点;无需 Chrome、Puppeteer、Playwright 或 WebDriver。
  • 支持 stdio 单客户端和 localhost HTTP 多会话两种交付方式,可接入多种 MCP 客户端。
局限
  • 核心运行环境绑定 macOS 与稳定版 Safari;不支持 Windows、Linux 或 Safari Technology Preview。
  • 初次部署需要开启 Safari 开发者设置,并处理 Automation、Screen Recording 和 Accessibility 等多项 macOS 权限。
  • 完整能力依赖可选 Safari 扩展,而扩展需要克隆源码并用 Xcode 构建;Safari 重启后还需重新启用“允许未签名扩展”。
  • 默认使用真实浏览器身份和会话,自动化操作可能影响真实账户;项目明确说明这不是反检测功能。
  • 原生点击、悬停和键盘工具向前台 Safari 投递真实 OS 事件,用户同时操作另一个 Safari 标签时可能发生干扰。
  • 不提供 Lighthouse 或 Chrome 专属性能追踪;这些任务仍需 Chrome DevTools MCP。

这个 Agent 与同类方案有什么区别?

相较 Chrome DevTools MCP,Safari MCP 强调原生 WebKit、真实 Safari 登录状态和较低的 CPU/热量,并提供 98 个工具,但缺少 Lighthouse 与性能追踪。相较 Playwright MCP,它不需要 Playwright 运行时或独立浏览器会话,能够继承用户现有登录,不过只能运行在 macOS Safari 上。Apple 的 safaridriver --mcp 使用隔离的 WebDriver 自动化会话,提供官方支持和标准化调试环境;本项目则操作用户已经登录的普通 Safari 标签,支持后台运行、存储修改、网络模拟和更多工具。若目标是 Safari 27 或更新版本上的纯净 WebDriver 兼容性调试,Apple 的方案更合适;若目标是复用日常浏览会话完成自动化,本项目更贴合。

与相关度最高的同类 agent 并排比较关键指标。

Agent 源码审查 形态 / 费用 Star 最近更新 主语言 完整支持的平台
Safari MCP 当前 78 · 表现良好 MCP 服务器免费 ★ 235 3 天前 JavaScript Claude Code · Claude.ai
Nuphus 桌面自动化 MCP 72 · 存在缺口 MCP 服务器免费 + 模型费 ★ 332 4 天前 Rust Claude.ai · OpenAI API · Claude API
Eko Agentic Workflow 43 · 缺口较多 代码库 / SDK免费 + 模型费 ★ 5k 8 个月前 TypeScript OpenAI API · Claude API
SuperAgentX 工作流框架 37 · 缺口较多 代码库 / SDK免费 + 模型费 ★ 206 4 个月前 Python OpenAI API

FollowAgents 如何评估这个 Agent?

FollowAgents 源码审查 · FARS-2.1
表现良好
78/ 100 五分制 3.9 / 5
本评测基于 2026年9月17日 的源码;此后该项目发布了 22 个正式版本,尚未复审。分数与结论只代表评测时的版本。 最近版本 ↓
信任安全 18/29
可靠稳定 11/14
适用触发 16/18
规范维护 17/18
有效结果 12/13
证据核验 4/8
查看各维度的扣分理由
信任安全18 / 29 · 3.1/5

项目具有默认拒绝操作既有用户标签页、会话级标签页标记、丢失跟踪时失败关闭、显式环境变量授权用户标签页,以及不允许关闭已收养标签页等实质性保护;依赖审计会阻止高危及以上发现,GitHub Actions 也固定到提交。扣分在于能力本身非常宽泛,包括任意页面 JavaScript、Cookie、存储、剪贴板、文件上传和原生输入;除系统权限及用户标签页开关外,没有证据表明提交表单、修改存储等高影响操作会逐次请求确认。文档说明本地数据流和无遥测,但 README 的可选 HTTP 服务与 SECURITY.md 所称“不开放端口”不完全一致。敏感数据可被工具读取或导出,虽声称不存储、不传输、不记录凭据,却未展示输出脱敏、访问分级或秘密处理策略。部分操作有恢复工具,但表单提交、Cookie 删除及其他外部副作用缺少通用撤销机制。作者、组织、联系邮箱和仓库归属清楚,但发布者身份未获策展注册表验证,不能视为独立确认。

可靠稳定11 / 14 · 3.9/5

包版本、98 个工具的描述以及启动后枚举工具的冒烟测试形成了较好的内部对应;CI 覆盖 Node 20、22、24,并检查语法、未定义引用及测试。扣分是 SECURITY.md 的纯 stdio/无端口表述与 README 中可选 localhost HTTP 守护进程不完全一致,且静态材料不能证明真实 Safari 交互稳定。依赖数量较少,运行版本和 macOS/Safari 前提明确,但功能依赖 Safari 开发设置、系统授权、扩展及本地辅助程序,postinstall 又以“|| true”吞掉失败。失败体验证据较强:标签页保护给出明确拒绝原因和恢复动作,safari_doctor 声称提供逐项诊断及修复提示,冒烟测试也附带服务器 stderr。

适用触发16 / 18 · 4.4/5

README 对编码代理、并发代理、普通用户标签页、演示或语音助手、网页测试和数据提取等受众与场景说明充分,并明确 macOS-only、Node 20+、Safari 设置、权限边界、会话隔离限制及第三方多路复用 caveat,因此场景和环境适配得分高。多个 MCP 客户端配置、stdio/HTTP 两种传输和丰富环境变量进一步支持适配。触发精度仅为中等:推荐 snapshot→按 ref 操作的流程及多种目标策略较清楚,但 98 个工具中包含任意 JavaScript、坐标点击、原生输入和批处理等高自由度接口,材料未显示对何时应避免高风险工具提供系统化的触发约束。

规范维护17 / 18 · 4.7/5

README 的快速开始、工作流、并发模型、用户标签页安全、环境变量和分类工具目录结构清楚;多客户端、Homebrew、源码安装及先决条件说明完整。工具统一采用 safari_ 前缀,测试强制名称格式和唯一性。限制、权限、macOS 范围、会话冲突和安全注意事项披露较具体。MIT 元数据与完整 LICENSE 一致。package.json 版本、发布标签校验、npm provenance、MCP Registry 发布流程及强制 CHANGELOG 条目体现成熟的版本管理。SECURITY.md 提供维护范围、支持版本、漏洞邮箱和响应目标。扣分主要在 examples 目录内容和 CHANGELOG 正文未随材料提供,README 也没有完整 FAQ,因而示例深度无法确认。

有效结果12 / 13 · 4.6/5

工具输出面向代理使用,包含结构化页面读取、可访问性 ref、表格和链接提取、网络详情、状态验证及组合操作;推荐的操作后再次 snapshot 流程也提升结果可用性。原生驱动已登录的 Safari、保留现有会话、标签页所有权和广泛 WebKit 专用检查,相比通用浏览器自动化具有明确增量价值。扣分集中在成本收益证据:一条 npx 命令、较少生产依赖和共享守护进程设计支持低部署成本,但“约 5ms”“少 40–60% CPU/热量”“零热量”等核心收益没有随附基准方法、原始数据或可复核测试。

证据核验4 / 8 · 2.5/5

工具数量、命名、许可、Node/macOS 范围、CI 和发布控制可在多个所给文件中相互对应,冒烟测试也会动态枚举注册工具。不过材料没有提供主要性能宣称的基准脚本或数据,外部报道、问题引用和用户证言只能作为 README 中的引用,无法在本次限定材料内独立核实。README 的营销性事实陈述常把实现特征、用户证言和性能结论并列呈现,虽然证言被明确标注来源、部分限制也区分清楚,但对推断、测量条件和已验证事实的整体分隔仍较弱。

风险与缓解建议
  • 该代理可读取 Cookie、剪贴板和浏览器存储,并能执行任意页面 JavaScript;只应授予受信任的 MCP 客户端,并避免在包含敏感账户的普通 Safari 配置中开放不必要的能力。
  • SAFARI_MCP_ALLOW_USER_TABS 应保持关闭,除非确实需要操作既有标签页;即使开启,也应人工确认目标标签页及即将产生的提交、购买、消息发送或删除行为。
  • 启用“Allow JavaScript from Apple Events”、Accessibility 和 Screen Recording 会扩大本机自动化权限面;停止使用后应考虑撤销不再需要的授权。
  • 共享 HTTP 守护进程会监听 localhost 端口,与 SECURITY.md 的无端口概述存在条件差异;使用前应检查绑定地址、会话隔离和本机其他进程的访问风险。
  • 不要把约 5ms、降低 40–60% CPU或热量及“零热量”当作已独立验证的结果;本次静态材料没有提供基准数据。
  • postinstall 会忽略脚本失败;安装后应运行 safari_doctor 并确认辅助程序、扩展和权限链均实际可用。
证据充分度:低 评估于 2026年9月17日 审查版本 54f4fec4e105 评估后仓库已有新提交,评分可能未覆盖最新改动
查看完整评分方法 →

最近版本

来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。

  1. v2.23.0
    发布说明摘录
    Added - safari_snapshot({ diff: true }) returns only what changed since that tab's previous snapshot. After a click or a fill an agent usually needs the few lines that changed, not the whole page again. Lines compare without their refs, which every snapshot renumbers in page order, so an element inserted near the top changes one line instead of all the lines after it. + lines are new and carry fresh refs; - lines are gone and are shown without their dead refs, at most 50 of them. The first call for a tab returns the full snapshot. Every snapshot is remembered (the newest 50 tabs …
    在 GitHub 查看 ↗
  2. v2.22.19
    发布说明摘录
    Security - body-parser 2.3.0 → 2.4.0 and zod 4.4.3 → 4.6.7, both through @modelcontextprotocol/sdk, close two high advisories that failed CI's production audit: a denial of service from trailing bytes after a compressed request body in HTTP mode (GHSA-27r3-jxmh-p828), and memory exhaustion while validating oversized constrained collections (GHSA-mrhx-c7xc-m3w5). The same update takes fast-uri 3.1.8 → 3.1.9 (four moderate advisories, via ajv), ip-address 10.7.2 → 10.7.5 (GHSA-rxp7-6hxx-x8q5, via express-rate-limit) and qs 6.16.0 → 6.16.1. Lockfile only; the declared rang …
    在 GitHub 查看 ↗
  3. v2.22.18
    发布说明摘录
    Fixed - A client that navigates its tab to another origin keeps working in it, without SAFARI_PROFILE (#172). When the extension served safari_navigate or safari_navigate_and_read, safari.js kept the URL the tab had left as the session's current page, and the tool then released that URL from the session's ownership. Every later write of the same client (click, fill, evaluate) was refused with "current tab (<the URL it left>) was not opened by this MCP session", whichever receipt it passed. A same-origin navigation hid it, because an owned URL that differs only in its query still …
    在 GitHub 查看 ↗

常见问题

必须安装 Safari 扩展吗?
不必须。文档称仅使用 AppleScript 约可运行 80% 的功能;闭合 Shadow DOM、严格 CSP 页面、深层框架状态和智能加载检测需要可选扩展。
它会随意操作我正在使用的标签页吗?
默认不会。服务器只操作本会话打开的标签;若标签追踪丢失会拒绝回退到当前标签。接管已有标签必须设置 SAFARI_MCP_ALLOW_USER_TABS=1 并显式调用 safari_switch_tab,且采用后的用户标签仍不能由工具关闭。
为什么标签能打开,却无法读取或填写页面?
常见原因是没有启用“允许来自 Apple 事件的 JavaScript”。纯 AppleScript 的开关标签操作仍可能成功,但读取页面、执行 JavaScript、填写表单和提取数据会失败。
可以让多个代理同时使用吗?
可以。推荐启动共享 HTTP 守护进程,让各 MCP 会话获得独立标签状态与唯一标记;也可让每个代理使用独立 stdio 进程。若上游客户端复用同一 MCP 会话,则会话隔离无法生效。
软件本身会把浏览数据发送到远程服务吗?
文档称通信仅使用 stdio 和 localhost,不包含遥测或分析,也不向远程服务发送数据;但由 Safari 打开的目标网站仍会正常产生网络流量。
在 GitHub 查看 ↗ 安装 ↓

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents