Skip to content

Create v2 publishing pipeline for main.yml (single inspector package) #1636

Description

@cliffhall

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

  1. 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).
  2. 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.
  3. Version consistency. v1 has check-version / update-version scripts across workspaces. Decide the v2 equivalent (single version, or main + core in lockstep / independent).
  4. GHCR Docker image. Confirm whether the container publish job carries over and what it should build (launcher entrypoint).
  5. 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/mainmain cutover; the workflow edit lands when v2 replaces v1.

Metadata

Metadata

Assignees

Labels

v2Issues and PRs for v2

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions