Skip to content
This repository was archived by the owner on Oct 13, 2026. It is now read-only.
operatorsheetsPublic archive

About

Independent, read-only measurement of the agent tool layer: MCP server liveness and conformance, with controls that void a bad run rather than report from it. EUPL-1.2.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

mcp-observatory

Independent, read-only measurement of the agent tool layer.

AI agents are increasingly given the ability to call remote tools over the Model Context Protocol. A person, or an agent acting for them, picks a server from a public registry and grants it access to data and actions. There is currently no independent way to check anything about that server first: whether it is alive, who runs it, which protocol version it speaks, or whether it still behaves the way its listing says.

The public index is measurably unreliable. In a census of 10,716 registry entries across 7,726 distinct hosts (probed 2026-07-30), the registry's own metadata marked 10,711 of 10,716 as "active", while 1,942 endpoints (18.1%) did not respond at all. On re-probing, 78 of 331 re-probed broken endpoints (23.6%) had healed nine days later β€” so the index is not merely wrong, it is wrong differently every day. That is why this is a continuously running instrument and not a report. (Those 331 are the subset whose operators published a contact address, not a random sample of the 1,942; the healing rate for the rest is unmeasured.)

What it does

python -m mcp_observatory https://mcp.deepwiki.com/mcp
LIVE          https://mcp.deepwiki.com/mcp
              MCP initialize succeeded (protocol 2025-06-18)  [DeepWiki 2.14.3, 3 tools]

(Real output, 2026-08-18. The server name, version and tool count are whatever that server advertises on the day you run it β€” they are read, not asserted here.)

Add --json for machine-readable output.

What it will not do

These are design commitments, not current limitations:

  • It never invokes a tool. The manifest is read via tools/list; tools/call is never issued. Reading what a server offers is observation; invoking it is participation.
  • It never supplies credentials. A gated endpoint is recorded as gated, and its internals stay unmeasured.
  • It refuses to guess. Rate limiting, TLS errors, timeouts and 5xx are recorded as INCONCLUSIVE, never as breakage. Only an unresolvable hostname or an origin answering 404/410 counts as dead.
  • It voids its own run rather than report from a bad vantage point. Every run checks a reachable control and an unresolvable control first. If either misbehaves, no verdicts are produced at all.

That last group is the actual product. Anyone can write a script that calls endpoints and counts non-200s; the resulting number will be large and wrong. See docs/METHODOLOGY.md for the census where exactly that happened β€” a 73.9% headline that collapsed to roughly one verified defect once each category was opened by hand β€” and the rules adopted in response.

Verdicts

verdict meaning counted as failure?
LIVE completed an MCP initialize, or answered JSON-RPC no
GATED alive, requires credentials we will not supply no
DEAD hostname does not resolve, or origin answered 404/410 yes
INCONCLUSIVE defended, rate-limited, timed out, redirected, or empty 200 no

Status

Early. The probe and its classifier work and are tested; the longitudinal pipeline, the conformance suite (mcp-lint) and the public dataset are not built yet.

Tests

python3 tests/run.py       # no dependencies
python3 -m pytest tests/ -q   # or pytest, if you have it

Where the census data lives, and how it is funded

The 2026-07-30 census the numbers above come from is published in full and free: census-2026-07-30.csv β€” all 10,716 URLs, one row per endpoint, raw probe_class and our bucket in separate columns so you can discard our interpretation and keep the observation. The write-up is at State of the MCP Registry.

The continuing work around that snapshot β€” a daily reachability drift series since 2026-08-02, a re-probe of the full registry run on request, structured JSON, and the successor analysis for superseded endpoints β€” is sold as a $39 package. That is disclosed here rather than kept off the page, because a measurement instrument that earns money from what it measures should say so where it states its method.

Two other public censuses of this registry exist and are worth your time: Fetchgate (15,329 URLs probed 2026-08-27, per-server data free under CC BY 4.0) and mcpqueen (free CSV, monthly). Both are larger and fresher than our snapshot. Their 22.7% "dead, broken, or not MCP" sits 0.7 points from our 23.4% unusable on a different population a month later β€” independent convergence is better evidence for the method than anything either of us could assert alone.

How this is built, stated plainly

This project is written and operated with heavy use of a generative AI system (Claude Opus 5), under human direction. That is disclosed here for the same reason the methodology above exists: an AI-operated measurement process produces confident, plausible, wrong results at a rate no human-paced process would survive, and the countermeasures are only credible if you know they were needed. Every number in this repository is re-derivable from published code and published data; none of it asks you to take anyone's word.

Licence

EUPL-1.2 β€” full licence text as published by the European Commission. Copyright notice in NOTICE.

About

Independent, read-only measurement of the agent tool layer: MCP server liveness and conformance, with controls that void a bad run rather than report from it. EUPL-1.2.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages