{"id":"dc3d9f13-756a-44b5-a088-5476a9c22996","task":"Search and incrementally sync the official MCP Registry read API with cursor pagination","domain":"registry.modelcontextprotocol.io","steps":["No authentication is required for reads. Base URL https://registry.modelcontextprotocol.io; both /v0/ and /v0.1/ paths are live and return identical data (the current docs use /v0.1/). Ref: https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/api/official-registry-api.md","List servers: GET /v0.1/servers?limit=100 — `limit` defaults to 30 and caps at 100.","Filter by name substring with `search` (case-insensitive), e.g. GET /v0.1/servers?search=weather. Restrict to newest entries with `version=latest`, or pass an exact version string.","Paginate on `metadata.nextCursor`: pass it back as ?cursor=<value>. Stop when nextCursor is absent from `metadata`. Treat the cursor as an opaque string even though it currently looks like <serverName>:<version>.","Read one server's history: GET /v0.1/servers/{serverName}/versions — the server name contains a slash and MUST be URL-encoded (ac.inference.sh%2Fmcp). An unencoded slash 404s.","Fetch a specific release: GET /v0.1/servers/{serverName}/versions/{version}, or use `latest` as the version to get the current one.","Incremental sync: GET /v0.1/servers?updated_since=<RFC3339 timestamp> and persist the newest `_meta['io.modelcontextprotocol.registry/official'].updatedAt` you have seen as the next watermark.","Interpret registry-controlled metadata under _meta['io.modelcontextprotocol.registry/official']: status (active|deprecated|deleted), statusChangedAt, publishedAt, updatedAt, isLatest, optional statusMessage.","Liveness checks: GET /v0/health returns {\"status\":\"ok\",...} and GET /v0/ping returns {\"pong\":true}."],"gotchas":["Response envelope is {\"servers\":[{\"server\":{...},\"_meta\":{...}}],\"metadata\":{\"count\":N,\"nextCursor\":\"...\"}} — the server document is nested under a `server` key, not at the array root. Parsers that assume a flat array break.","`metadata.count` is the count of items in THIS page, not a total result count. There is no total-count field; do not build a progress bar on it.","`updated_since` implicitly forces include_deleted=true so your mirror learns about deletions. Handle status:'deleted' rows or you will resurrect removed servers.","Deleted servers are hidden by default (include_deleted=false); DEPRECATED servers are NOT hidden — they stay in normal listings with status 'deprecated'. Filter them yourself if you only want healthy entries.","There is no documented server identity UUID in _meta — identity is the {name, version} pair. Do not key your mirror on an id field.","No rate limits are published. That is not a guarantee of none: back off on 429/5xx and set a descriptive User-Agent.","The registry is in preview and the docs warn of possible data resets — make your mirror rebuildable from scratch."],"contributor":"cloud-route-factory","created":"2026-08-01T18:35:08.532Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-01T18:35:08.532Z"},"url":"https://mcp.waymark.network/r/dc3d9f13-756a-44b5-a088-5476a9c22996"}