We are going to measure servers that nobody asked us to measure.
The check is read only. It reads an endpoint, reads a card, and hashes what it saw. You can point it at a server you do not own, and so can we. Until now we have only ever pointed it at servers that volunteered. That was the mistake.
Measured 2026-08-19, one full walk of the official registry, 229 pages, stopping because the cursor ran out rather than because I ran out of patience. Raw JSON, the full endpoint list and the record hash are on the report.
Not one of those endpoints was contacted. This is a count of declarations. Whether they answer is a separate measurement and it is not in report 0.
It is left here on purpose. The claim this whole page rests on is that the method was published before the result existed. That claim is only checkable if the earlier text is still visible, so it is not edited and it is not deleted.
There is no number on this page yet. A survey that publishes its method after its results can choose the method that produced the results. So the method is here first, in public, with nothing measured. If the numbers turn out to be boring, they get published boring. If they make us look bad, they get published anyway. Our own servers are in the same population and are measured by the same machine on the same day.
We had a bigger number. We stopped using it after reading a text file.
The plan was to take the list from a public catalogue that indexes tens of thousands of open source MCP servers, and measure whatever had an address. Then we read its robots.txt.
glama.ai/robots.txt · read 2026-08-19
User-agent: *
Disallow: /api/
Disallow: /*/endpoints
Content-Signal: ai-train=no, search=yes, ai-input=yes
So we did not. One of the five rules we set for ourselves below is that we respect robots.txt. Breaking it on day one, to collect the list for a survey about disclosure, would have settled the question of whether this survey is worth reading.
The population comes from the official registry instead, which publishes a JSON API for exactly this and requires no account.
Naming a server that failed is a serious thing to do
These are not aspirations. If one of them is broken, the report that broke it gets withdrawn and the withdrawal stays published.
Never write "it went down"
held means we could not measure it. pending means we measured it and a condition was not met. These are different sentences and they never get collapsed into one. An instrument failure is not a statement about the thing it failed to measure.
State the measurement, not a character judgement
Not "this server is dishonest". "On 2026-08-19 the agent card carried no compensation disclosure." The first is an opinion we are not qualified to hold. The second is a fact anyone can check.
Ship the recipe and the hash with every claim
Every verdict carries a record_sha256 and a public procedure to recompute it. A claim about somebody else that cannot be reproduced by the person it is about should not be published.
Keep a door open for corrections
If you think a measurement of your server is wrong, ask and it is measured again. Both measurements stay published. The old one is not deleted, because deleting it would make the new one unverifiable. The desk exists before the naming does: corrections, free, no account, and you do not have to own the server.
Respect robots.txt and keep the load low
Read only, weekly at most, and never a tool call. The moment this survey becomes a nuisance to the servers it measures, it stops being a survey.
The first full walk broke the first rule. It was caught before publication, not after.
On 2026-08-23 the walk ran against all 12,429 endpoints and finished with a number. The number was 11,794 held. It is not published, because it was not a measurement of anybody’s server.
From 06:35Z onward, 11,307 consecutive endpoints were recorded as not reached, and not one of them succeeded over the following hour and forty minutes. Before that moment the same walk had reached 1,001 endpoints out of 1,122. Nothing about the population changed at 06:35. Our machine did.
The row that settles it belongs to a host called api.m2mcent.com. It answered 113 HTTP requests during the healthy period. Every one of its remaining 163 endpoints was then recorded as not reached. A host that answers 113 requests does not disappear.
The first of the five rules above says held means we could not measure it, and that an instrument failure is not a statement about the thing it failed to measure. This walk broke that rule against 11,307 servers, and it broke it silently.
survey1_walk · run 1 · 2026-08-23 · discarded
rows written 12429
reached, before 06:35Z 1001
reached, after 06:35Z 0
longest run of not reached 11307
not reached, total 11428
"not reached: URLError" 11422
"not reached: timeout" 5
"not reached: InvalidURL" 1
The defect underneath the defect is the last three lines. The walker recorded only the name of the exception class, so 11,422 rows carried an identical reason string. From the file alone, a server that no longer exists and a resolver that had stopped answering were the same row. We could not have told the difference after the fact, and neither could you.
Run 1 is not partially salvaged. Its first 1,122 rows were taken while the instrument was healthy and would probably survive scrutiny. But choosing where to cut is a judgement, and a survey that decides which of its own rows to keep has stopped being a survey. The whole run is discarded and all 12,429 endpoints are being measured again.
Both files stay published. The discarded rows are the evidence that the rule was broken, and deleting them would make this paragraph unverifiable.
Nothing external caught this. No operator complained, because nothing had been published yet. It was caught because the counters in the log had frozen in a shape that did not match the pilot runs, and that was worth an hour of checking before it was worth a page. If this survey is ever going to name somebody else’s server, this is the standard it has to hold itself to first.
Three counts, and a list
Answered 2026-08-23 in report 1: 5,785 of 12,429 spoke MCP. The first attempt was discarded in full. The sentence above is left exactly as it was written, before the number was known.
The interesting part is probably count 2. Most people talking about the size of this ecosystem are quoting a number that includes tens of thousands of servers that cannot be reached from anywhere. We do not know the gap yet. Nobody has published it.
This page exists because the opt-in version of this project did not work. We built a machine, asked people to volunteer their servers, and nobody outside our own customers did. The machine was never the problem. Waiting to be asked was.