I Built an MCP Server for Safari Because Chrome Was Melting My MacBook
Last month I noticed something: every time I used Chrome DevTools MCP or Playwright MCP with Claude, my MacBook Pro fans would spin up. Activity Monitor showed Chrome eating 40-60% CPU just sitting...

Source: DEV Community
Last month I noticed something: every time I used Chrome DevTools MCP or Playwright MCP with Claude, my MacBook Pro fans would spin up. Activity Monitor showed Chrome eating 40-60% CPU just sitting there with a debug port open. I use Safari as my daily browser. All my logins are there — Gmail, GitHub, Ahrefs, AWS console. Why am I launching a second browser just so an AI agent can click buttons? So I built Safari MCP — a native MCP server that controls Safari directly via AppleScript. No Chrome. No Puppeteer. No headless anything. The Architecture (It's Embarrassingly Simple) AI Agent (Claude, Cursor, etc.) ↓ MCP Protocol (stdio) Safari MCP Server (Node.js) ↓ Persistent osascript process AppleScript → Safari ↓ do JavaScript in tab N Your real browser DOM The entire server is essentially two files: index.js — MCP tool definitions safari.js — AppleScript + JavaScript bridge The key trick: instead of spawning a new osascript process for every command (~80ms each), I keep a single persiste