Choix techniques
Un client DevTools écrit à la main avec 27 méthodes autorisées, des flux standard au lieu d'un port, une fenêtre de confirmation à laquelle le client du modèle ne peut pas répondre, et les options écartées avec ce qui les rouvrirait.
Python, quatre dépendances épinglées
Le serveur est un paquet Python (3.12 ou plus récent). Ses dépendances d’exécution
sont épinglées à des versions exactes dans pyproject.toml : mcp 1.25.0 (le SDK
MCP), websockets 15.0.1, pillow 12.0.0 et pydantic 2.12.5. Aucune
bibliothèque d’automatisation de navigateur n’en fait partie.
Un client DevTools écrit à la main
Avec une bibliothèque d’automatisation générale, ce que le serveur peut envoyer au
navigateur est tout ce que la bibliothèque peut envoyer. Le serveur a plutôt son
propre client du Chrome DevTools Protocol, et les méthodes qu’il peut appeler
forment une liste de 27, dans un seul module ; un test compare cette liste à
chaque nom de méthode que le code emploie. Les scripts n’atteignent une page que
depuis une table de textes constants de ce module. Les arguments d’un outil
voyagent dans le champ arguments du protocole et ne sont jamais écrits dans un
script, si bien qu’une valeur choisie par le modèle ne peut pas devenir du code.
Des flux standard, aucun port
Le serveur parle à son client par l’entrée et la sortie standard et ne tient aucun socket en écoute. Un port en écoute peut être atteint par n’importe quel processus de la machine ; les flux standard lient le serveur au seul client qui l’a lancé. Il tourne avec une limite de fichier core à zéro et n’écrit sur sa sortie standard que le protocole.
Une confirmation à laquelle le client ne peut pas répondre
Le client MCP agit pour le modèle, et peut répondre seul à une demande. Un paiement,
une suppression irréversible ou un changement de secret se confirme donc dans une
fenêtre que le serveur ouvre avec kdialog ou zenity, lancé sans shell, qui
montre l’état lu dans le navigateur à cet instant : l’origine, le geste, le texte de
l’élément, la cible du formulaire, les montants trouvés. Le refus est le bouton par
défaut là où le programme de fenêtre le permet ; l’absence de réponse en 90 secondes
vaut refus. Une réponse couvre une action. La seule exception, une demande par le
client (élicitation), exige une déclaration de votre
profil de l’opérateur.
Ce qui arme le verrou, c’est un vocabulaire écrit dans le code et les champs de
carte de la page. L’intent_category du modèle et les heuristiques de la page
peuvent ajouter un verrou ; rien n’en retire un, et le profil de l’opérateur ne peut
pas les configurer.
Écarté, et ce qui le rouvrirait
- Playwright ou une bibliothèque semblable. Ce que le serveur envoie serait la liste de la bibliothèque, pas celle du projet. Le rouvrirait : un navigateur dont le protocole n’est plus parlé par le client écrit à la main.
- Un outil qui exécute un script. Il contournerait les repères, les contrôles d’identité, le verrou et les masques, et lirait tout ce qu’une page contient. Le rouvrirait : une tâche de votre part que les outils ne savent pas faire, alors sous la forme d’un nouveau script constant, jamais d’un script que le modèle écrit.
- Lire à l’intérieur des cadres. Un cadre d’une autre origine est un autre site, souvent de paiement ou de publicité. Le rouvrirait : un site de votre liste dont le contenu nécessaire se trouve dans un cadre de la même origine.
- Un transport réseau. Un port en écoute est joignable par tout processus local. Le rouvrirait : un client dont vous avez besoin et qui n’atteint les serveurs que par le réseau.
- Des plafonds plus hauts. Ils bornent ce que le modèle reçoit. Le rouvrirait : une page dont la seule couche est coupée avec l’ordre actuel.
- Un outil qui convertit les identifiants. Le modèle recevrait le chemin d’un fichier de secrets. Le rouvrirait : un opérateur sans shell, et un moyen de garder les valeurs hors de la session du modèle.
- Un contexte de navigateur propre au serveur. Ses onglets ne partageraient pas vos sessions ouvertes, qui sont la raison d’être du projet. Le rouvrirait : un navigateur qui accepte le réglage de téléchargement pour un seul onglet.
Diwall, le projet dont celui-ci descend, donne lui aussi à un modèle une image avec des éléments numérotés et l’arbre d’accessibilité ; son navigateur et son transport ne sont pas ceux-ci. Le lien entre les deux projets est sur Le projet.