There is a structural blind spot in how AI-skill and MCP-server trust is measured today. Every scanner I know of — including ours, until recently — answers one question: is this server safe right now? It fetches the repo, scores it, and discards what it saw. The next person to ask gets a fresh snapshot with no memory of the last one.

That model cannot, even in principle, catch the most dangerous class of supply-chain event, because those events are defined by change. A package you vetted last week is republished this week under the same version string with different bytes. A server you approved adds a tool you never saw. The maintainer account that published a trusted release is replaced overnight. A snapshot taken after the change looks exactly as trustworthy as one taken before — there's nothing to compare it to.

So in mid-May we started archiving every version of every server we score, and computing the diff between consecutive versions. This is the first report from that archive. The window is short — 33 days — and the point isn't the totals. It's the categories: the specific kinds of change that only exist if someone kept the previous state, and that every snapshot-based tool is blind to by construction.

TL;DR

1,044Servers on the tape
491Real changes / 33 days
11Code-exec / ownership events
108Silent tool additions

Across 33 days (May 18 – June 20, 2026) the archive recorded 491 genuine version-over-version changes across 251 distinct servers, out of 1,044 tracked. The headline isn't the count — it's that 11 of those changes are install-time code execution or maintainer ownership events (the highest-severity supply-chain signals there are), and 108 are tools quietly added to servers people had already installed. None of these is visible to a tool that scores once.

A note on honesty before the numbers. When we first switched on network-endpoint detection, the archive recorded ~5,000 endpoints in a single day — but those are first observations, not changes (we'd simply never recorded an endpoint for those servers before). Reporting them as "5,000 servers added network access" would be false. Every number in this report excludes first-observations and counts only true deltas: a value that was one thing in one version and a different thing in the next. That's why the total is 491 and not 5,547.

The Signals a Snapshot Can't See

Here is the genuine-change breakdown for the window. I've grouped it by what the change actually tells you, not by raw frequency.

Change typeCountWhat it means
maintainer_flipped1The entire maintainer set was replaced — classic takeover signature
install_script_added4A preinstall/postinstall hook appeared where there was none — arbitrary code at install time
install_script_changed3An existing install hook's command changed
binary_hash_changed3A shipped file's bytes changed under the same version — the republish signature
tool_added108A server gained a tool — your agent's capability surface grew silently
maintainer_added101A new publisher gained release rights (87 of them not bots)
tier_changed146Trust tier moved — some durable, much of it transient (see below)
version_changed / license_changed20New release published; license terms altered

The 11 highest-severity events — one maintainer takeover, seven install-hook events, three same-version republishes — are the ones I want to walk through, because each is a textbook precursor to a supply-chain attack, and each is invisible without a previous state to diff against.

1. A Server's Entire Maintainer Set Was Replaced

● Critical — maintainer_flipped

In mid-June, one tracked MCP server's maintainer list went from two accounts to one — and not by addition. The original pair was replaced entirely by a single new account:

before: 2 maintainers → after: 1 new maintainer (neither prior account retained)

I want to be precise about what this is and isn't. This is not a claim that the server was compromised, and I'm deliberately not naming the accounts — the point is the pattern, not any individual. A complete maintainer change can be a perfectly friendly handoff — a project changing hands, a company reorganizing a repo. But a complete maintainer change is also exactly what a takeover looks like, and it is the single signal you would most want flagged before you pull the next release. The honest answer to "was this benign?" is: you should look — and you can only know to look if something was watching the maintainer set across versions. A snapshot taken afterward shows one maintainer and no reason for concern.

2. Install Hooks That Appeared Overnight

An npm preinstall or postinstall script runs arbitrary code on your machine the moment you install a package — before you've imported a single line, run a single tool, or read any source. It is the most heavily abused vector in the entire software supply chain. The archive caught seven servers either adding an install hook that wasn't there before, or changing the command in one that was:

ServerSevHook change
activeloopai/hivemindhigh+ postinstall: node scripts/ensure-tree-sitter.mjs
777genius/claude_agent_teams_uihigh+ preinstall: node ./scripts/ci/enforce-pnpm-install.mjs
shiwenwen/hope-agenthigh+ postinstall: node scripts/patch-codemirror-edit-context.mjs
paperclipai/papercliphigh+ postinstall: node scripts/link-plugin-dev-sdk.mjs
777genius/claude_agent_teams_uihighpostinstall: …; + node ./scripts/ensure-electron-install.cjs
amrdab/clawdcursorhighpostinstall: + node scripts/postinstall-native.js
affaan-m/everything-claude-codehighpostinstall echo URL changed

Read these the way the product does: as a strong prior, not a verdict. Most are plausibly benign — a tree-sitter build step, an Electron rebuild, a package-manager guard. But "plausibly benign" is a judgment you can only make if you know the hook appeared at all. Each one is new install-time code execution that a prior version did not have, and a one-time scan of the current version cannot tell you whether that postinstall shipped yesterday or has been there since day one. The diff can.

3. Same Version, Different Bytes

This is the subtlest one, and my favorite finding in the dataset. Three servers republished a shipped file under the same version number — the bytes changed, the version string didn't. The cleanest example is heshengtao/super-agent-party:

● High — binary_hash_changed Jun 12 main.js sha256:5ee50bae… → sha256:82048cfc…
Jun 13 main.js sha256:82048cfc… → sha256:5ee50bae…

The entrypoint's hash changed on the 12th — then changed back to the original hash on the 13th. Same version the whole time.

Whatever the intent — a botched release, a reverted experiment — the behavioral fact is stark: a user who ran npm install on June 12 got materially different code than one who installed the same version on June 11 or June 14. Lockfile pinning to a version number would not have protected them, because the version number never moved. spleck/claw-dashboard showed the same pattern on index.js on June 15. A scanner that hashed the package on any single day records one clean version and never knows it was a moving target. The archive sees the file change and change back.

4. Tools Added to Servers You Already Approved

When you approve an MCP server, you're approving a specific set of tools — a bounded capability surface your agent is allowed to invoke. 108 times in 33 days, a server on the tape gained a new tool. The approval you gave last week silently now covers capabilities that didn't exist when you gave it.

Most are mundane feature work, but the shape matters. adeze/raindrop-mcp added six tools in a single day — including bookmark_manage and tag_manage, write-and-delete operations on a user's data that weren't in the set you originally vetted. karanb192/reddit-mcp-buddy added user_analysis — "analyze a Reddit user's profile including karma, posting history, active subreddits." A read-only Reddit browser quietly became a people-profiler. None of this is malicious on its face. All of it expands what an already-trusted server can do to your data and your agent's context, and a snapshot taken today presents the enlarged tool set as if it were the one you signed off on.

What About Trust Scores Themselves?

The archive also recorded 146 trust-tier movements. I'm deliberately not leading with these, because honesty demands a caveat: a large share are transient. aquasecurity/trivy, for instance, dropped from Verified to Established on May 20 and recovered the next day — the kind of jitter you get when a single upstream signal (an OpenSSF Scorecard fetch, a rate-limited API) blips. Treating that as "trivy got less trustworthy" would be misleading.

But the phenomenon underneath is real and is itself the argument for the whole approach: a Verified score is a point-in-time reading, not a permanent property. Servers do durably cross from Established into Blocked within the window, and a one-time badge embedded in a README has no way to reflect that it's no longer true. Continuous diffing is the only thing that distinguishes a blip from a slide — and that distinction is exactly what a snapshot, by definition, cannot make.

What This Means for You

If you install MCP servers or agent skills:
A trust score is a strong prior at a moment in time, not a standing guarantee. Re-check anything load-bearing before you pull a new version — especially if the maintainer set, install scripts, or tool list changed since you last looked. Score before you install, and watch the ones you depend on.
If you write security or procurement policy:
"We scanned it and it was clean" has a shelf life. The events that matter most — same-version republishes, install-hook additions, maintainer flips — are change events, so your control has to watch over time, not gate once at intake. A pinned version number is not integrity; pin to a hash, and alert on the diff.
If you publish an MCP server:
Don't republish a file under an existing version — cut a new version for any byte change, so consumers' integrity checks mean something. If you add an install hook or hand off maintainership, say so in the release notes. You'll show up in a diff feed either way; better that it reads as expected than as a surprise.
If you build agent platforms or directories:
The trust signal your users need isn't a one-time badge — it's "what changed since they last looked." Capability drift, maintainer changes, and same-version republishes are the things worth surfacing at install time. Snapshot scores can't carry that information; only a version archive can.

What This Data Doesn't Tell You

Honest limitations: 33 days is a short window and a young archive — these are categories and early signals, not a longitudinal trend you should extrapolate. A diff flags that something changed, not that the change was malicious; every example here could be entirely benign, and most probably are. The point is that the change was detectable at all. Detection is also bounded by what we re-fetch and how often, so the true rate of every category is a floor, not a ceiling — we catch a change when we next observe the server, not the instant it happens. And the engine diffs the project around a server — manifests, file hashes, maintainer graph, tool list, score — not the runtime behavior of the code at invocation. Treat a diff as a reason to look, not a conclusion.

Methodology

The archive: every time the MCPSkills engine scores a server, it stores a structured version record — the manifest, install scripts, declared tools, maintainer set, shipped-file hashes, and the full trust score. When a server is re-scored, consecutive records are diffed and each detected change is written as a typed event (maintainer_flipped, install_script_added, binary_hash_changed, tool_added, tier_changed, and so on) with a severity. This report analyzes the complete diff store for May 18 – June 20, 2026: 5,547 raw records, of which 5,056 were endpoint first-observations (excluded as non-changes) and 491 were genuine version-over-version deltas across 251 servers.

Scoring: every server runs through the production mcpskills.io engine — the same 15-signal algorithm available at mcpskills.io. Full algorithm: /methodology. The live diff feed that backs this report is published at /feed/mcpskills-changes-v1.json and the full score dataset at /data/latest.json under CC BY 4.0.

Companion reports: The Trust Middle — State of MCP Server Security, State of Hermes Skill Security, and State of ClawHub Trust.

Data sources

Every diff in this report is reproducible from public data. The trust algorithm is an opinionated combination; the inputs are not.

Watch a server, not just score it

Get the trust report for any MCP server or skill — then subscribe to the diff so you hear about the next change before you pull it.

Open Scanner