API / Version 1

Nachweise in stabilem JSON.

Die öffentliche API stellt dieselben mit Zeitstempel versehenen Beobachtungen bereit wie die Website. Sie ist schreibgeschützt und benötigt keinen Schlüssel und kein Konto.

Anfragen und Caching

Jede Antwort ist application/json und trägt Cache-Control: public, s-maxage=60, stale-while-revalidate=300. Diesen Header zu beachten kostet Sie nichts und hält den Index günstig im Betrieb, lesen Sie daher bitte aus Ihrem Cache statt regelmäßig abzufragen. Es werden nur GET und HEAD bedient; jede andere Methode liefert 405 mit einem Allow-Header.

Fehler liefern nie einen bloßen Status. Der Body ist immer ein Objekt mit einem Code, auf den sicher verzweigt werden kann, und einer für Menschen geschriebenen Meldung:

{ "error": { "code": "invalid_limit", "message": "limit must be an integer from 1 to 100" } }

Server auflisten

GET /api/v1/servers
q
Freitext, der mit dem Titel, dem Registry-Namen und der Beschreibung abgeglichen wird.
state
Einer von verified, stale, broken, auth_required oder unverifiable.
package
Der Typ der Paketregistry: npm, pypi oder oci.
transport
Der vom Registry-Eintrag angegebene Transport, zum Beispiel stdio.
client
Ein Client-Slug, wie er unter Clients aufgeführt ist – zum Beispiel claude-code. Öffentliche API
limit
Eine ganze Zahl von 1 bis 100. Standardwert ist 25. Ein Wert außerhalb dieses Bereichs wird abgelehnt statt begrenzt, sodass ein Client nie eine andere Anzahl von Zeilen erhält, als er angefordert hat, ohne dass ihm dies mitgeteilt wird.
cursor
Der nextCursor aus der vorherigen Antwort. Lassen Sie ihn für die erste Seite weg; auf der letzten Seite ist er null.
GET /api/v1/servers?state=verified&package=npm&limit=2

{
  "data": [
    {
      "id": "srv_01J…",
      "registryName": "example/one",
      "title": "Example Server",
      "description": "What the server says it does.",
      "state": "verified",
      "observedAt": "2026-09-15T00:00:00.000Z",
      "toolCount": 3,
      "url": "/servers/example/one"
    }
  ],
  "nextCursor": null
}

Server-Detail

GET /api/v1/servers/:namespace/:name

Gibt die Registry-Metadaten, die ausführbaren Pakete und den öffentlichen Beobachtungsverlauf für einen Server unter data zurück. Jeder Lauf in diesem Verlauf nennt die genaue Paketversion, die getestet wurde, und das ist meist nicht die heute veröffentlichte Version. Ein unbekanntes Paar liefert 404 mit dem Code not_found.

Verifikationslauf

GET /api/v1/verification-runs/:id

Eine Beobachtung, angegeben über ihre Kennung. Ein Lauf, der die Bestätigungsregel nicht erfüllt hat, fehlt hier und liefert 404 mit dem Code not_found – dieselbe Antwort wie bei einem Lauf, den es nie gab, denn jeder Unterschied zwischen beiden würde einen Fehler offenlegen, den die Regel zurückhalten soll.

Datensatzstatistiken

GET /api/v1/stats
{ "data": { "indexedServers": 979, "verifiedServers": 0, "observedAt": null } }

Fehlercodes

invalid_limit
400 — das Limit war keine ganze Zahl von 1 bis 100.
invalid_cursor
400 — der Cursor ist fehlerhaft oder wurde gegen eine andere Sortierreihenfolge gebildet. Beginnen Sie erneut auf der ersten Seite.
not_found
404 — kein solcher Server oder kein veröffentlichbarer Lauf mit dieser Kennung.
method_not_allowed
405 — die API ist schreibgeschützt. Die Antwort nennt die Methoden, die bedient werden.

Was nicht offengelegt wird

Internes stderr, Worker-Leases und Details zu ausstehenden Bestätigungen werden nie veröffentlicht, und ein Status trägt stets den Zeitstempel der Beobachtung, die er beschreibt, und nicht den Zeitpunkt, zu dem Sie ihn abgefragt haben.