Safari DevTools MCP

Registre officiel Outils de développement

MCP server for Safari DevTools — browser debugging and automation for AI coding agents

Que pouvez-vous faire avec Safari DevTools MCP ?

  • 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

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

NPM package safari-devtools-mcp
Claude Code
claude mcp add safari-devtools-mcp -- npx -y safari-devtools-mcp@1.8.1
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "safari-devtools-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "safari-devtools-mcp@1.8.1"
            ]
        }
    }
}

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. Safari DevTools MCP
  2. Changelog | Contributing
  3. Why safari-devtools-mcp?
  4. Key features
  5. Requirements
  6. Getting started
  7. Prompts (skills)
  8. Tools (45)
  9. Architecture
  10. Known limitations
  11. Credits
  12. License

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 | Contributing

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:
     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:

PromptDescription
safari-devtoolsGetting started — tool overview, recommended workflow, and Safari-specific notes
a11y-debuggingAccessibility audit — a11y tree inspection, axe-core injection, WCAG checks
safari-specific-debuggingDebug WebKit quirks — CSS prefixes, JS feature gaps, ITP/CORS issues
performance-debuggingPerformance analysis — Navigation Timing, Core Web Vitals, resource waterfall

Tools (45)

Debugging
ToolDescription
list_console_messagesList console messages with filtering by level (log, warn, error)
get_console_messageGet a detailed message including stack trace and arguments
clear_consoleClear all captured console messages
list_network_requestsMonitor network requests — Fetch, XHR, and resource loads
get_network_requestGet full request/response details with headers and body
clear_networkClear all captured network requests
evaluate_scriptExecute JavaScript in the browser context and return results
take_screenshotCapture a PNG screenshot of the page or a specific element
take_snapshotAccessibility-tree snapshot of the DOM with stable UIDs for element targeting
Page content
ToolDescription
get_page_contentGet the page title, URL, and visible text content
get_html_sourceGet the full HTML source of the page
extract_linksExtract all links with their text, href, and rel attributes
extract_metaExtract meta tags (og:, twitter:, description, etc.)
Navigation
ToolDescription
list_pagesList all open Safari tabs across windows
select_pageSwitch to a specific tab
new_pageOpen a new tab and navigate to a URL
close_pageClose a tab
navigate_pageNavigate to a URL, go back, forward, or reload
wait_forWait for specific text to appear on the page
resize_pageResize the browser window
handle_dialogAccept or dismiss browser dialogs (alert, confirm, prompt)
Scroll
ToolDescription
scrollScroll the page in any direction by a given amount
scroll_to_elementScroll an element into view by its UID
CSS inspection
ToolDescription
get_computed_styleGet computed CSS styles for any element by UID
Cookies & storage
ToolDescription
get_cookiesGet browser cookies, optionally filtered by name or domain
set_cookieSet a cookie with name, value, and optional attributes
delete_cookieDelete a cookie by name, or delete all cookies
get_storageRead from localStorage or sessionStorage
set_storageWrite a key-value pair to localStorage or sessionStorage
delete_storageDelete a key or clear all entries from localStorage/sessionStorage
Input automation
ToolDescription
clickClick an element by UID from a snapshot
click_atClick at specific x/y coordinates
right_clickRight-click (context menu) on an element
select_optionSelect an option from a dropdown by value or label
hoverHover over an element
fillType into an input field or select from a dropdown
fill_formFill multiple form fields at once
type_textType text into the currently focused element
dragDrag and drop between elements or coordinates
press_keyPress a key or combination (e.g., Meta+A, Enter)
upload_fileUpload a file through a file input
iOS Safari validation
ToolDescription
inspect_viewport_metaParse the viewport meta tag and validate against iOS best practices (width, zoom, viewport-fit)
get_safe_area_insetsRead CSS safe-area-inset values and check whether the page handles notched devices correctly
check_ios_web_app_readinessAudit the page for Add to Home Screen / PWA readiness (apple-touch-icon, manifest, splash screens, status bar)
check_webkit_compatibilityCheck 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

Questions fréquentes

Qu'est-ce que Safari DevTools MCP ?

MCP server for Safari DevTools — browser debugging and automation for AI coding agents

Comment installer Safari DevTools MCP ?

Il s'exécute sur votre machine. Dans Claude Code : claude mcp add safari-devtools-mcp -- npx -y safari-devtools-mcp@1.8.1. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour Safari DevTools MCP ?

Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.

Safari DevTools MCP est-il open source ?

Oui. Son code est sur GitHub sous licence MIT.

Qui maintient Safari DevTools MCP ?

Il est publié par HayoDev. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.