field-test
Exercise git tools, resources, and prompts against a live HTTP server via MCP JSON-RPC over curl. Starts the server, surfaces the…
Ship a release end-to-end across every registry this project targets (npm, MCP Registry). Runs the final verification gate, pushes commits and tags, then publishes to each applicable destination. Assumes git wrapup (version bumps, changelog, commit, annotated tag) is already
$ npx -y skills add cyanheads/git-mcp-server --skill release-and-publish --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/release-and-publishContext preview
The summary Claude sees to decide when to auto-load this skill.
Ship a release end-to-end across every registry this project targets (npm, MCP Registry). Runs the final verification gate, pushes commits and tags, then publishes to each applicable destination. Assumes git wrapup (version bumps, changelog, commit, annotated tag) is already
name: release-and-publish description: > Ship a release end-to-end across every registry this project targets (npm, MCP Registry). Runs the final verification gate, pushes commits and tags, then publishes to each applicable destination. Assumes git wrapup (version bumps, changelog, commit, annotated tag) is already complete — this skill is the post-wrapup publish workflow. Halts and alerts the user on the first failure. metadata: author: cyanheads version: '1.0' type: workflow
This skill runs **after** git wrapup. By the time it's invoked:
If any are missing, halt and tell the user to finish wrapup first. Do not attempt to redo wrapup work from inside this skill.
**Stop on the first non-zero exit.** No retries, no remediation from inside the skill. Report to the user:
1. Which step failed 2. The exact error output 3. Which destinations already received the release (npm published? tag pushed?) so they know the partial state
The user fixes locally and re-invokes, or runs the remaining steps manually. Publishes hard-fail with "version already exists" if replayed — that's the signal the step already succeeded.
Read `package.json` → capture `version`. Read `server.json` → verify top-level `version` matches and every `packages[].version` matches. Then verify git state:
git status --porcelain # must be empty — clean working tree git describe --exact-match --tags HEAD 2>&1 # must equal v<version> git rev-parse --abbrev-ref HEAD # note the branch name
If working tree is dirty, HEAD isn't on `v<version>`, or `server.json` versions drift from `package.json`, halt.
All three must succeed:
bun run devcheck bun run rebuild bun test
Any non-zero exit → halt with the failing command's output.
`devcheck` runs lint + format + typecheck + `bun audit`. `rebuild` is a clean + `bun build` to catch build-time regressions `devcheck` alone can miss.
git push git push --tags
If the remote rejects either push, halt. On a fresh branch, `git push` may need `-u origin <branch>` — read the error and re-run if that's the only gap.
bun publish --access public
`bun publish` uses whatever npm auth the user has configured in `~/.npmrc`. If 2FA is enabled on the npm account, the command will prompt for an OTP or open a browser — that's expected; the user completes it interactively.
**Friction reducers (optional, configure once):**
| Option | How | | :----------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------- | | **npm granular access token** with "Bypass 2FA for publish" | Generate at npmjs.com → replace `_authToken` in `~/.npmrc` → no OTP prompt at all | | **1Password CLI TOTP injection** (requires `brew install --cask 1password-cli` + signed-in `op`) | `bun publish --access public --otp="$(op item get 'npm' --otp)"` |
Halt on publish error other than "version already exists" (which means this step already ran).
bun run publish-mcp
This repo's `publish-mcp` script is defined in `package.json` and runs `scripts/validate-mcp-publish-schema.ts` before invoking `mcp-publisher`. Reads `server.json` at the repo root.
Prereqs:
If the Keychain entry doesn't exist:
security add-generic-password -a "$USER" -s mcp-publisher-github-pat -w # paste PAT at the silent prompt
Halt on any publisher error other than "cannot publish duplicate version".
Print clickable URLs for every destination that succeeded:
Skip any destination that was skipped or failed in its step.
The annotated tag is enough for npm/MCP Registry. A GitHub Release adds a human-readable changelog page and optional assets. Skip unless the project publishes releases to GitHub Releases specifically.
gh release create "v<version>" \ --title "v<version>" \ --notes-file <(awk "/^## v<version>/,/^## v/" CHANGELOG.md | sed '$d')
The `awk` expression extracts just the current version's section from `CHANGELOG.md`.
Clone, commit, diff, branch, merge, rebase, cherry-pick, stash, tag, and manage worktrees in local git repos via MCP. STDIO or Streamable HTTP.
Exercise git tools, resources, and prompts against a live HTTP server via MCP JSON-RPC over curl. Starts the server, surfaces the…
Investigate, adopt, and verify dependency updates. Captures what changed, understands why, cross-references against the codebase,…
Finalize documentation and project metadata for a ship-ready release. Use after implementation is complete, tests pass, and…
File a bug or feature request against this repository (cyanheads/git-mcp-server) using the `gh` CLI. Use for tool logic bugs, git…