MCP Drift Registry Note № 01 Sample composition

79 servers is not
79 observations

The ledger tracks 79 public endpoints that answer tools/list without credentials. Before that number does any work for anyone, here is what is behind it — measured, not estimated.

Figures regenerated each pulse Every number on this page is read out of the same state the ledger renders from. Nothing is transcribed by hand.

01One template, 65% of the rows

51 of the 79 endpoints — 65% — are the same hosted docs template. One generator, 51 vendors, 51 domains. The tool names are vendor-specific, so every contract fingerprint differs and a naive count sees 51 separate servers with 51 separate contracts. There is one thing behind them: if that generator ships a change, most of the registry moves on the same day, and the ledger would read like an ecosystem-wide event instead of one deploy.

No label of ours is involved in that count. It is the tool-name signature:

curl -s https://he110.github.io/mcp-drift-registry/api/registry.json | jq '
  [ .servers[]
    | select([.tools[].name] | any(startswith("query_docs_filesystem_")))
  ] | length'
# 51

The shared submit_feedback tool has a byte-identical schema fingerprint (7faf8b71ae053b91) on 51 of the 51. All of them agree exactly.

02Endpoint ≠ deployment

One host in the registry serves more than one tracked endpoint — separate paths, one deployment behind them:

The registry counts endpoints because an endpoint is what it can actually probe. If you are counting MCP servers yourself, the two units are not the same, and nothing in a tools/list response tells you which one you have.

0321 families, and that is a ceiling

Each identified platform collapses to one family. Each endpoint with no identified platform counts as its own — because we could not identify a shared generator is not evidence of independence, and rounding it the other way would flatter the number.

curl -s https://he110.github.io/mcp-drift-registry/api/registry.json \
| jq '.counts.platformFamilies, .counts.platforms, .counts.unlabelledPlatform'
# 21
# {"mintlify-docs":51,"openapi-explorer":5,
#  "mintlify-search-only":4,"gitmcp":2}
# 17

Two of those labels almost certainly belong to one vendor in two different shapes. The counter does not merge them, because the two shapes share no tool at all — merging them on the strength of a common prefix in a string we wrote ourselves is a guess, and a guess does not belong in a counter. So 21 is an upper bound on independence, not a floor. The 17 unlabelled endpoints are unproven, not proven separate.

The practical consequence is the only reason this page exists: any per-server drift rate computed from this sample would be badly inflated, because 51 correlated observations would be counted as 51 independent ones. No rate gets published here without the family count beside it.

04Four strata inside one template

The search_* tool is nominally one template tool. Across the 51 endpoints it has four distinct schema fingerprints.

Endpoints per distinct search_* input schema across the 51 templated endpoints, this pulse. Each row lists the parameters that schema accepts, under its fingerprint.
querycb69ec950d34e626 38
queryversionfb21dc8a09203eac 7
languagequery9718d03564ef138a 4
languagequeryversion7f49cff0033583af 2

The split is not noise. Every stratum is a distinct combination of optional parameters that appear only where the tenant switched the matching feature on, with no remainder: the strata are the cross-product, not a cross-product plus anomalies. One generator, one nominal tool, and the contract still varies by tenant — with no user, no session and no credential involved anywhere in the sample.

What a single pulse cannot say is whether that is a rollout caught mid-flight or permanent divergence that will look identical next year. A single snapshot structurally cannot distinguish those two. That is the entire argument for keeping the series instead of recounting: in a few weeks the strata either converge or they do not, and then it is a fact rather than a shape.

If you integrate against one vendor's docs MCP and assume the next one behaves the same because the tool has the same name, you are already wrong today — and a census taken today will not tell you that.

05What the registry does about it

Nothing, deliberately. It publishes the platform label and the family count, and then de-duplicates nothing, weights nothing and corrects no statistic. The sample is marked and you decide what it is worth. A correction applied inside the pipeline would be one more thing you would have to trust; a label is something you can check with the command above.

The gap in the sample is also the standing request: a server from outside that template is worth several from inside it. The only requirement is that tools/list answers without credentials.

← Back to the ledger