You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
go-live 3/9: lock the v1 dist-tag and deprecate all four packages on npm #1816
Phase 3 of 9 in the v2 go-live runbook — see #1804 (§1, §3). Depends on phase 2. Mostly reversible.
Close the two npm-side traps left open by the 1.0.1 publish.
Status: complete. See the corrections note below — the runbook's v1 tag name and <=1.0.0 range were both wrong.
Tasks
⚠️Two corrections found while executing this phase.
The tag is v1-latest, not v1. npm rejects any dist-tag that parses
as a SemVer range, and v1 parses as 1.x
(npm error Tag name must not be a valid SemVer range: v1). This bit
twice — npm dist-tag add failed, and the --tag v1 merged in chore: pin v1 publishes to the v1 dist-tag #1828 would
have made the next v1 security release fail to publish outright, at
release time. Fixed in fix: v1 dist-tag must be v1-latest — npm rejects v1 #1829.
The sub-package range is <2.0.0, not <=1.0.0. That range was
written before phase 2 published 1.0.1 to all three sub-packages, so it
would have left the version latest resolves to — the one everyone
installs — un-deprecated.
Escape hatch: v1-latest → 1.0.1 on all four names, so npm i @modelcontextprotocol/<pkg>@v1-latest resolves consistently and the deprecation message points somewhere real.
npm deprecate all four names at @<2.0.0. Safe for the sub-packages — no 2.x will ever exist for them, since v2 ships only the root package.
Why --tag v1 is the one to not forget
publish-all has no --tag, so npm assigns latest to whatever it publishes. Once 2.0.0 is out, a 1.0.2 security fix from v1/main would move latest back to 1.0.2 — every npx @modelcontextprotocol/inspector in the world silently reverts to deprecated v1. Nothing enforces this flag, and the cost of forgetting surfaces months later.
The three sub-packages (inspector-client, inspector-server, inspector-cli) are permanently orphaned at 1.0.0 with a live latest tag — v2 publishes only the root package. Without deprecation, people keep installing packages that will never update again.
npm deprecate is retroactive-but-mutable (liftable with an empty message), so it is the reversible step here.
changed the title [-]go-live 2/9: v1 deprecation notice + publish 1.0.1 from v1/main (OIDC rehearsal)[/-][+]go-live 3/9: lock the v1 dist-tag and deprecate all four packages on npm[/+]on Jul 27, 2026
✅ all four; confirmed on 1.0.1, 1.0.0, and back through 0.x
Warning on a real install
✅ all four, full message, in a clean throwaway consumer
Two runbook errors found and fixed — both would have surfaced later and worse:
v1 is not a legal dist-tag. npm rejects any tag parsing as a SemVer range. Beyond failing dist-tag add, the --tag v1 merged in chore: pin v1 publishes to the v1 dist-tag #1828 would have made the next v1 security release fail to publish at release time, mid-incident. Now v1-latest (fix: v1 dist-tag must be v1-latest — npm rejects v1 #1829), with the workflow comment recording both failure modes so neither the flag nor the specific name gets "cleaned up" later.
<=1.0.0 for the sub-packages was stale — written before phase 2 shipped 1.0.1 to all three, so it would have left the version latest points at un-deprecated. Now <2.0.0 everywhere.
Also worth recording: the deprecation message had to be applied from a script file, not a pasted command. A long pasted line gets hard-wrapped by the terminal and the embedded newline is stored verbatim — npm then truncates its warning at the break, hiding the upgrade pointer. Took two attempts to spot; the tell was the break moving with message length. Anyone re-running npm deprecate should build the string in a file.
The latest → v1 trap (#1804 §1) is now closed ahead of 2.0.0.
Activity
[-]go-live 2/9: v1 deprecation notice + publish 1.0.1 from v1/main (OIDC rehearsal)[/-][+]go-live 3/9: lock the v1 dist-tag and deprecate all four packages on npm[/+]chore: v1 deprecation notices in all four packages, bump to 1.0.1
chore: v1 deprecation notices in all four packages, bump to 1.0.1 (#1827
cliffhall commentedon Jul 28, 2026
Phase 3 complete. Verified against the live registry:
publish-allpins--tag v1-latestv1/main(#1828, corrected by #1829)v1-latest→ 1.0.1npm i …@v1-latestresolvesnpm deprecate @<2.0.0Two runbook errors found and fixed — both would have surfaced later and worse:
v1is not a legal dist-tag. npm rejects any tag parsing as a SemVer range. Beyond failingdist-tag add, the--tag v1merged in chore: pin v1 publishes to thev1dist-tag #1828 would have made the next v1 security release fail to publish at release time, mid-incident. Nowv1-latest(fix: v1 dist-tag must bev1-latest— npm rejectsv1#1829), with the workflow comment recording both failure modes so neither the flag nor the specific name gets "cleaned up" later.<=1.0.0for the sub-packages was stale — written before phase 2 shipped 1.0.1 to all three, so it would have left the versionlatestpoints at un-deprecated. Now<2.0.0everywhere.Also worth recording: the deprecation message had to be applied from a script file, not a pasted command. A long pasted line gets hard-wrapped by the terminal and the embedded newline is stored verbatim — npm then truncates its warning at the break, hiding the upgrade pointer. Took two attempts to spot; the tell was the break moving with message length. Anyone re-running
npm deprecateshould build the string in a file.The
latest→ v1 trap (#1804 §1) is now closed ahead of 2.0.0.ci: derive the npm dist-tag from the version instead of defaulting to…