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
Phase 2 of 9 in the v2 go-live runbook — see #1804 (§4). Depends on #1824.
⚠️IRREVERSIBLE — this publishes to npm. A version number is consumed and cannot be unpublished in practice.
Ship the v1 deprecation notice as 1.0.1, published from v1/main. This doubles as the trusted-publishing rehearsal: it is the first evidence that OIDC publishing works from a non-default branch, which is what makes the whole "v1 keeps taking security fixes" story viable.
Two steps: a PR carrying the content change, then a release cut from the merged branch.
Step 1 — PR into v1/main
After #1824 the branch is ruleset-protected: 1 approving review, code-owner review, and a green build check. No direct pushes.
Deprecation notice in all four published packages, not just the root.
v1 publishes four names and each is separately installable, so each needs
its own notice — a root-README-only change is invisible to anyone who
installed a sub-package.
| Package | Where the notice goes |
| --- | --- |
| `@modelcontextprotocol/inspector` (root) | `README.md` |
| `@modelcontextprotocol/inspector-cli` | `cli/src/cli.ts` — stderr banner in `main()` (:376). Also covers the **root `mcp-inspector` bin**, which is `cli/build/cli.js`. Must be **stderr**, not stdout: `--cli` mode emits JSON on stdout and a banner there would corrupt piped output. |
| `@modelcontextprotocol/inspector-server` | `server/src/index.ts` — alongside the existing `⚙️ Proxy server listening` log (:1091) |
| `@modelcontextprotocol/inspector-client` | `client/bin/start.js` — next to the `🚀 MCP Inspector is up and running` log (:170); plus `client/README.md`, the only sub-package with one, and a dismissible banner in the web UI itself |
Wording should match the `npm deprecate` text in #1816 so the npm warning
and the runtime notice say the same thing: v1 is deprecated, use
`@modelcontextprotocol/inspector@latest`, v1 gets security fixes only.
Note `cli/` and `server/` have **no README**, so npm renders a blank page
for those two — the runtime banner and the `npm deprecate` warning (#1816)
are the only notice their users get.
npm run update-version 1.0.1 — bumps all four (package.json + client/server/cli). The build job's check-version step fails if they drift, so this is enforced by the PR gate rather than trusted to memory.
For a release event GitHub runs the workflow file from the commit the tag points at, so --target selects which main.yml executes. Tag has no v prefix, matching 1.0.0. The whole workflow runs — build (format, check-version, lint, tests) then publish, which is needs: build, so a failed check stops it before npm.
gh run watch — approve the deployment if the release environment prompts.
Partial publish.publish-all is npm publish --workspaces && npm publish. Workspaces can land while the root fails, leaving the three sub-packages at 1.0.1 and the root at 1.0.0. Recoverable (bump to 1.0.2, go again), not clean — hence verifying both above.
The --tag v1 publish path, and a publish in the post-2.0.0 world where latest is genuinely at risk. The first real v1 security fix remains the first true exercise of that.
Phase 2 of 9 in the v2 go-live runbook — see #1804 (§4). Depends on #1824.
Ship the v1 deprecation notice as 1.0.1, published from
v1/main. This doubles as the trusted-publishing rehearsal: it is the first evidence that OIDC publishing works from a non-default branch, which is what makes the whole "v1 keeps taking security fixes" story viable.Two steps: a PR carrying the content change, then a release cut from the merged branch.
Step 1 — PR into
v1/mainAfter #1824 the branch is ruleset-protected: 1 approving review, code-owner review, and a green
buildcheck. No direct pushes.Deprecation notice in all four published packages, not just the root.
v1 publishes four names and each is separately installable, so each needs
its own notice — a root-README-only change is invisible to anyone who
installed a sub-package.
npm run update-version 1.0.1— bumps all four (package.json+client/server/cli). Thebuildjob'scheck-versionstep fails if they drift, so this is enforced by the PR gate rather than trusted to memory.Do NOT add
--tag v1topublish-allin this PR. 1.0.1 must takelatest— that is the entire point of shipping the notice tonpxusers. (--tag v1is go-live 3/9: lock the v1 dist-tag and deprecate all four packages on npm #1816, immediately after.)Merge once
buildis green.Step 2 — cut the release
For a
releaseevent GitHub runs the workflow file from the commit the tag points at, so--targetselects whichmain.ymlexecutes. Tag has novprefix, matching1.0.0. The whole workflow runs —build(format,check-version, lint, tests) thenpublish, which isneeds: build, so a failed check stops it before npm.gh run watch— approve the deployment if thereleaseenvironment prompts.npm view @modelcontextprotocol/inspector dist-tags→latest: 1.0.1npm view @modelcontextprotocol/inspector-cli version→1.0.1Pre-flight (already checked)
Settings → Environments → release→ Deployment branches and tags = No restriction (verified 2026-07-27), so the tag reaches the publish job.Hazards
publish-allisnpm publish --workspaces && npm publish. Workspaces can land while the root fails, leaving the three sub-packages at 1.0.1 and the root at 1.0.0. Recoverable (bump to 1.0.2, go again), not clean — hence verifying both above.workflow_dispatchpublish job onmaindescribed in plan: v2 go-live runbook — deprecate v1 (1.0.1), branch v1/main, swap main to v2, publish 2.0.0, close v1 backlog, restrict external PRs #1804 §4 — and keep that job inline inmain.yml, since npm validates the calling workflow's filename and a reusableworkflow_callbreaks the match.What this does not prove
The
--tag v1publish path, and a publish in the post-2.0.0 world wherelatestis genuinely at risk. The first real v1 security fix remains the first true exercise of that.Blocks #1816.