MCP

用已登入的 Safari 做本機自動化(僅 macOS)

適合在 macOS 上驅動你已經登入的 Safari 做頁面讀取和按引用點擊填寫,前提是 Node.js 20+ 並打開 Safari 的開發者功能與 Apple Events。

官方來源 · safari-mcp

安裝

npx safari-mcp

適合誰

如果你要在自己已經打開、已經登入的 Safari 裡讓助手先看清頁面、再按引用去點或填,這條路徑才對得上。它驅動的是 macOS 自帶的穩定版 Safari,而不是另起一個乾淨的隔離瀏覽器。硬前提是:機器必須是 macOS,並且本機已安裝 Node.js 20+。Windows 或 Linux 在現有說明裡沒有可用步驟。

倉庫把自己放在「繼續用你已登入的 Gmail、GitHub、Ahrefs、Slack、網銀會話」這條線上,並提到原生 WebKit 與背景執行。這意味著助手會碰到真實登入態,而不是演示用的空會話。誰來呼叫,誰就等於獲准看見這些標籤頁上已經出現的內容。

不適合只想在隔離環境點一下頁面、或不想讓助手看見真實帳戶的人。非蘋果系統也沒有第二條安裝路可走。若你的目標是「全新、未登入、用完即棄的會話」,現有說明寫的不是這條路徑。

3 分鐘完成第一次嘗試

官方主路徑只有一條:在已滿足前提的 Mac 上執行

npx safari-mcp

倉庫寫明不必先做全域安裝。可選的永久安裝是 npm install -g safari-mcp,第一次嘗試不要走它。

啟動前先核對這四件事:系統是任意帶 Safari 的 macOS;Node.js 是 20 或更新;Safari 打開 Settings → Advanced → Show features for web developers;再打開 Develop → Allow JavaScript from Apple Events。缺一項,後面的呼叫都沒有依據。

設定位置就是這條啟動命令本身。把它交給你的 MCP 宿主去拉起服務。現有說明沒有給出某個具體用戶端的 JSON 欄位名,因此這裡不補設定範本,也不編造額外的啟動參數。

第一次只做觀察:呼叫 safari_snapshot,讀取目前頁的無障礙樹(accessibility tree)。成功訊號是回傳了頁面狀態,而不是報錯或空樹。這次讀取會看到你正在看的真實頁面結構,包含已登入站點上的可見控件,不能當成零風險,更不能理解成不讀本地、不碰網路。

若同一台機器上會有多個助手同時用 Safari,說明裡給出的共享方式是:

SAFARI_MCP_HTTP=1 SAFARI_MCP_HTTP_PORT=9225 npx safari-mcp

單人第一次試用不必開這項。

使用案例

案例一:看清目前標籤再決定下一步。對已經打開的 Safari 頁面呼叫 safari_snapshot,拿到無障礙樹和頁面狀態。說明把它列為推薦工作流程的第一步,目的就是 Get page state。適合確認你停在哪一頁、有哪些可引用的控件。回傳欄位的完整結構沒有展開,能確認的只有能拿到頁面狀態和無障礙樹。不要把這一步理解成導航或改頁,現有說明沒有給導航類命令。

案例二:按引用做一次互動並回讀。第二步是 safari_click/fill/...,按 ref 點擊或填寫;第三步再跑一次 safari_snapshot 核對結果。這要求你先有案例一裡的 ref,不要憑空點座標。點擊和填寫會改頁面,屬於有副作用的動作;動手前先定確認點——第二次 snapshot 裡對應控件或文案是否按預期變化。工具名寫成 safari_click/fill/...,其餘互動名沒有逐條給出,因此不要自行補未出現的命令。

使用邊界

只覆蓋 macOS。必須是 Node.js 20+,並且打開 Safari 的開發者功能和 Apple Events 的 JavaScript。服務開的是你已經登入的穩定版 Safari,郵件、程式碼託管、分析後台、即時通訊和網銀會話都可能進入助手視野。不要假設存在網路隔離或本地唯讀沙箱。

並發時要用 SAFARI_MCP_HTTP=1 共享守護行程;說明還寫到標籤追蹤失敗時會閉合,而不是去打你正在用的活動標籤。失敗碼、撤銷步驟,以及 safari_snapshot 與 safari_click/fill 之外的工具參數,現有說明都沒有給出。背景執行和更低 CPU 是倉庫自己的對比說法,不能當成對你這台機器的保證。第一次如果只做 snapshot,仍然是在讀真實頁面,請先避開網銀或任何你不打算暴露的標籤。