Technische Entscheidungen
Ein von Hand geschriebener DevTools-Client mit 27 erlaubten Methoden, Standardströme statt eines Ports, ein Bestätigungsfenster, das der Client des Modells nicht beantworten kann, und die verworfenen Optionen mit dem, was sie wieder öffnen würde.
Python, vier festgelegte Abhängigkeiten
Der Server ist ein Python-Paket (3.12 oder neuer). Seine Laufzeitabhängigkeiten
sind in pyproject.toml auf genaue Versionen festgelegt: mcp 1.25.0 (das
MCP-SDK), websockets 15.0.1, pillow 12.0.0 und pydantic 2.12.5. Eine
Bibliothek zur Browserautomatisierung ist nicht darunter.
Ein von Hand geschriebener DevTools-Client
Mit einer allgemeinen Automatisierungsbibliothek ist das, was der Server an den
Browser senden kann, alles, was die Bibliothek senden kann. Der Server hat
stattdessen einen eigenen Client für das Chrome DevTools Protocol, und die
Methoden, die er aufrufen darf, sind eine Liste von 27, in einem Modul; ein
Test vergleicht diese Liste mit jedem Methodennamen, den der Code verwendet.
Skripte erreichen eine Seite nur aus einer Tabelle konstanter Texte in diesem
Modul. Die Argumente eines Werkzeugs reisen im Feld arguments des Protokolls
und werden nie in ein Skript geschrieben, sodass ein Wert, den das Modell wählt,
nicht zu Code werden kann.
Standardströme, kein Port
Der Server spricht mit seinem Client über Standardeingabe und Standardausgabe und hält keinen lauschenden Socket. Ein lauschender Port ist für jeden Prozess des Rechners erreichbar; Standardströme binden den Server an den einen Client, der ihn gestartet hat. Er läuft mit einer Core-Datei-Grenze von null und schreibt auf seine Standardausgabe nichts außer dem Protokoll.
Eine Bestätigung, die der Client nicht beantworten kann
Der MCP-Client handelt für das Modell und kann eine Anfrage von selbst
beantworten. Darum wird eine Zahlung, eine unwiderrufliche Löschung oder eine
Änderung eines Geheimnisses in einem Fenster bestätigt, das der Server mit
kdialog oder zenity öffnet, ohne Shell gestartet, und das den in diesem
Moment im Browser gelesenen Zustand zeigt: den Origin, die Geste, den Text des
Elements, das Ziel des Formulars, die gefundenen Beträge. Die Ablehnung ist die
Standardschaltfläche, wo das Fensterprogramm es zulässt; keine Antwort innerhalb
von 90 Sekunden gilt als Ablehnung. Eine Antwort gilt für eine Aktion. Die
einzige Ausnahme, eine Anfrage über den Client (Elicitation), braucht eine
Erklärung Ihres Bedienerprofils.
Die Sperre löst ein im Code geschriebenes Vokabular und die Kartenfelder der
Seite aus. Die intent_category des Modells und die Heuristiken der Seite können
eine Sperre hinzufügen; nichts entfernt eine, und das Bedienerprofil kann sie
nicht konfigurieren.
Verworfen, und was es wieder öffnen würde
- Playwright oder eine ähnliche Bibliothek. Was der Server sendet, wäre die Liste der Bibliothek, nicht die des Projekts. Würde es wieder öffnen: ein Browser, dessen Protokoll der von Hand geschriebene Client nicht mehr sprechen kann.
- Ein Werkzeug, das ein Skript ausführt. Es würde Markierungen, Identitätsprüfungen, die Sperre und die Masken umgehen und alles lesen, was eine Seite enthält. Würde es wieder öffnen: eine Aufgabe von Ihnen, die die Werkzeuge nicht erledigen können, dann als neues konstantes Skript, nie als eines, das das Modell schreibt.
- Lesen innerhalb von Frames. Ein Frame eines anderen Origins ist eine andere Website, oft eine für Zahlungen oder Werbung. Würde es wieder öffnen: eine Website Ihrer Liste, deren benötigter Inhalt in einem Frame desselben Origins liegt.
- Ein Netzwerktransport. Ein lauschender Port ist für jeden lokalen Prozess erreichbar. Würde ihn wieder öffnen: ein Client, den Sie brauchen und der Server nur über das Netzwerk erreicht.
- Höhere Obergrenzen. Sie halten das, was das Modell erhält, begrenzt. Würde sie wieder öffnen: eine Seite, deren einzige Ebene unter der jetzigen Reihenfolge abgeschnitten wird.
- Ein Werkzeug, das Zugangsdaten umwandelt. Dem Modell würde der Pfad einer Geheimnisdatei übergeben. Würde es wieder öffnen: ein Bediener ohne Shell und ein Weg, die Werte aus der Sitzung des Modells herauszuhalten.
- Ein eigener Browserkontext des Servers. Seine Tabs würden Ihre angemeldeten Sitzungen nicht teilen, den Grund des Projekts. Würde ihn wieder öffnen: ein Browser, der die Download-Einstellung für einen einzelnen Tab annimmt.
Diwall, das Projekt, von dem dieses abstammt, gibt einem Modell ebenfalls ein Bild mit nummerierten Elementen und den Barrierefreiheitsbaum; sein Browser und sein Transport sind nicht dieselben. Wie die beiden Projekte zueinander stehen, steht unter Das Projekt.