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/:nameGibt 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/:idEine 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.