{"openapi":"3.1.0","info":{"title":"Toolpin","description":"Uptime and integrity monitoring for MCP servers. Every field is a mechanically checkable fact with the time it was observed, never a score or a safety judgment.","version":"0.1.0"},"paths":{"/healthz":{"get":{"summary":"Healthz","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/status":{"get":{"summary":"Status","description":"Data-freshness signal. 503 when a daily job hasn't succeeded in >48h, so an\nexternal uptime monitor can alarm on the silent-worker failure mode.","operationId":"status_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/stats":{"get":{"summary":"Stats","description":"Public catalog counters.\n\nSeven aggregates including four unbounded COUNT(*), one of them over `sources`\nwhich is the largest table by row count. Postgres has no shortcut for an exact\ncount, so every request pays in full and it gets more expensive daily. This\nhad no Cache-Control at all while being linked from the site footer.","operationId":"stats_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/search":{"get":{"tags":["public"],"summary":"Find servers by name or title","description":"Name, description, and reachability only. Deliberately thin: see serializers.\n\nNot charged against the daily server quota. It returns nothing worth\nenumerating, and metering the route people use to find the right name would\nonly push them into guessing at `/v1/servers/{name}`, which is metered.","operationId":"search_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"Substring of a canonical name or display name.","title":"Q"},"description":"Substring of a canonical name or display name."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_SearchResult_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/spec":{"get":{"tags":["public"],"summary":"Current MCP revision and catalog adoption","operationId":"spec_v1_spec_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_SpecStatus_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/catalog/stats":{"get":{"tags":["public"],"summary":"Catalog counters and drift base rate","operationId":"catalog_stats_v1_catalog_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_CatalogStats_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/tools":{"get":{"tags":["public"],"summary":"Tool definitions as last verified","operationId":"tools_v1_tools_get","parameters":[{"name":"server","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":512,"description":"Canonical server name.","title":"Server"},"description":"Canonical server name."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ToolList_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/changes":{"get":{"tags":["public"],"summary":"Recorded changes for one server","operationId":"changes_v1_changes_get","parameters":[{"name":"server","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":512,"description":"Canonical server name.","title":"Server"},"description":"Canonical server name."},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ChangeList_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/feed/events":{"get":{"tags":["public"],"summary":"Catalog-wide event feed, cursored","description":"Every recorded event across the catalog, oldest first, resumable by cursor.\n\nNot charged against the daily server quota. It is not a per-server read, and\nthe plans that reach it are unmetered anyway.","operationId":"feed_events_v1_feed_events_get","parameters":[{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Last event id you processed.","title":"Cursor"},"description":"Last event id you processed."},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only for choosing a first page.","title":"Since"},"description":"Only for choosing a first page."},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Repeat to filter kinds.","title":"Kind"},"description":"Repeat to filter kinds."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_FeedPage_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/snapshots":{"get":{"tags":["public"],"summary":"Historical tool captures for one server","operationId":"snapshots_v1_snapshots_get","parameters":[{"name":"server","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":512,"title":"Server"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Page backwards from here.","title":"Before"},"description":"Page backwards from here."},{"name":"include_definitions","in":"query","required":false,"schema":{"type":"boolean","description":"Include the full tool definitions, not just hashes.","default":false,"title":"Include Definitions"},"description":"Include the full tool definitions, not just hashes."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_SnapshotHistory_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/watches":{"get":{"tags":["public"],"summary":"Servers you are monitoring","operationId":"get_watches_v1_watches_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_WatchList_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"post":{"tags":["public"],"summary":"Start monitoring a server","operationId":"post_watch_v1_watches_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_WatchCreated_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/watches/{watch_id}":{"delete":{"tags":["public"],"summary":"Stop monitoring a server","operationId":"delete_watch_v1_watches__watch_id__delete","parameters":[{"name":"watch_id","in":"path","required":true,"schema":{"type":"integer","title":"Watch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_WatchRemoved_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}},"/v1/servers/{name}":{"get":{"tags":["public"],"summary":"Everything known about one server","operationId":"get_server_v1_servers__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope_ServerRecord_"}}}},"401":{"description":"No key, or a key that is not valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"The plan does not include this.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"No such server, with near matches.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"A parameter is missing or out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Burst limit or daily server quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}}}},"components":{"schemas":{"Adoption":{"properties":{"servers_reporting":{"type":"integer","title":"Servers Reporting"},"on_current":{"type":"integer","title":"On Current"},"on_current_pct":{"type":"number","title":"On Current Pct"},"pre_current":{"type":"integer","title":"Pre Current"},"pre_current_pct":{"type":"number","title":"Pre Current Pct"},"claim":{"type":"string","title":"Claim"},"versions":{"items":{"$ref":"#/components/schemas/VersionCount"},"type":"array","title":"Versions"}},"additionalProperties":false,"type":"object","required":["servers_reporting","on_current","on_current_pct","pre_current","pre_current_pct","claim","versions"],"title":"Adoption"},"AuthShape":{"properties":{"challenge":{"type":"boolean","title":"Challenge"},"scheme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheme"},"resource_metadata":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Metadata"},"realm":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Realm"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"additionalProperties":false,"type":"object","required":["challenge"],"title":"AuthShape","description":"How a gated endpoint says to get in. Never a credential."},"Baseline":{"properties":{"drift_rate_per_day":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Drift Rate Per Day"},"window_days":{"type":"integer","title":"Window Days"},"reachable_servers":{"type":"integer","title":"Reachable Servers"},"drift_events_in_window":{"type":"integer","title":"Drift Events In Window"},"note":{"type":"string","title":"Note"}},"additionalProperties":false,"type":"object","required":["drift_rate_per_day","window_days","reachable_servers","drift_events_in_window","note"],"title":"Baseline","description":"The catalog rate a per-server count has to be read against."},"CatalogStats":{"properties":{"servers":{"$ref":"#/components/schemas/ServerCounts"},"endpoints":{"$ref":"#/components/schemas/EndpointCounts"},"tool_snapshots":{"type":"integer","title":"Tool Snapshots"},"repositories":{"$ref":"#/components/schemas/RepositoryCounts"},"baseline":{"$ref":"#/components/schemas/Baseline"}},"additionalProperties":false,"type":"object","required":["servers","endpoints","tool_snapshots","repositories","baseline"],"title":"CatalogStats"},"ChangeList":{"properties":{"server":{"type":"string","title":"Server"},"window_days":{"type":"integer","title":"Window Days"},"counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts"},"baseline":{"$ref":"#/components/schemas/Baseline"},"events":{"items":{"$ref":"#/components/schemas/EventRecord"},"type":"array","title":"Events"}},"additionalProperties":false,"type":"object","required":["server","window_days","counts","baseline","events"],"title":"ChangeList"},"Deprecation":{"properties":{"name":{"type":"string","title":"Name"},"summary":{"type":"string","title":"Summary"},"removal_window":{"type":"string","title":"Removal Window"}},"additionalProperties":false,"type":"object","required":["name","summary","removal_window"],"title":"Deprecation"},"EndpointCounts":{"properties":{"total":{"type":"integer","title":"Total"},"by_probe_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Probe Status"},"reachable_servers":{"type":"integer","title":"Reachable Servers"}},"additionalProperties":false,"type":"object","required":["total","by_probe_status","reachable_servers"],"title":"EndpointCounts"},"EndpointRecord":{"properties":{"url":{"type":"string","title":"Url"},"transport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transport"},"primary":{"type":"boolean","title":"Primary","description":"The endpoint that speaks for this server. Never infer this from position in the list."},"probe_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Probe Status"},"status_text":{"type":"string","title":"Status Text"},"last_checked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Checked","description":"A probe was attempted. Not the same as a check."},"last_verified_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Verified At","description":"A tool list was actually read and hashed."},"last_status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Status Code"},"latency_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latency Ms"},"consecutive_failures":{"type":"integer","title":"Consecutive Failures"},"first_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen"},"auth":{"anyOf":[{"$ref":"#/components/schemas/AuthShape"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["url","transport","primary","probe_status","status_text","last_checked","last_verified_at","last_status_code","latency_ms","consecutive_failures","first_seen"],"title":"EndpointRecord"},"Envelope_CatalogStats_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/CatalogStats"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[CatalogStats]"},"Envelope_ChangeList_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/ChangeList"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[ChangeList]"},"Envelope_FeedPage_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/FeedPage"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[FeedPage]"},"Envelope_SearchResult_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/SearchResult"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[SearchResult]"},"Envelope_ServerRecord_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/ServerRecord"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[ServerRecord]"},"Envelope_SnapshotHistory_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/SnapshotHistory"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[SnapshotHistory]"},"Envelope_SpecStatus_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/SpecStatus"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[SpecStatus]"},"Envelope_ToolList_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/ToolList"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[ToolList]"},"Envelope_WatchCreated_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/WatchCreated"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[WatchCreated]"},"Envelope_WatchList_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/WatchList"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[WatchList]"},"Envelope_WatchRemoved_":{"properties":{"as_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"As Of","description":"When all critical jobs had last succeeded. Null if one has never run."},"stale":{"type":"boolean","title":"Stale","description":"True when a daily job has not succeeded recently. The data is still served, and it is older than it should be."},"data":{"$ref":"#/components/schemas/WatchRemoved"}},"additionalProperties":false,"type":"object","required":["as_of","stale","data"],"title":"Envelope[WatchRemoved]"},"ErrorBody":{"properties":{"code":{"type":"string","title":"Code","description":"Stable machine-readable code."},"message":{"type":"string","title":"Message"}},"additionalProperties":true,"type":"object","required":["code","message"],"title":"ErrorBody"},"ErrorEnvelope":{"properties":{"error":{"$ref":"#/components/schemas/ErrorBody"}},"additionalProperties":false,"type":"object","required":["error"],"title":"ErrorEnvelope"},"EventRecord":{"properties":{"kind":{"type":"string","title":"Kind"},"at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"At"},"endpoint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint Url"},"old_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Old Hash"},"new_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Hash"},"added":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Added"},"removed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Removed"},"changed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Changed"},"tools":{"anyOf":[{"items":{"$ref":"#/components/schemas/ToolChange"},"type":"array"},{"type":"null"}],"title":"Tools"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"server_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Hash"},"tool_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Count"}},"additionalProperties":false,"type":"object","required":["kind","at"],"title":"EventRecord"},"FeedEvent":{"properties":{"kind":{"type":"string","title":"Kind"},"at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"At"},"endpoint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint Url"},"old_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Old Hash"},"new_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Hash"},"added":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Added"},"removed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Removed"},"changed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Changed"},"tools":{"anyOf":[{"items":{"$ref":"#/components/schemas/ToolChange"},"type":"array"},{"type":"null"}],"title":"Tools"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"server_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Hash"},"tool_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tool Count"},"id":{"type":"integer","title":"Id","description":"The cursor. Resume from this to get every later event."},"server":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server"}},"additionalProperties":false,"type":"object","required":["kind","at","id","server"],"title":"FeedEvent"},"FeedPage":{"properties":{"events":{"items":{"$ref":"#/components/schemas/FeedEvent"},"type":"array","title":"Events"},"count":{"type":"integer","title":"Count"},"next_cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Cursor"},"has_more":{"type":"boolean","title":"Has More"},"retention":{"$ref":"#/components/schemas/FeedRetention"}},"additionalProperties":false,"type":"object","required":["events","count","next_cursor","has_more","retention"],"title":"FeedPage"},"FeedRetention":{"properties":{"days":{"type":"integer","title":"Days"},"oldest_event_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Oldest Event Id"},"oldest_event_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Oldest Event At"},"gap_before_cursor":{"type":"boolean","title":"Gap Before Cursor","description":"True when retention removed events between your cursor and the oldest we still hold. You missed something."}},"additionalProperties":false,"type":"object","required":["days","oldest_event_id","oldest_event_at","gap_before_cursor"],"title":"FeedRetention"},"Repository":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"stars":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Stars"},"pushed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pushed At"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived"},"fork":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Fork"},"gone":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Gone"},"checked_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checked At"}},"additionalProperties":false,"type":"object","required":["url","stars","pushed_at","archived","fork","gone","checked_at"],"title":"Repository"},"RepositoryCounts":{"properties":{"with_repo":{"type":"integer","title":"With Repo"},"gone":{"type":"integer","title":"Gone"},"archived":{"type":"integer","title":"Archived"}},"additionalProperties":false,"type":"object","required":["with_repo","gone","archived"],"title":"RepositoryCounts"},"Revision":{"properties":{"date":{"type":"string","title":"Date"},"predecessor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Predecessor"},"headline":{"type":"string","title":"Headline"},"checked_seps":{"items":{"$ref":"#/components/schemas/Sep"},"type":"array","title":"Checked Seps","description":"Only proposals with a check behind them are listed."},"deprecations":{"items":{"$ref":"#/components/schemas/Deprecation"},"type":"array","title":"Deprecations"}},"additionalProperties":false,"type":"object","required":["date","predecessor","headline","checked_seps","deprecations"],"title":"Revision"},"SearchHit":{"properties":{"name":{"type":"string","title":"Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"probe_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Probe Status"},"status_text":{"type":"string","title":"Status Text"},"repo_stars":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Repo Stars"}},"additionalProperties":false,"type":"object","required":["name","display_name","description","status","probe_status","status_text","repo_stars"],"title":"SearchHit"},"SearchResult":{"properties":{"query":{"type":"string","title":"Query"},"count":{"type":"integer","title":"Count"},"results":{"items":{"$ref":"#/components/schemas/SearchHit"},"type":"array","title":"Results"}},"additionalProperties":false,"type":"object","required":["query","count","results"],"title":"SearchResult"},"Sep":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"summary":{"type":"string","title":"Summary"}},"additionalProperties":false,"type":"object","required":["id","title","summary"],"title":"Sep"},"ServerCounts":{"properties":{"total":{"type":"integer","title":"Total"},"by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Status"}},"additionalProperties":false,"type":"object","required":["total","by_status"],"title":"ServerCounts"},"ServerRecord":{"properties":{"name":{"type":"string","title":"Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"latest_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Version"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"protocol_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol Version"},"transports":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Transports"},"first_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Seen"},"last_seen":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Seen"},"registry_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registry Updated At"},"repository":{"$ref":"#/components/schemas/Repository"},"endpoints":{"items":{"$ref":"#/components/schemas/EndpointRecord"},"type":"array","title":"Endpoints"},"tools":{"$ref":"#/components/schemas/ToolSummary"},"recent_changes":{"additionalProperties":{"type":"integer"},"type":"object","title":"Recent Changes"},"baseline":{"$ref":"#/components/schemas/Baseline"}},"additionalProperties":false,"type":"object","required":["name","display_name","description","status","latest_version","website_url","protocol_version","transports","first_seen","last_seen","registry_updated_at","repository","endpoints","tools","recent_changes","baseline"],"title":"ServerRecord"},"SnapshotHistory":{"properties":{"server":{"type":"string","title":"Server"},"count":{"type":"integer","title":"Count"},"has_more":{"type":"boolean","title":"Has More"},"next_before":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Before"},"retention_days":{"type":"integer","title":"Retention Days"},"snapshots":{"items":{"$ref":"#/components/schemas/SnapshotRecord"},"type":"array","title":"Snapshots"}},"additionalProperties":false,"type":"object","required":["server","count","has_more","next_before","retention_days","snapshots"],"title":"SnapshotHistory"},"SnapshotRecord":{"properties":{"captured_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Captured At"},"server_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Hash"},"endpoint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint Url"},"tool_count":{"type":"integer","title":"Tool Count"},"tool_hashes":{"additionalProperties":{"type":"string"},"type":"object","title":"Tool Hashes"},"tools":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tools"}},"additionalProperties":false,"type":"object","required":["captured_at","server_hash","endpoint_url","tool_count","tool_hashes"],"title":"SnapshotRecord"},"SpecStatus":{"properties":{"current_revision":{"$ref":"#/components/schemas/Revision"},"newer_revision_observed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Newer Revision Observed"},"adoption":{"$ref":"#/components/schemas/Adoption"}},"additionalProperties":false,"type":"object","required":["current_revision","newer_revision_observed","adoption"],"title":"SpecStatus"},"ToolChange":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"changed_fields":{"items":{"type":"string"},"type":"array","title":"Changed Fields"}},"additionalProperties":false,"type":"object","required":["name","kind","changed_fields"],"title":"ToolChange"},"ToolDefinition":{"properties":{"name":{"type":"string","title":"Name"},"hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash","description":"SHA-256 over the spec-defined fields only, so a vendor build stamp does not move it."},"definition":{"additionalProperties":true,"type":"object","title":"Definition","description":"The tool exactly as the server published it."}},"additionalProperties":false,"type":"object","required":["name","hash","definition"],"title":"ToolDefinition"},"ToolList":{"properties":{"server":{"type":"string","title":"Server"},"captured_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Captured At"},"server_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Hash"},"endpoint_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint Url","description":"Which remote produced this list. Snapshots are per endpoint."},"count":{"type":"integer","title":"Count"},"tools":{"items":{"$ref":"#/components/schemas/ToolDefinition"},"type":"array","title":"Tools"}},"additionalProperties":false,"type":"object","required":["server","captured_at","server_hash","endpoint_url","count","tools"],"title":"ToolList"},"ToolSummary":{"properties":{"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count"},"server_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Hash"},"captured_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Captured At"}},"additionalProperties":false,"type":"object","required":["count","server_hash","captured_at"],"title":"ToolSummary"},"VersionCount":{"properties":{"version":{"type":"string","title":"Version"},"servers":{"type":"integer","title":"Servers"}},"additionalProperties":false,"type":"object","required":["version","servers"],"title":"VersionCount"},"WatchCreated":{"properties":{"status":{"type":"string","title":"Status","description":"watching, or already_watching."},"server":{"type":"string","title":"Server"},"watch_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Watch Id"},"used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Used"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},"additionalProperties":false,"type":"object","required":["status","server"],"title":"WatchCreated"},"WatchList":{"properties":{"plan":{"type":"string","title":"Plan"},"limit":{"type":"integer","title":"Limit"},"used":{"type":"integer","title":"Used"},"watches":{"items":{"$ref":"#/components/schemas/WatchRecord"},"type":"array","title":"Watches"}},"additionalProperties":false,"type":"object","required":["plan","limit","used","watches"],"title":"WatchList"},"WatchRecord":{"properties":{"id":{"type":"integer","title":"Id"},"server":{"type":"string","title":"Server"},"kind":{"type":"string","title":"Kind"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","server","kind","created_at"],"title":"WatchRecord"},"WatchRemoved":{"properties":{"status":{"type":"string","title":"Status"},"watch_id":{"type":"integer","title":"Watch Id"}},"additionalProperties":false,"type":"object","required":["status","watch_id"],"title":"WatchRemoved"},"WatchRequest":{"properties":{"server":{"type":"string","maxLength":512,"minLength":1,"title":"Server"},"kind":{"type":"string","title":"Kind","default":"watch"}},"type":"object","required":["server"],"title":"WatchRequest"}}}}