SAFARI TOOLS

91 tools from the Safari MCP Server, categorised by risk level.

READ 29 tools
Read safari_accessibility_snapshot Get the accessibility tree of the page (roles, ARIA labels, focusable elements, form states). Essential for... Read safari_analyze_page Full page analysis in ONE call: title, URL, meta tags, OG, headings, link stats, image stats, forms, and te... Read safari_clipboard_read Read the current clipboard content (text) Read safari_console_filter Get console messages filtered by level (must call safari_start_console first) Read safari_css_coverage Analyze CSS coverage: find unused CSS rules across all stylesheets. Shows coverage percentage per stylesheet. Read safari_detect_forms Auto-detect all forms on the page with their fields, types, selectors, and submit buttons. Great for automa... Read safari_extract_images Extract all images with src, alt, dimensions, loading strategy, viewport visibility Read safari_extract_links Extract all links with href, text, rel, target, external/nofollow detection Read safari_extract_meta Extract all meta tags: title, description, canonical, OG tags, Twitter cards, JSON-LD, alternate languages,... Read safari_extract_tables Extract HTML tables as structured JSON (headers + rows). Perfect for scraping data tables. Read safari_get_computed_style Get computed CSS styles for an element. Optionally filter specific properties. Read safari_get_console Get captured console messages (must call safari_start_console first) Read safari_get_cookies Get cookies for the current page Read safari_get_element Get detailed info about an element (tag, text, rect, attributes, visibility) Read safari_get_indexed_db Read records from an IndexedDB database store Read safari_get_source Get HTML source of current page Read safari_list_indexed_dbs List all IndexedDB databases on the current page Read safari_list_tabs List all open tabs in Safari with their titles and URLs Read safari_local_storage Get localStorage data for the current page Read safari_mock_route Intercept network requests matching a URL pattern and return a mock response. Works with both fetch and XHR... Read safari_network Quick network overview via Performance API (no setup needed). Shows URLs and timing for resources loaded by... Read safari_network_details Get captured network requests with full details (must call safari_start_network_capture first) Read safari_query_all Find all elements matching a CSS selector (returns tag, text, href, value) Read safari_read_page Read page text content (title, URL, body text). Use for reading article text or page content. For interacti... Read safari_screenshot Take a visual screenshot (base64 JPEG). EXPENSIVE — use safari_snapshot instead for most tasks. Only use sc... Read safari_screenshot_element Take a screenshot of a specific element (by CSS selector). Returns base64 PNG image. Read safari_session_storage Get sessionStorage data for the current page Read safari_snapshot PREFERRED way to see page state. Returns accessibility tree with ref IDs for every interactive element. Use... Read safari_verify_state Verify the framework-level state of an editor/input matches the expected value. Returns JSON {match, mode, ...
WRITE 40 tools
Write safari_click Click element. Use ref (from snapshot), selector, text, or x/y. Works on React/Airtable/virtual DOM apps vi... Write safari_click_and_read Click an element then return the updated page — saves 1 full round-trip vs separate click+read_page. Handle... Write safari_click_and_wait Click an element AND wait for the result (page load or element). Use instead of click + wait_for separately. Write safari_clipboard_write Write text to the system clipboard Write safari_close_tab Close the current tab Write safari_double_click Double-click an element by CSS selector or x/y coordinates (e.g. to select a word in text) Write safari_drag Drag an element to another element or position. Use CSS selectors or x/y coordinates. Write safari_export_storage Export all storage state (cookies + localStorage + sessionStorage) as JSON — useful for saving and restorin... Write safari_fill Fill/replace value in an input, textarea, select, OR contenteditable (rich text). Handles React controlled ... Write safari_fill_and_submit Fill a form AND submit it in one operation. Finds submit button automatically if not specified. Write safari_fill_form Fill multiple form fields at once Write safari_go_back Go back in browser history Write safari_go_forward Go forward in browser history Write safari_handle_dialog Set up handler for the next alert/confirm/prompt dialog Write safari_hover Hover over element. Use ref, selector, or x/y Write safari_import_storage Import storage state from JSON (as exported by safari_export_storage) — restores cookies, localStorage, ses... Write safari_native_click OS-level mouse click via macOS CGEvent — produces isTrusted: true events that pass WAF/bot detection (G2, C... Write safari_native_keyboard OS-level keyboard event via macOS CGEvent — sends a real keypress (with optional modifiers) to the Safari w... Write safari_native_type Insert text into ANY editor via OS-level clipboard paste (CGEvent Cmd+V targeted to Safari window). Unlike ... Write safari_override_geolocation Override the browser Write safari_paste_image Paste an image from a local file into the focused element via JS DataTransfer (no clipboard, no focus steal... Write safari_press_key Press a keyboard key (enter, tab, escape, arrows, etc). Supports modifiers (cmd, shift, alt, ctrl). Write safari_react_select_list_options List available options of a react-select v5 dropdown without opening the menu. Returns JSON {ok, total, opt... Write safari_react_select_set Set a value in a react-select v5 dropdown by walking React fiber to find the Select component and invoking ... Write safari_reload Reload the current page Write safari_reload_extension Hot-reload the Safari MCP Bridge extension — forces it to reload its own code from disk without requiring m... Write safari_replace_editor Replace ALL content in a code editor (Monaco, CodeMirror, Ace, ProseMirror). Use ONLY for code editors — Ai... Write safari_resize Resize the Safari window Write safari_right_click Right-click (context menu) an element by CSS selector or x/y coordinates Write safari_save_pdf Save the current page as a PDF file. Uses screencapture + PDF rendering (no Safari UI interaction needed). Write safari_scroll Scroll the page up or down by a specified amount Write safari_scroll_to Scroll to a specific position on the page Write safari_scroll_to_element Scroll to element by CSS selector OR text. For virtual DOM (Airtable) use text — scrolls down until text ap... Write safari_select_option Select an option in a native <select> dropdown. Sets .value and dispatches change event. Pass Write safari_set_cookie Set a cookie on the current page Write safari_set_local_storage Set a value in localStorage Write safari_set_session_storage Set a value in sessionStorage Write safari_switch_tab Switch to a specific tab by index (use safari_list_tabs to see indices). All subsequent commands (click, fi... Write safari_type_text Type text character-by-character with realistic key events. Best for: search boxes (triggers autocomplete),... Write safari_upload_file Upload a file to a <input type=
EXECUTE 13 tools
Execute safari_emulate Emulate a mobile device by resizing window and setting user agent. Devices: iphone-14, iphone-14-pro-max, i... Execute safari_evaluate Execute JavaScript in the current page. Automatically falls back to AppleScript when CSP blocks execution (... Execute safari_native_hover OS-level mouse hover via macOS CGEvent — moves the real cursor to an element to trigger native :hover / mou... Execute safari_navigate Navigate to a URL in Safari. Waits for page to fully load. Execute safari_navigate_and_read Navigate to a URL and return the page content in one step — saves 1 full round-trip vs navigate+read_page. ... Execute safari_new_tab Open a new tab, optionally with a URL Execute safari_performance_metrics Get detailed performance metrics: navigation timing, Web Vitals (FCP, LCP, CLS), resource breakdown, memory... Execute safari_run_script Batch multiple Safari actions in ONE call. Steps: [{action, args}]. Actions match other safari_* tool names... Execute safari_start_console Start capturing console messages (log, warn, error, info). Call once per page. Execute safari_start_network_capture Start capturing detailed network requests (fetch + XHR) with headers, status, timing. Call once per page. I... Execute safari_wait Wait for a fixed time in milliseconds. Use only when you need a brief pause between actions. PREFER safari_... Execute safari_wait_for Wait for an element or text to appear on the page Execute safari_wait_for_new_tab Wait for a new tab to appear (e.g. after OAuth login click opens popup). Automatically switches to the new ...

The managed route: connect Safari through the PolicyLayer gateway — every tool call above is checked against your policy before it runs, with a full audit log.

DIRECT INSTALL (UNMANAGED) npx -y safari-mcp
How many tools does the Safari MCP server have? +

The Safari MCP server exposes 91 tools across 4 categories: Read, Write, Destructive, Execute.

How do I enforce policies on Safari tools? +

Route the Safari server through the PolicyLayer gateway. Define allow, deny, or approval rules per tool in the dashboard — they are enforced on every call before it reaches the server.

What risk categories do Safari tools fall into? +

Safari tools are categorised as Read (29), Write (40), Destructive (9), Execute (13). Each category has a recommended default policy.

Let agents act without letting them run wild.

Route your MCP servers through PolicyLayer and every tool call is checked against your policy before it runs — allow, deny, or require approval. Per-identity grants. Full audit log. Live in minutes.

Free to start. No card required.

4,600+ MCP servers and 31,000+ tools scanned and risk-classified.

// GET IN TOUCH

Have a question or want to learn more? Send us a message.

Message sent.

We'll get back to you soon.