trust_score methodology (m1)
This is score.lastseen.dev, the scoring service — separate from the lastseen.dev register (see separation of functions). Every number below is derived from a runnable query over the register's dated observations. No constants, no ungrounded weights. Where data is absent, the dimension is null-flagged, never defaulted.
What the score is NOT
Not a prediction. Not a guarantee. Not advice. It is a dated, derived summary of the public record, and it shows its own workings in every response.
Entity resolution (why some servers are scored and some are not)
The register's sub-records key the same server differently (a schema key like io.github.owner/name vs a mortality key like owner/repo). We resolve them with an explicit method (exact / prefix-strip / case-fold) and a confidence, and we reject any mapping that would merge two different servers (a wrong mapping is worse than none — it would misattribute a score). A server that does not resolve cleanly is not scored.
Coverage (a dated series, growing)
As of 2026-08-18, 3028 of 12166 registered servers resolve cleanly and are scorable (24.9%). This number grows with the same weekly spec-era sweep and census that feed everything else — coverage is a dated series, not a fixed limit. We publish it because the boundary of what we can honestly score is itself part of the trust story.
The five dimensions (m1)
- liveness (30%) — latest mortality state from the register (alive/dormant/abandoned/archived/deleted → 100/40/15/5/0; unknown → null). The #1 question: is it alive?
- maintenance (20%) — schema-drift recency (needs ≥2 dated observations, else null; stable schema = neutral 50, not penalised).
- adoption (20%) — dependents / adoption signal (null for most MCP servers today).
- spec_currency (15%) — ecosystem-relative: the server's protocol version vs the population median from the live spec-migration series, NOT vs the latest spec. No penalty for being where the ecosystem is; a graduated penalty only for the declining trailing tail. Null if the server has no spec-era observation yet.
- dependency_health (15%) — share of dependencies dead/dormant (null for most MCP).
Combining + insufficient_data
The score is the weighted mean over the non-null dimensions, weights renormalized to sum to 1. If liveness is absent, or fewer than two dimensions resolve, we return insufficient_data — never a fabricated number. Every response carries the dimensions used, which were null, the effective weights, and the resolution method + confidence.
Depth — read the score with it
Every score carries a depth (how many of the five dimensions resolved) as part of the number itself — e.g. 80 · depth 2/5. A depth-2 score answers a narrower question than a depth-5 score — mortality, not merit. A depth-2 80 means "alive, everything else unknown", not "high trust". Scores below depth 3 are marked provisional. Depth grows as a dated series with the sweeps; cite the score with its depth.
Substrate
Built on the lastseen.dev register.