safari-devtools-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_console_messagesA | List all console messages for the currently selected page since the last navigation. |
| get_console_messageA | Gets a console message by its ID. You can get all messages by calling list_console_messages. |
| clear_consoleA | Clear all captured console messages. |
| list_network_requestsA | List all network requests for the currently selected page since the last navigation. Includes historical requests made before monitoring started (with limited detail). |
| get_network_requestB | Gets a network request by its reqid from the listed requests. |
| clear_networkA | Clear all captured network requests. |
| evaluate_scriptA | Evaluate a JavaScript function inside the currently selected page. Returns the response as JSON, so returned values have to be JSON-serializable. |
| take_screenshotB | Take a screenshot of the page or element. |
| take_snapshotA | Take a text snapshot of the currently selected page based on the DOM/a11y tree. The snapshot lists page elements along with a unique identifier (uid). Always use the latest snapshot. Prefer taking a snapshot over taking a screenshot. |
| wait_forA | Wait for a condition on the page: text content, a CSS selector, or a JS predicate. Returns a snapshot once the condition is met. At least one condition (text, selector, or predicate) must be provided. |
| list_pagesC | Get a list of pages (tabs) open in Safari. |
| select_pageA | Select a page as context for future tool calls. |
| close_pageA | Closes a page by its ID. The last open page cannot be closed. |
| new_pageA | Open a new tab and load a URL. |
| navigate_pageA | Go to a URL, or back, forward, or reload. |
| resize_pageB | Resizes the selected page's window so that the page has specified dimensions. |
| handle_dialogB | If a browser dialog was opened, use this command to handle it. |
| get_page_contentA | Get the page title, URL, and visible text content. |
| get_html_sourceA | Get the full HTML source of the current page. |
| extract_linksA | Extract all links from the current page with their text and href. |
| extract_metaA | Extract meta tags from the current page (og:, twitter:, description, etc.). |
| scrollA | Scroll the page in a direction by a given amount of pixels. |
| scroll_to_elementB | Scroll an element into view by its UID from a snapshot. |
| get_computed_styleA | Get computed CSS styles for an element by its UID from a snapshot. Returns commonly useful properties by default, or specify exact properties. |
| get_cookiesA | Get browser cookies for the current page. Optionally filter by name or domain. |
| set_cookieB | Set a browser cookie with the given name, value, and optional attributes. |
| delete_cookieA | Delete a cookie by name, or delete all cookies when no name is provided. |
| get_storageA | Read from localStorage or sessionStorage. Returns all entries or a specific key. |
| set_storageA | Write a key-value pair to localStorage or sessionStorage. |
| delete_storageA | Delete a key from localStorage or sessionStorage, or clear all entries. |
| clickC | Clicks on the provided element. |
| click_atC | Clicks at the provided coordinates. |
| right_clickB | Right-click (context click) on the provided element. |
| select_optionA | Select an option from a dropdown by value or visible label. |
| hoverC | Hover over the provided element. |
| fillC | Type text into an input, text area or select an option from a element. |
| fill_formB | Fill out multiple form elements at once. |
| type_textB | Type text using keyboard into a previously focused input. |
| dragB | Drag an element onto another element. |
| press_keyA | Press a key or key combination. Use this when other input methods like fill() cannot be used. |
| upload_fileA | Upload a file through a provided file input element. |
| set_color_schemeA | Emulate prefers-color-scheme (light/dark mode) in the current page. Overrides CSS @media rules, the color-scheme property, and JavaScript matchMedia() (including change events) so the page behaves as if the OS preference changed. Use "reset" to restore the system default. |
| get_color_schemeA | Check the currently active color scheme preference (light or dark) as seen by the page, and whether an MCP override is active. |
| set_device_emulationA | Emulate an Apple device by resizing the viewport and overriding device pixel ratio and touch support at the JS level. The user agent is overridden via navigator.userAgent (JS-level only — HTTP request headers are not affected). Choose a preset (iPhone SE, iPhone 14, iPhone 15 Pro, iPhone 16 Pro Max, iPad Mini, iPad Air, iPad Pro 11, iPad Pro 13) or provide custom values. Use reset_device_emulation to restore defaults. |
| reset_device_emulationA | Remove all device emulation overrides and restore the original viewport size, JS-level user agent, device pixel ratio, and touch settings. |
| inspect_viewport_metaA | Parse the viewport meta tag and validate it against iOS Safari best practices. Reports issues like missing width=device-width, disabled zoom (accessibility violation), missing viewport-fit=cover for safe areas, and other common misconfiguration. |
| get_safe_area_insetsA | Read the current CSS safe-area-inset values (top, right, bottom, left) as seen by the page. These are non-zero on notched iPhones when viewport-fit=cover is set. Also checks whether the page uses env(safe-area-inset-*) in its stylesheets. |
| check_ios_web_app_readinessA | Audit the page for iOS Safari "Add to Home Screen" / PWA readiness. Checks apple-touch-icon, apple-mobile-web-app-capable, status bar style, theme-color, manifest link, and splash screen configuration. |
| check_webkit_compatibilityA | Check CSS on the current page against the live Safari session. Extracts every CSS property via structured DOM APIs, runs CSS.supports() in the actual browser, and reports what is broken right now — unsupported properties, missing -webkit- prefixes, and known Safari rendering quirks. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| safari-devtools | Getting started with Safari DevTools MCP — tool overview, workflows, and Safari-specific notes. |
| a11y-debugging | Accessibility auditing workflow — inspect the a11y tree, find WCAG issues, and run automated checks. |
| safari-specific-debugging | Debug Safari/WebKit quirks — CSS prefixes, JS feature gaps, CORS/ITP issues, and cross-browser differences. |
| performance-debugging | Performance analysis — Core Web Vitals, Navigation Timing, resource waterfalls, and Safari-specific optimizations. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/HayoDev/safari-devtools-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server