Install
npx safari-mcpPour qui
Si vous voulez qu'un assistant voie d'abord clairement une page dans le Safari déjà ouvert et connecté, puis clique ou remplisse par référence, ce chemin convient. Il pilote le Safari stable livré avec macOS, pas un navigateur isolé propre lancé à part. Prérequis durs : la machine doit être macOS, et Node.js 20+ doit déjà être installé ici. Windows ou Linux n'ont aucune étape utilisable dans la doc existante.
Le dépôt se place sur la ligne « continuer à utiliser les sessions Gmail, GitHub, Ahrefs, Slack et banque en ligne déjà connectées », et mentionne WebKit natif et exécution en arrière-plan. L'assistant rencontre donc un vrai état de connexion, pas une session de démo vide. Qui appelle est traité comme autorisé à voir ce qui est déjà sur ces onglets.
Il ne convient pas à qui veut seulement taper une page en isolation, ou ne veut pas que l'assistant voie de vrais comptes. Les systèmes non Apple n'ont pas non plus de second chemin d'installation. Si le but est une « session neuve, déconnectée, jetable », la doc existante ne décrit pas ce chemin.
Premier essai en 3 minutes
Le chemin principal officiel n'en a qu'un : sur un Mac qui satisfait déjà les prérequis, exécuter
npx safari-mcp
Le dépôt dit qu'une installation globale n'est pas d'abord nécessaire. L'installation permanente optionnelle est npm install -g safari-mcp ; ne pas la prendre au premier essai.
Avant le démarrage, vérifier ces quatre points : le système est un macOS quelconque avec Safari ; Node.js est 20 ou plus ; Safari a Settings → Advanced → Show features for web developers activé ; puis Develop → Allow JavaScript from Apple Events est activé. Un point manquant : les appels suivants n'ont plus de base.
L'emplacement de configuration est cette commande de démarrage elle-même. La remettre à votre hôte MCP pour lancer le service. La doc existante ne donne pas de noms de champs JSON d'un client précis ; ne pas ajouter de modèle de config ni inventer de drapeaux de démarrage.
La première fois, seulement observer : appeler safari_snapshot et lire l'accessibility tree de la page actuelle. Le signal de succès est un état de page renvoyé, pas une erreur ni un arbre vide. Cette lecture voit la vraie structure de page que vous regardez, y compris les contrôles visibles des sites connectés. Ce n'est pas un risque zéro, et ce n'est pas « pas de lecture locale, pas de réseau ».
Si plusieurs assistants sur la même machine utilisent Safari en même temps, la forme partagée dans la doc est :
SAFARI_MCP_HTTP=1 SAFARI_MCP_HTTP_PORT=9225 npx safari-mcp
Un premier essai seul n'a pas besoin de l'ouvrir.
Cas d'usage
Cas 1 : voir l'onglet actuel avant de décider la suite. Appeler safari_snapshot sur la page Safari déjà ouverte pour obtenir l'accessibility tree et l'état de page. La doc le liste comme première étape du flux recommandé, but Get page state. Convient pour confirmer sur quelle page vous êtes et quels contrôles sont référençables. La structure complète des champs de retour n'est pas dépliée ; on ne peut confirmer que l'obtention de l'état de page et de l'accessibility tree. Ne pas lire cette étape comme une navigation ou un changement de page ; la doc existante ne donne pas de commandes de navigation.
Cas 2 : interagir une fois par référence et relire. L'étape deux est safari_click/fill/..., clic ou saisie par ref ; l'étape trois relance safari_snapshot pour vérifier. Il faut d'abord le ref du cas 1 ; ne pas cliquer des coordonnées dans le vide. Clics et saisies changent la page et ont des effets de bord ; avant d'agir, fixer un point de confirmation — si le contrôle ou le texte correspondant a changé comme prévu dans le second snapshot. Le nom d'outil est écrit safari_click/fill/... ; les autres noms d'interaction ne sont pas listés un par un, donc ne pas inventer de commandes non documentées.
Limites d'usage
macOS seulement. Node.js 20+ est requis, et les fonctions développeur Safari plus JavaScript from Apple Events doivent être activés. Le service ouvre le Safari stable déjà connecté ; courrier, hébergement de code, backends d'analyse, messagerie et sessions bancaires peuvent entrer dans le champ de l'assistant. Ne pas supposer d'isolation réseau ni de bac à sable local en lecture seule.
En concurrence, partager un démon avec SAFARI_MCP_HTTP=1 ; la doc dit aussi qu'en cas d'échec de suivi d'onglet il se ferme, au lieu de frapper l'onglet actif que vous utilisez. Codes d'échec, étapes d'annulation et paramètres d'outils hors safari_snapshot et safari_click/fill sont absents de la doc existante. Exécution en arrière-plan et CPU plus bas sont des comparaisons du dépôt, pas une garantie pour cette machine. Si le premier essai n'est qu'un snapshot, il lit quand même une vraie page ; éviter d'abord les onglets bancaires ou tout onglet que vous n'entendez pas exposer.