SPB Git

Repository Public Research preview

agent-registry.json 7.2 KB 230 lines json

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
Files main
Menu

Theme