Summary
When v2/main eventually replaces main, the release/publish pipeline in .github/workflows/main.yml has to change. v2 no longer publishes the separate @modelcontextprotocol/inspector-client / -server / -cli packages — it ships a single package, @modelcontextprotocol/inspector, that bundles the launcher, web, cli, and tui builds. We need to investigate exactly what the publishing workflow should look like on the new architecture.
Background
- v1
main.yml (current main branch) has a publish job that runs npm run publish-all = npm publish --workspaces --access public && npm publish --access public. That relies on the v1 npm workspaces (client, server, cli) to publish four packages. It also has a publish-github-container-registry job (GHCR Docker image). Both are gated on github.event_name == 'release'.
- v2
main.yml (this branch) has no publish job at all — it only runs CI (validate → coverage gate → smokes → Storybook). Publishing was never ported.
- v2 is not an npm workspace. Each
clients/* keeps its own package.json/node_modules; the root postinstall cascades installs. The published root package @modelcontextprotocol/inspector (v2.0.0) declares files = the launcher/web/cli/tui build outputs + install-clients.mjs, and bin = mcp-inspector. So npm run publish-all / --workspaces no longer applies.
What to investigate / decide
- Single-package publish for v2. Design the release job that publishes just
@modelcontextprotocol/inspector. Confirm files/prepack/bin produce a correct, installable tarball (npm pack dry-run), including that the postinstall client cascade is a no-op for end users (it exits early under node_modules, and only build/ ships).
- Publish
core/ as its own package? core/ is currently consumed via the @inspector/core Vite alias and has no package.json. Investigate giving it its own publishable package (e.g. @modelcontextprotocol/inspector-core) so third parties can build on the shared InspectorClient/state/react/auth/mcp code. This needs: a core/package.json (name, version, exports map, types), a build step (currently it's only ever bundled by consumers, never built standalone), decoupling from the Vite alias for external consumers, and versioning strategy vs. the main package.
- Version consistency. v1 has
check-version / update-version scripts across workspaces. Decide the v2 equivalent (single version, or main + core in lockstep / independent).
- GHCR Docker image. Confirm whether the container publish job carries over and what it should build (launcher entrypoint).
- Provenance / release environment. Port the
environment: release, id-token: write, and the --provenance TODO now that the repo is public.
Tracking issue for the v2 publish pipeline.
Acceptance
- A documented plan (and/or draft workflow changes) for the v2 publish pipeline on
main.yml, covering: single inspector package publish, the decision + mechanics for an optional standalone core package, version consistency, GHCR, and provenance.
Note: this targets the eventual v2/main → main cutover; the workflow edit lands when v2 replaces v1.
Summary
When
v2/maineventually replacesmain, the release/publish pipeline in.github/workflows/main.ymlhas to change. v2 no longer publishes the separate@modelcontextprotocol/inspector-client/-server/-clipackages — it ships a single package,@modelcontextprotocol/inspector, that bundles the launcher, web, cli, and tui builds. We need to investigate exactly what the publishing workflow should look like on the new architecture.Background
main.yml(currentmainbranch) has apublishjob that runsnpm run publish-all=npm publish --workspaces --access public && npm publish --access public. That relies on the v1 npm workspaces (client,server,cli) to publish four packages. It also has apublish-github-container-registryjob (GHCR Docker image). Both are gated ongithub.event_name == 'release'.main.yml(this branch) has no publish job at all — it only runs CI (validate → coverage gate → smokes → Storybook). Publishing was never ported.clients/*keeps its ownpackage.json/node_modules; the rootpostinstallcascades installs. The published root package@modelcontextprotocol/inspector(v2.0.0) declaresfiles= the launcher/web/cli/tui build outputs +install-clients.mjs, andbin=mcp-inspector. Sonpm run publish-all/--workspacesno longer applies.What to investigate / decide
@modelcontextprotocol/inspector. Confirmfiles/prepack/binproduce a correct, installable tarball (npm packdry-run), including that thepostinstallclient cascade is a no-op for end users (it exits early undernode_modules, and onlybuild/ships).core/as its own package?core/is currently consumed via the@inspector/coreVite alias and has nopackage.json. Investigate giving it its own publishable package (e.g.@modelcontextprotocol/inspector-core) so third parties can build on the shared InspectorClient/state/react/auth/mcp code. This needs: acore/package.json(name, version, exports map, types), a build step (currently it's only ever bundled by consumers, never built standalone), decoupling from the Vite alias for external consumers, and versioning strategy vs. the main package.check-version/update-versionscripts across workspaces. Decide the v2 equivalent (single version, or main + core in lockstep / independent).environment: release,id-token: write, and the--provenanceTODO now that the repo is public.Tracking issue for the v2 publish pipeline.
pack:verify+ single-source version — v2 single-package publish bundle correctness + pack:verify #1645main.ymlrelease job (publish, provenance, GHCR, version/tag flow) — Wire the v2 single-package publish/release job into main.yml (at the v2→main cutover) #1640Standalone— deferredcorepackageAcceptance
main.yml, covering: singleinspectorpackage publish, the decision + mechanics for an optional standalonecorepackage, version consistency, GHCR, and provenance.Note: this targets the eventual
v2/main→maincutover; the workflow edit lands when v2 replaces v1.