AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

Safari Devtools Mcp

mcp-hayodev-safari-devtools-mcp · by HayoDev

Safari DevTools MCP — real browser debugging with network interception, DOM inspection, and CSS analysis for AI agents on macOS

No reviews yet
0 installs
51 views
0.0% view→install

Install

$ agentstack add mcp-hayodev-safari-devtools-mcp

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.6 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.6. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-hayodev-safari-devtools-mcp)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
5mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Safari Devtools Mcp? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Safari DevTools MCP

[](https://npmjs.org/package/safari-devtools-mcp) [](https://npmjs.org/package/safari-devtools-mcp) [](https://github.com/HayoDev/safari-devtools-mcp/blob/main/LICENSE) [](https://npmjs.org/package/safari-devtools-mcp)

safari-devtools-mcp lets your coding agent (such as Claude, Cursor, Copilot or Gemini) control and inspect a live Safari browser on macOS. It acts as a Model-Context-Protocol (MCP) server, giving your AI coding assistant access to Safari DevTools for debugging, automation, and testing.

Chrome developers get powerful AI debugging through chrome-devtools-mcp by Google. Safari developers should have something equivalent — this project brings that same experience to Safari, with matching tool names and parameter schemas so you can swap between browsers with minimal friction.

[Changelog](./CHANGELOG.md) | [Contributing](./CONTRIBUTING.md)

> Note: This server exposes browser content (page data, console logs, network traffic) to MCP clients. Avoid browsing sensitive websites or entering credentials while a session is active.

Why safari-devtools-mcp?

This project uses WebDriver for capabilities that scripting alone cannot provide:

  • Network request/response body capture — intercepts fetch and XHR calls with full headers, payloads, and timing
  • DOM snapshots via accessibility tree — stable element UIDs that survive page re-renders, not brittle CSS selectors
  • CSS computed style inspection — read any computed property from any element
  • Cookie and storage management — read, write, and delete cookies, localStorage, and sessionStorage
  • Element-level screenshots — capture individual elements, not just the full viewport
  • Session auto-recovery — detects dead SafariDriver sessions and reconnects transparently

Key features

  • Browser debugging: Capture console logs, inspect network requests, and evaluate JavaScript — with stack traces and full request/response details.
  • Reliable automation: Click, type, fill forms, drag and drop, and press keyboard shortcuts using accessibility-tree snapshots with stable UIDs.
  • Native macOS integration: Tab management via AppleScript for listing, switching, and controlling Safari tabs across windows

Requirements

  • macOS (Safari and SafariDriver are Apple-exclusive)
  • Node.js 18+ (22+ recommended)
  • Safari with remote automation enabled

Safari setup

  1. Open Safari > Settings > Advanced > check "Show features for web developers"
  2. Develop menu > check "Allow Remote Automation"
  3. Authorize SafariDriver:

``bash sudo safaridriver --enable ``

Getting started

Standard MCP config:

{
  "mcpServers": {
    "safari-devtools": {
      "command": "npx",
      "args": ["-y", "safari-devtools-mcp@latest"]
    }
  }
}

Claude Code

claude mcp add safari-devtools -- npx -y safari-devtools-mcp@latest

Or add to your project's .mcp.json using the standard config above.

Claude Desktop

Add the standard config to ~/Library/Application Support/Claude/claude_desktop_config.json.

Cursor

Add the standard config to your Cursor MCP settings.

VS Code

Add the standard config to .vscode/mcp.json.

Copilot CLI

copilot mcp add safari-devtools -- npx -y safari-devtools-mcp@latest

Gemini CLI

gemini mcp add safari-devtools -- npx -y safari-devtools-mcp@latest

Or add the standard config to your ~/.gemini/settings.json.

Gemini Code Assist

Add the standard config to your .gemini/settings.json in the project root.

JetBrains AI Assistant & Junie

Add the standard config to your .junie/mcp.json in the project root.

Raycast

Open "Install MCP Server" in Raycast and fill in:

  • Command: npx
  • Arguments: -y safari-devtools-mcp@latest

Or copy the standard config JSON above before opening the command — Raycast will auto-fill the form.

Visual Studio

Add the standard config to your .vs/mcp.json in the solution root.

Warp

Add the standard config to your Warp MCP settings file at ~/.warp/mcp.json.

From source

git clone https://github.com/HayoDev/safari-devtools-mcp.git
cd safari-devtools-mcp
npm install && npm run build

Then point your MCP client to the built entry point:

{
  "mcpServers": {
    "safari-devtools": {
      "command": "node",
      "args": [
        "/path/to/safari-devtools-mcp/build/src/bin/safari-devtools-mcp.js"
      ]
    }
  }
}

Your first prompt

> Navigate to https://example.com, take a snapshot, and list any console errors.

Slim mode

Use --slim to reduce token usage with shorter tool descriptions. Useful when working with context-limited models or long conversations:

{
  "mcpServers": {
    "safari-devtools": {
      "command": "npx",
      "args": ["-y", "safari-devtools-mcp@latest", "--slim"]
    }
  }
}

Prompts (skills)

The server exposes guided debugging workflows as MCP prompts. Clients that support prompts (e.g. Claude Desktop, Claude Code) can invoke them by name:

| Prompt | Description | | --------------------------- | -------------------------------------------------------------------------------- | | safari-devtools | Getting started — tool overview, recommended workflow, and Safari-specific notes | | a11y-debugging | Accessibility audit — a11y tree inspection, axe-core injection, WCAG checks | | safari-specific-debugging | Debug WebKit quirks — CSS prefixes, JS feature gaps, ITP/CORS issues | | performance-debugging | Performance analysis — Navigation Timing, Core Web Vitals, resource waterfall |

Tools (45)

Debugging

| Tool | Description | | ----------------------- | ----------------------------------------------------------------------------- | | list_console_messages | List console messages with filtering by level (log, warn, error) | | get_console_message | Get a detailed message including stack trace and arguments | | clear_console | Clear all captured console messages | | list_network_requests | Monitor network requests — Fetch, XHR, and resource loads | | get_network_request | Get full request/response details with headers and body | | clear_network | Clear all captured network requests | | evaluate_script | Execute JavaScript in the browser context and return results | | take_screenshot | Capture a PNG screenshot of the page or a specific element | | take_snapshot | Accessibility-tree snapshot of the DOM with stable UIDs for element targeting |

Page content

| Tool | Description | | ------------------ | ----------------------------------------------------------- | | get_page_content | Get the page title, URL, and visible text content | | get_html_source | Get the full HTML source of the page | | extract_links | Extract all links with their text, href, and rel attributes | | extract_meta | Extract meta tags (og:, twitter:, description, etc.) |

Navigation

| Tool | Description | | --------------- | ---------------------------------------------------------- | | list_pages | List all open Safari tabs across windows | | select_page | Switch to a specific tab | | new_page | Open a new tab and navigate to a URL | | close_page | Close a tab | | navigate_page | Navigate to a URL, go back, forward, or reload | | wait_for | Wait for specific text to appear on the page | | resize_page | Resize the browser window | | handle_dialog | Accept or dismiss browser dialogs (alert, confirm, prompt) |

Scroll

| Tool | Description | | ------------------- | -------------------------------------------------- | | scroll | Scroll the page in any direction by a given amount | | scroll_to_element | Scroll an element into view by its UID |

CSS inspection

| Tool | Description | | -------------------- | ---------------------------------------------- | | get_computed_style | Get computed CSS styles for any element by UID |

Cookies & storage

| Tool | Description | | ---------------- | ------------------------------------------------------------------ | | get_cookies | Get browser cookies, optionally filtered by name or domain | | set_cookie | Set a cookie with name, value, and optional attributes | | delete_cookie | Delete a cookie by name, or delete all cookies | | get_storage | Read from localStorage or sessionStorage | | set_storage | Write a key-value pair to localStorage or sessionStorage | | delete_storage | Delete a key or clear all entries from localStorage/sessionStorage |

Input automation

| Tool | Description | | --------------- | ---------------------------------------------------- | | click | Click an element by UID from a snapshot | | click_at | Click at specific x/y coordinates | | right_click | Right-click (context menu) on an element | | select_option | Select an option from a dropdown by value or label | | hover | Hover over an element | | fill | Type into an input field or select from a dropdown | | fill_form | Fill multiple form fields at once | | type_text | Type text into the currently focused element | | drag | Drag and drop between elements or coordinates | | press_key | Press a key or combination (e.g., Meta+A, Enter) | | upload_file | Upload a file through a file input |

iOS Safari validation

| Tool | Description | | ----------------------------- | -------------------------------------------------------------------------------------------------------------- | | inspect_viewport_meta | Parse the viewport meta tag and validate against iOS best practices (width, zoom, viewport-fit) | | get_safe_area_insets | Read CSS safe-area-inset values and check whether the page handles notched devices correctly | | check_ios_web_app_readiness | Audit the page for Add to Home Screen / PWA readiness (apple-touch-icon, manifest, splash screens, status bar) | | check_webkit_compatibility | Check page CSS against the live Safari session via CSS.supports() |

Architecture

MCP Client (Claude, Cursor, etc.)
    | stdio (MCP protocol)
    v
Safari DevTools MCP Server
    |
    v
+-------------------------------+
|  SafariDriver                 |
|  +-- Selenium WebDriver       | <-- Browser automation
|  +-- JS Injection             | <-- Console/Network capture
|  +-- AppleScript (osascript)  | <-- Native tab management
+-------------------------------+
    |
    v
Safari Browser

Known limitations

  • Single session: Safari only allows one WebDriver session at a time. Running multiple instances is not supported.
  • macOS only: Safari and SafariDriver are Apple-exclusive — this server does not work on Linux or Windows.
  • No headless mode: Safari does not support headless operation. A visible browser window is required.
  • Console pre-injection gap: Console messages logged before the capture script is injected are not captured.
  • Network pre-injection gap: Network requests made before injection are backfilled via the Performance API with limited detail (timing and size, but no headers or status codes).
  • PNG only: Safari WebDriver only supports PNG screenshots — no JPEG or WebP. Full-page capture is not available.
  • AppleScript permissions: Tab management features require macOS Accessibility permissions for osascript.

Credits

  • chrome-devtools-mcp by Google/ChromeDevTools — the inspiration and interface standard this project mirrors. Tool names and schemas are intentionally compatible so you can switch between Chrome and Safari seamlessly.
  • safari-mcp-server — prior art for Safari MCP integration that we studied during development.

License

[MIT](LICENSE)

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.6 Imported from the upstream source.