agentsclimarketplace

Release mcp version

Skill selic/skills/skills/release-mcp-version

Cut and publish a NEW version of an MCP server that already has its distribution pipeline set up — lockstep version bump across package.json/server.json/manifest.json, land on main, tag, and let CI publish to npm + the official MCP registry + a GitHub release (.mcpb) + a container image. Use when asked to release/ship/publish a new version, cut a release, or "bump and publish" an MCP server. For FIRST-TIME distribution setup use publish-mcp-server instead. Triggers on: "release a new version", "publish vX.Y.Z", "cut a release", "bump the version and publish", "ship the new version".From its SKILL.md

Install
npx -y skills add selic/skills --skill release-mcp-version

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • reads credentialsReads from 1 credential source: `NPM_TOKEN`.
  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 8 commands, including `node -p "require('./package.json').name"` and 7 more.

SKILL.md

6.8 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it

Release a new MCP-server version

Incremental-release runbook for a repo that already has the distribution pipeline in place (npm package, server.json, optional manifest.json, a tag-triggered release.yml, and — if containerised — a docker-publish.yml). Publish-only: npm + the official MCP registry + a GitHub release. Container redeploy is the optional appendix, not part of a normal release.

Auto-detect the target from the repo in the cwd: read package.json for name, mcpName, and the current version.

Bundled resource: bump.mjs sits next to this file — invoke it as node "<skill-dir>/bump.mjs" …, where <skill-dir> is wherever this skill lives (~/.claude/skills/release-mcp-version/, or as a plugin $CLAUDE_PLUGIN_ROOT/skills/release-mcp-version/). The lockstep/online validator is check.mjs from the companion publish-mcp-server skill.

⚠️ Steps that need the user's explicit go-ahead

The harness will (correctly) block these; do not retry silently — pause and ask:

  1. Landing on main — a direct push to the default branch, or merging a PR you authored yourself. Ask the user to confirm, or have them merge in the GitHub UI.
  2. (Appendix only) a production container redeploy.

Everything else runs unattended, except the registry device-flow, where you surface a code + URL and the user approves in a browser.

Phase 0 — preflight

  • Confirm the cwd is the intended repo (node -p "require('./package.json').name").
  • Working tree clean (git status --short); on main or the release branch/PR.
  • Green locally: npm ci && npm run build && npm test.
  • Choose the semver bump from what changed: patch (fixes), minor (additive, backward-compatible), major (breaking). On 0.x, treat breaking as a minor.
  • Confirm the npm token is in THIS repo's Actions secrets — it's per-repo: gh api repos/<owner>/<repo>/actions/secrets --jq '.secrets[].name' should list NPM_TOKEN. A token in another repo does not apply and can't be copied (secrets are write-only). If missing: gh secret set NPM_TOKEN --repo <owner>/<repo> (paste at the prompt), or plan to npm publish by hand.

Phase 1 — bump the version (lockstep)

The version must match in every place the pipeline reads it: package.json, server.json (top-level and packages[0].version), and manifest.json.

node "<skill-dir>/bump.mjs" <patch|minor|major|X.Y.Z>
node "<publish-mcp-server skill-dir>/check.mjs"      # confirms lockstep + packaging
git add -A && git commit -m "Release vX.Y.Z"

bump.mjs edits all locations, skips a missing manifest.json, and refuses a downgrade.

Phase 2 — land on main ⚠️ (authorization gate)

  • Direct on main: git push origin mainask first (default-branch push).
  • Via a PR: gh pr merge <n> --merge --delete-branchask first (self-merge is blocked). Or the user clicks Merge; then git checkout main && git pull.

Phase 3 — tag & push → CI publishes

git tag vX.Y.Z && git push origin vX.Y.Z

The tag push (not git tag alone) fires:

  • release.yml → build/test → npm publish --provenance (uses NPM_TOKEN; no-ops if the version is already live or the token is unset) → .mcpb bundle → GitHub release.
  • docker-publish.yml (if present) → container image (:X.Y.Z, :X.Y, :latest from main).

Watch: gh run watch "$(gh run list --workflow=release.yml --limit 1 --json databaseId --jq '.[0].databaseId')" --exit-status --compact. Confirm the "Publish to npm" step's conclusion is success (not skipped) via gh run view <id> --json jobs.

Phase 4 — MCP registry (device-flow)

The mcp-publisher login token expires in well under an hour — log in immediately before publishing. Run login in the background, read its output, and give the user the code + URL; it completes when they authorize.

mcp-publisher login github     # → "enter code XXXX-XXXX at https://github.com/login/device"
mcp-publisher publish          # reads ./server.json

Phase 5 — verify

node "<publish-mcp-server skill-dir>/check.mjs" --online   # npm + registry + tag all current
gh release view vX.Y.Z --json assets                       # .mcpb attached
(cd /tmp && npx -y <pkg>@X.Y.Z --help)                     # from OUTSIDE the repo

Gotchas (each cost real time once)

  • NPM_TOKEN is per-repo and write-only — a token in another repo doesn't count and can't be read/copied; add it to the repo you're releasing.
  • The mcp-publisher login token dies fast — always log in right before publish.
  • Run the npx smoke test from outside the repo (npx -y <name> inside the repo resolves the local package and fails).
  • A release fires on tag push, not git tag. A tag on a commit predating the workflow file runs nothing.
  • If git tag vX.Y.Z says "already exists" it aborts a chained && git push — push the existing tag explicitly.

Appendix — container redeploy (optional, not a normal release step)

If the server runs as a container pulled from a registry (e.g. an Azure App Service or any host), the image is already built by docker-publish.yml; redeploy = repoint the tag and restart. ⚠️ Production change — get an explicit go-ahead. Prefer enabling the host's continuous-deployment webhook so a tag push auto-rolls; otherwise repoint + restart by hand.

Azure App Service example (fill in your own coordinates):

SUB=<subscription-id>; RG=<resource-group>; APP=<app-name>
az webapp config container show --subscription $SUB -g $RG -n $APP \
  --query "[?name=='DOCKER_CUSTOM_IMAGE_NAME'].value" -o tsv          # current image:tag
az webapp config container set  --subscription $SUB -g $RG -n $APP \
  --container-image-name <registry>/<owner>/<repo>:latest             # or :X.Y.Z to pin
az webapp restart --subscription $SUB -g $RG -n $APP
# then poll https://<host>/health until "version" == X.Y.Z

az may need brew reinstall azure-cli then az login --use-device-code (surface the code like the registry flow). Rollback: rerun container set with the previous tag.

What ships with it: 1 file

3.9 KB alongside SKILL.md, 1 of them executable

Gives 2 of the 12 instructions most ship operate skills give in ~1.6k tokens

Counted across 1,077 of the 1,713 authors here whose files we hold, read 2026-09-06

  • Create GitHub releasein 44 of 1077, across 43 files
  • Run the test suitein 30 of 1077, across 25 files
  • Create and push git taghere, and in 27 of 1077, across 26 files
  • Push commits and tagsin 27 of 1077
  • Create annotated tagin 25 of 1077, across 22 files
  • Ensure working tree is cleanhere, and in 24 of 1077
  • Check for product marketing context firstin 23 of 1077, across 6 files
  • Commit version bump changesin 22 of 1077, across 21 files
  • Update CHANGELOG.mdin 21 of 1077, across 20 files
  • Structure launch marketing across three channel typesin 20 of 1077, across 5 files
  • Commit and tag the releasein 20 of 1077, across 18 files
  • Update the CHANGELOG for new releasesin 19 of 1077

Said here and by no other author read

  • Run tests and build locally
  • Confirm the npm token is set
  • Land changes on main
  • Log in to the MCP publisher
  • Run the npx smoke test outside the repo

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.