safari_navigateNavigate to a URL in Safari. Waits for page to fully load.
safari_go_backGo back in browser history
safari_go_forwardGo forward in browser history
safari_reloadReload the current page
safari_read_pageRead page text content (title, URL, body text). Use for reading article text or page content. For interacting with elements, prefer safari_snapshot (g
safari_get_sourceGet HTML source of current page
safari_snapshotPREFERRED way to see page state. Returns accessibility tree with ref IDs for every interactive element. Use refs with click/fill/type instead of CSS s
safari_navigate_and_readNavigate to a URL and return the page content in one step — saves 1 full round-trip vs navigate+read_page. Use instead of safari_navigate + safari_rea
safari_clickClick element. Use ref (from snapshot), selector, text, or x/y. Works on React/Airtable/virtual DOM apps via full PointerEvent+MouseEvent sequence + R
safari_click_and_readClick an element then return the updated page — saves 1 full round-trip vs separate click+read_page. Handles both React Router navigation and full pag
safari_double_clickDouble-click an element by CSS selector or x/y coordinates (e.g. to select a word in text)
safari_right_clickRight-click (context menu) an element by CSS selector or x/y coordinates
safari_native_clickOS-level mouse click via macOS CGEvent — produces isTrusted: true events that pass WAF/bot detection (G2, Cloudflare, etc.). Use when regular safari_c
safari_native_hoverOS-level mouse hover via macOS CGEvent — moves the real cursor to an element to trigger native :hover / mouseenter handlers. Use for obfuscated UIs wh
safari_native_keyboardOS-level keyboard event via macOS CGEvent — sends a real keypress (with optional modifiers) to the Safari window WITHOUT activating Safari or stealing
safari_native_typeInsert text into ANY editor via OS-level clipboard paste (CGEvent Cmd+V targeted to Safari window). Unlike safari_fill which manipulates DOM directly
safari_fillFill/replace value in an input, textarea, select, OR contenteditable (rich text). Handles React controlled inputs, ProseMirror, Draft.js, and Google C
safari_clear_fieldClear an input field
+12 more tools
We re-grade npm:safari-mcp on a schedule and alert your Slack/webhook the moment its tools change or its grade drops — rug-pull insurance for the connection.
Add the wmcp.sh trust oracle as an MCP server and call grade_mcp_server / check_mcp_drift in your agent's pre-connection gate:
https://wmcp.sh/mcp/trust
readOnly vs observed behavior) layer on via the wmcp.sh proxy.