Maschinenzugang
Das Archiv aus Software heraus fragen
Dieses Archiv zeichnet auf, was das Web Maschinen mitteilt. Es wäre ein sonderbares Archiv, wenn es nur ein Mensch über ein Formular befragen könnte. Zwei Vorgänge stehen Software offen: fragen, ob eine Domain beobachtet wird, und eine Domain zur Beobachtung vorschlagen. Kein Schlüssel, keine Registrierung, kein Konto.
Für einen Assistenten: der MCP-Server
Wenn Sie Claude, ChatGPT oder etwas anderes nutzen, das das Model Context Protocol spricht, fügen Sie diesen Endpunkt hinzu, und die beiden Werkzeuge erscheinen in Ihrem Gespräch.
Er nutzt den Streamable-HTTP-Transport und ist zustandslos: keine Sitzung, kein offen gehaltener Datenstrom, keine Zugangsdaten. Tragen Sie ihn in den Einstellungen Ihres Clients als entfernten MCP-Server ein, oder über die Kommandozeile:
claude mcp add --transport http machinewitness https://machinewitness.eu/mcp
check_coverage
check_coverage(domain)
Ob dieses Archiv eine Domain beobachtet, ab welchem versiegelten Tag, welche maschinenlesbaren Dateien es anfragt und wie oft. Eine eingefügte URL wird angenommen und auf den Domainnamen zurückgeführt.
Eine verneinende Antwort ist eine Aussage über dieses Archiv, nicht über die Domain: der größte Teil des Webs wird nicht beobachtet. Eine bejahende Antwort sagt nichts darüber, was die beobachteten Dateien enthalten.
suggest_domain
suggest_domain(domain, email, reason)
Schlägt vor, eine Domain zu beobachten. Die Antwort lautet immer received mit guarantee: none. Es ist eine Anregung, keine Anweisung. Siehe unten was ein Vorschlag bewirkt und was nicht.
Für alles andere: einfaches HTTP
Dieselben zwei Vorgänge ohne MCP, dazu das Wurzelprotokoll als ein Dokument. Nichts davon braucht eine Bibliothek.
Das gesamte Wurzelprotokoll
GET /log.json
Jeder versiegelte Tag, beide Zeugen, in einem Dokument: die Zahl der Beobachtungen, die Merkle-Wurzel, der genaue Siegelzeitpunkt und die externen Anker, die dieser Tag trägt. Es ist die maschinenlesbare Form des öffentlichen Protokolls: ohne Schlüssel, ohne Seitenaufteilung, ohne Mengenbegrenzung.
$ curl -s https://machinewitness.eu/log.json | jq '.days[0]'
{
"day": "2026-08-23",
"url": "https://machinewitness.eu/log/2026-08-23",
"witnesses": {
"witness-1": {
"sealed": true,
"observations": 645785,
"merkle_root": "a86d011c...",
"anchors": {"opentimestamps": true, "rfc3161": true, "qualified_eidas": true}
},
"witness-2": { "sealed": true, "observations": 608542, "merkle_root": "eb3e7e97..." }
}
}
Die beiden Zeugen versiegeln unabhängig voneinander, ihre Wurzeln unterscheiden sich also bauartbedingt und werden nie als übereinstimmend dargestellt. Ein Zeuge ohne Siegel für einen Tag sagt das ausdrücklich ("sealed": false mit Grund), statt weggelassen zu werden. Eine fehlende Zeile darf nie als „trifft nicht zu" gelesen werden. Dieses Dokument sagt, was versiegelt wurde, nie, was eine Domain ausgeliefert hat.
Wird eine Domain beobachtet?
GET /coverage/{sha256(domain)}
Der Schlüssel ist der kleingeschriebene hexadezimale SHA-256 des reinen Domainnamens: ohne Schema, ohne www., ohne abschließenden Punkt. Sie hashen den Namen selbst, er wird also nie übertragen und erscheint in keinem Protokoll. Das ist Absicht: ein neutraler Zeuge sollte keine Aufzeichnung darüber ansammeln, wer sich nach wem erkundigt hat.
$ printf 'example.eu' | shasum -a 256
5a9f... -
$ curl https://machinewitness.eu/coverage/5a9f...
{"observed": false}
Eine beobachtete Domain antwortet mit den versiegelten Daten, den angefragten Artefakten und dem Ring, der die Kadenz bestimmt:
{
"observed": true,
"first_sealed_observation": "2026-07-29",
"last_sealed_observation": "2026-08-02",
"artefacts": ["robots.txt", "ai.txt", "tdmrep.json", "llms.txt", "homepage"],
"ring": "core",
"active": true
}
Eine Domain, die nicht mehr beobachtet wird, antwortet mit "active": false. Ihre versiegelten Datensätze aus dem angezeigten Zeitraum bleiben bestehen. Ein Archiv macht das Beobachten der Vergangenheit nicht rückgängig.
Eine Domain vorschlagen
POST /request
$ curl -X POST https://machinewitness.eu/request \
-H 'content-type: application/json' \
-d '{"domain": "example.eu",
"email": "you@example.eu",
"reason": "Why this domain should be observed."}'
{"status": "received",
"guarantee": "none",
"domain": "example.eu",
"detail": "Recorded for review against documented criteria. ..."}
Alle drei Felder sind erforderlich. Ein abgelehnter Vorschlag antwortet mit "status": "rejected" und einem Grund: ein unbrauchbarer Domainname, eine fehlende Rückadresse oder eine Begründung, die zu kurz ist, um als solche gelesen zu werden.
Was ein Vorschlag bewirkt und was nicht
Ein Vorschlag wird festgehalten und von einem Menschen anhand dokumentierter Kriterien geprüft: ein Bezug zur Europäischen Union und öffentlich ausgelieferte maschinenlesbare Dateien. Die Entscheidung bleibt beim Betreiber dieses Archivs.
Er begründet keine Pflicht, die Domain zu beobachten, keinen Zeitplan und keine Zusicherung, dass sie aufgenommen wird. Das ist keine juristische Verzierung, sondern die redliche Haltung. Ein Archiv, das versprechen würde, auf Zuruf zu beobachten, schuldete eine Verfügbarkeit, die es nicht zusichern kann, und wer sich auf dieses Versprechen verlassen hat, fände den Beweis an dem Tag nicht vor, an dem ein Crawl scheiterte. Was hier versprochen wird, ist kleiner und einhaltbar: der Vorschlag wird festgehalten, geprüft und an die angegebene Adresse beantwortet.
Die Endung einer Domain ist ein Signal unter mehreren, kein Urteil. Eine Domain außerhalb der 28 europäischen Endungen wird nicht selbsttätig abgelehnt. Sie wird einem Menschen vorgelegt, denn eine Endung ist nur ein grober Anhaltspunkt dafür, wo ein Betreiber tatsächlich sitzt. Diese Einschränkung ist unter wie es funktioniert beschrieben.
Grenzen und Umgangsformen
- Mengenbegrenzung
- Vorschläge sind je Adresse und insgesamt je Tag begrenzt. Wird eine Grenze überschritten, antwortet der Endpunkt mit 429. Die Abdeckungsabfrage wird am Rand zwischengespeichert und ist für gewöhnliche Nutzung nicht mengenbegrenzt.
- Aufzählen
- Es gibt keinen Endpunkt, der beobachtete Domains auflistet, und der gehashte Schlüssel sorgt dafür, dass sich die Abfrage nicht durchgehen lässt. Jede Abfrage antwortet für genau eine Domain, die der Aufrufer bereits kennt.
- Personenbezogene Daten
- Die Abdeckungsabfrage überträgt keinen Domainnamen und keine personenbezogenen Daten. Ein Vorschlag sendet Domain und Adresse im Klartext. Er muss es, weil ein Mensch ihn liest. Siehe Datenschutzerklärung.
- Beständigkeit
- Dies sind die öffentlichen Vorgänge eines laufenden Archivs, keine versionierte Produkt-API. Felder können hinzukommen; die Bedeutung bestehender Felder wird nicht stillschweigend geändert. Eine umfassendere Daten-API ist eine spätere, gesonderte Frage.
Maschinenlesbare Beschreibungen
Diese Seite veröffentlicht, was sie von anderen verlangt. llms.txt beschreibt beide Zugangswege in einer Form, die ein Sprachmodell unmittelbar lesen kann; ai.txt und tdmrep.json erklären, dass für die eigenen Inhalte dieser Seite kein Vorbehalt gegen Text- und Data-Mining erhoben wird.