The Problem: Chrome Is Draining Your MCP Resources
If you're using Claude Code with browser automation tools, you're probably running Chromium in the background. According to the MCP server registry, all 13+ browser automation servers require Chrome DevTools Protocol, Puppeteer, or Playwright with Chromium. This creates a hidden resource drain: Chrome processes sitting idle with debug ports open can consume 30-40% CPU on MacBooks, while Safari with actual tabs open uses less than 1%.
The Solution: Safari MCP
Safari MCP is a native MCP server that controls Safari directly through AppleScript and JavaScript—no Chrome, no Puppeteer, no WebDriver. It works with your existing Safari sessions, so you don't need to log in again or run duplicate browser processes.
Installation (2 Minutes)
# Install globally
npm install -g safari-mcp
# Or run directly
npx -y safari-mcp
One-Time Safari Setup
- Safari → Settings → Advanced → Show features for web developers
- Safari → Develop → Allow JavaScript from Apple Events
Configure for Claude Code
Add to ~/.mcp.json:
{
"mcpServers": {
"safari": {
"command": "npx",
"args": ["-y", "safari-mcp"]
}
}
}
That's it. No Chrome installation, no debug ports, no Playwright browser binaries.
Why It Works: Dual-Engine Architecture
Safari MCP isn't "just AppleScript." It uses a dual-engine approach:
Engine 1: AppleScript + Swift Daemon (~5ms per command)
A persistent Swift helper process eliminates the 80ms overhead of spawning new osascript processes for each command.
Engine 2: Safari Extension (optional, for advanced cases)
Handles what AppleScript can't: closed Shadow DOM (Reddit, Web Components), strict CSP sites, and deep framework state (React Fiber, Vue reactivity). The server automatically uses the extension when available, falling back to AppleScript seamlessly.
80 Tools You Can Use Right Now
Safari MCP ships with comprehensive tooling:
Navigation & Reading: safari_navigate, safari_read_page, safari_navigate_and_read (combines both in one round-trip)
Interaction: safari_click (CSS selector, visible text, or coordinates), safari_double_click, safari_right_click
Forms: safari_fill (React/Vue/Angular compatible), safari_fill_form (batch), safari_fill_and_submit
Screenshots & PDF: safari_screenshot (viewport or full page), safari_screenshot_element, safari_save_pdf
Network: safari_start_network_capture, safari_mock_route (intercept fetch/XHR), safari_throttle_network (simulate 3G/4G/offline)
Storage: Full cookie, localStorage, sessionStorage, and IndexedDB access with safari_export_storage/safari_import_storage for backing up entire sessions as JSON.
Data Extraction: safari_extract_tables (structured JSON), safari_extract_meta (OG, Twitter, JSON-LD)
Advanced: safari_css_coverage (find unused CSS), safari_analyze_page (full analysis in one call), safari_emulate (device emulation)
Solves the React Form Problem
Most browser automation tools fail with React forms because React's synthetic event system doesn't see direct value assignments. Safari MCP handles this correctly by default using native property setters that trigger React's change detection.
When to Keep Using Chromium Tools
Stick with Chromium-based MCP servers if:
- You need headless browser automation (CI/CD pipelines)
- You require Chrome DevTools Protocol features not available in Safari
- You're developing cross-browser compatibility tests
For 95% of daily Claude Code tasks—reading documentation, filling forms, extracting data, testing UIs—Safari MCP is faster, lighter, and more integrated with your existing workflow.






