Repository Public Research preview
1{2 "schemaVersion": "1.0",3 "name": "@spboucher/safari-mcp",4 "version": "1.0.1",5 "type": "mcp-server",6 "description": "MCP server that drives Safari on macOS through AppleScript: navigation, reading, forms, uploads, downloads with the page's session, screenshots. Works in its own window, with domain policy and sensitive-field guards.",7 "license": "MIT",8 "keywords": [9 "safari",10 "applescript",11 "macos",12 "browser-automation",13 "mcp",14 "web-navigation",15 "automation"16 ],17 "compatibility": [18 {19 "client": "claude-code",20 "platform": "macos"21 },22 {23 "client": "codex",24 "platform": "macos"25 },26 {27 "client": "cursor",28 "platform": "macos"29 },30 {31 "client": "generic-mcp",32 "platform": "macos"33 }34 ],35 "permissions": [36 "shell",37 "network",38 "browser",39 "filesystem:read",40 "filesystem:write"41 ],42 "mcp": {43 "transport": "stdio",44 "command": "node",45 "args": [46 "server.mjs"47 ],48 "env": [49 {50 "name": "SAFARI_MCP_ALLOW_DOMAINS",51 "description": "Comma-separated sites the server may visit (with their subdomains). Empty: any http(s) site.",52 "required": false,53 "secret": false54 },55 {56 "name": "SAFARI_MCP_BLOCK_DOMAINS",57 "description": "Comma-separated sites the server must never visit. Wins over the allow list.",58 "required": false,59 "secret": false60 },61 {62 "name": "SAFARI_MCP_FILE_ROOT",63 "description": "Only directory used for uploads, downloads and screenshots (default: working directory).",64 "required": false,65 "secret": false66 },67 {68 "name": "SAFARI_MCP_SCOPE",69 "description": "Set to \"all\" to let the server see and act on tabs the user opened. Default: its own window only.",70 "required": false,71 "secret": false72 },73 {74 "name": "SAFARI_MCP_ALLOW_EVAL",75 "description": "Set to 1 to enable the evaluate_js tool.",76 "required": false,77 "secret": false78 },79 {80 "name": "SAFARI_MCP_DIALOGS",81 "description": "\"accept\" (default) or \"dismiss\": how page confirm() dialogs are answered.",82 "required": false,83 "secret": false84 }85 ],86 "tools": [87 {88 "name": "safari_status",89 "description": "Check that Safari can be driven and show the active policy"90 },91 {92 "name": "open_url",93 "description": "Open a URL in the session window and wait for it"94 },95 {96 "name": "navigate",97 "description": "Load a URL, go back or forward, reload"98 },99 {100 "name": "list_tabs",101 "description": "Tabs of the session window"102 },103 {104 "name": "select_tab",105 "description": "Switch tab"106 },107 {108 "name": "close_tab",109 "description": "Close a session tab or the session window"110 },111 {112 "name": "resize_window",113 "description": "Resize the session window"114 },115 {116 "name": "page_info",117 "description": "URL, title, load state, dialogs, cross-origin frames"118 },119 {120 "name": "snapshot",121 "description": "Interactive elements with refs, names, values and state"122 },123 {124 "name": "read_text",125 "description": "Visible text of the page or an element"126 },127 {128 "name": "read_html",129 "description": "HTML of the page or an element"130 },131 {132 "name": "query_elements",133 "description": "Elements matching a CSS selector"134 },135 {136 "name": "list_links",137 "description": "Links with their text"138 },139 {140 "name": "extract_tables",141 "description": "Tables as headers and rows"142 },143 {144 "name": "list_forms",145 "description": "Forms and their fields"146 },147 {148 "name": "click",149 "description": "Click an element and report any navigation"150 },151 {152 "name": "hover",153 "description": "Hover an element"154 },155 {156 "name": "fill",157 "description": "Fill a field (sensitive fields need confirmation)"158 },159 {160 "name": "fill_form",161 "description": "Fill several fields in one call"162 },163 {164 "name": "select_option",165 "description": "Choose an option of a select"166 },167 {168 "name": "set_checked",169 "description": "Check or uncheck"170 },171 {172 "name": "press_key",173 "description": "Send a key; Enter submits the form"174 },175 {176 "name": "submit_form",177 "description": "Submit a form"178 },179 {180 "name": "scroll",181 "description": "Scroll the page or to an element"182 },183 {184 "name": "wait_for",185 "description": "Wait for a selector, text, URL or load"186 },187 {188 "name": "upload_file",189 "description": "Attach a local file to a file input"190 },191 {192 "name": "download",193 "description": "Download a URL with the page's session"194 },195 {196 "name": "fetch_text",197 "description": "GET text or JSON with the page's session"198 },199 {200 "name": "screenshot",201 "description": "Capture the session window to a PNG, with a preview"202 },203 {204 "name": "evaluate_js",205 "description": "Run JavaScript in the page (off unless the operator enables it)"206 }207 ]208 },209 "examples": [210 {211 "title": "Open a page, read it, screenshot it, close it (Claude Code)",212 "client": "claude-code",213 "image": "examples/claude-code.png",214 "alt": "Terminal screenshot of a Claude Code session using safari-mcp: the prompt, the tool or script calls, and the agent's answer.",215 "prompt": "With the safari MCP tools: open https://example.com in a new Safari window of your own, read the page title and the main heading, list the links on the page, save a screenshot as example.png in the current folder, then close the window you opened. Report in at most 8 lines.",216 "caption": "The server opens its own Safari window, reads the title and links, saves a screenshot and closes what it opened. Real session, Claude Code 2.1.322 with Fable 5.2, with version 1.0.0 installed from this registry; inputs are test fixtures.",217 "capturedAt": "2026-11-10"218 },219 {220 "title": "Open a page, read it, screenshot it, close it (Codex)",221 "client": "codex",222 "image": "examples/codex.png",223 "alt": "Terminal screenshot of a Codex session using safari-mcp: the prompt, the tool or script calls, and the agent's answer.",224 "prompt": "With the safari MCP tools: open https://example.com in a new Safari window of your own, read the page title and the main heading, list the links on the page, save a screenshot as example.png in the current folder, then close the window you opened. Report in at most 8 lines.",225 "caption": "The server opens its own Safari window, reads the title and links, saves a screenshot and closes what it opened. Real session, Codex CLI 0.167.1 with GPT-6.1-Sol, with version 1.0.0 installed from this registry; inputs are test fixtures.",226 "capturedAt": "2026-11-10"227 }228 ]229}230