Simple English
moeru-ai/airi
Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.
Create release notes for a new version tag. An agent skill from agentic-community/mcp-gateway-registry.
$ npx skills add agentic-community/mcp-gateway-registry --skill release-notes -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install agentic-community/mcp-gateway-registry release-notes --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/agentic-community/mcp-gateway-registry.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release-notes .claude/skills/release-notes && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "release-notes" agent skill from https://github.com/agentic-community/mcp-gateway-registry/tree/main/.claude/skills/release-notes into .claude/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/agentic-community/mcp-gateway-registry/tree/main/.claude/skills/release-notesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add agentic-community/mcp-gateway-registry --skill release-notes -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install agentic-community/mcp-gateway-registry release-notes --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agentic-community/mcp-gateway-registry.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/release-notes .agents/skills/release-notes && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release-notes" agent skill from https://github.com/agentic-community/mcp-gateway-registry/tree/main/.claude/skills/release-notes into .agents/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add agentic-community/mcp-gateway-registry --skill release-notes -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install agentic-community/mcp-gateway-registry release-notes --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agentic-community/mcp-gateway-registry.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/release-notes .cursor/skills/release-notes && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release-notes" agent skill from https://github.com/agentic-community/mcp-gateway-registry/tree/main/.claude/skills/release-notes into .cursor/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/agentic-community/mcp-gateway-registry.git --path .claude/skills/release-notes--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add agentic-community/mcp-gateway-registry --skill release-notes -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install agentic-community/mcp-gateway-registry release-notes --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agentic-community/mcp-gateway-registry.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/release-notes .gemini/skills/release-notes && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release-notes" agent skill from https://github.com/agentic-community/mcp-gateway-registry/tree/main/.claude/skills/release-notes into .gemini/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install agentic-community/mcp-gateway-registry release-notesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add agentic-community/mcp-gateway-registry --skill release-notes -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/agentic-community/mcp-gateway-registry.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/release-notes .github/skills/release-notes && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release-notes" agent skill from https://github.com/agentic-community/mcp-gateway-registry/tree/main/.claude/skills/release-notes into .github/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add agentic-community/mcp-gateway-registry --skill release-notes -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install agentic-community/mcp-gateway-registry release-notes --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/agentic-community/mcp-gateway-registry.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/release-notes .opencode/skills/release-notes && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release-notes" agent skill from https://github.com/agentic-community/mcp-gateway-registry/tree/main/.claude/skills/release-notes into .opencode/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
release-notesCreate release notes for a new version tag. An agent skill from agentic-community/mcp-gateway-registry.
Release Notes is an agent skill from agentic-community/mcp-gateway-registry. Create release notes for a new version tag. Gathers all commits, PRs, issues fixed, and breaking changes since a previous release. Creates the release notes markdown file, tags the repo, and pushes. Asks the user to confirm the base version to diff against.
Its SKILL.md is about 6.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Changelog and release notes. The repository describes itself as: Enterprise-ready MCP Gateway & Registry that centralizes AI development tools with secure OAuth authentication, dynamic tool discovery, and unified access for both autonomous AI… The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit ec3a197. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitghhelmterraformuvFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release Notes loads about 6.9k tokens when it runs. Until then it costs about 68 tokens; SKILL.md has 2,374 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
env vars in .env.example and update your .env if neededAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from agentic-community/mcp-gateway-registry at commit ec3a197, republished under its Apache-2.0 licence (© agentic-community). 2,374 words, ~6,905 tokens.
.claude/skills/release-notes/SKILL.md (or your agent's skills folder).Use this skill when the user wants to create release notes for a new version. This skill gathers all changes since a previous release, writes structured release notes following the project's established format, tags the repo, and pushes.
The skill takes a version tag as input:
{major}.{minor}.{patch} (e.g., 1.24.0) - no v prefix, semver only1.23.0) used a v prefix (e.g., v1.0.22) - existing artifacts under docs/release-notes/v*.md and tags v1.0.x are preserved as-is, but new releases must use the bare-semver conventionv-prefixed version for a new release, strip the prefix and confirmCreates a release notes file in docs/release-notes/ and tags the repo:
docs/release-notes/{version}.md - Release notes markdown file (e.g., docs/release-notes/1.24.0.md){version} pointing to the commit that includes the release notesBefore doing any release-notes work, confirm the end-to-end release smoke test
(tests/e2e_release_test.py) has been run
against a live gateway and passed. This suite exercises the surface a release
must not break: the registry is up, the built-in airegistry-tools server is
healthy and its search tool works, servers/agents/skills support full CRUD,
semantic search returns results, security scans run, and one real external MCP
server (AWS knowledge base) is reachable end to end through the gateway proxy.
Ask the user, using AskUserQuestion, whether they have already run the release smoke test and it passed. Offer these options:
If the user asks you to run it, run against the target gateway. It needs an admin/M2M bearer token file (Keycloak tokens expire in ~5 minutes, so regenerate first if unsure):
# Local gateway with an admin token at ./.token
uv run python tests/e2e_release_test.py --token-file .token --registry-url http://localhost
# Remote gateway
uv run python tests/e2e_release_test.py \
--registry-url https://<gateway-host> --token-file .oauth-tokens/ingress.jsonThe runner prints a pass/fail table and exits non-zero if any test fails.
If the user chooses to skip it, warn once that the release is being cut without an end-to-end verification, then proceed only if they confirm.
Only after this gate is resolved do you continue to Step 1.
v1.24.0 becomes 1.24.0). Never prepend v for new releases.git tag -l {version}.The release notes are incremental from a previous version. Determine the base version:
v-prefixed and new bare-semver names):ls docs/release-notes/*.mdgit tag --sort=-v:refname | grep -E '^v?[0-9]+\.[0-9]+\.[0-9]+'v-prefixed (v1.0.22) to bare-semver (1.23.0, 1.24.0) - the most recent bare-semver tag is the right base for a new release.1.23.0 to 1.25.0, skipping 1.24.0).Run these commands in parallel to gather change data:
# All commits (including merges) between base and HEAD
git log {base_tag}..HEAD --oneline
# Non-merge commits only (for detailed change analysis)
git log {base_tag}..HEAD --oneline --no-merges
# PR numbers in this release.
#
# DO NOT derive these from commit subjects. This repo is REBASE-AND-MERGE ONLY,
# so there are no "Merge pull request" commits and no "(#NNNN)" suffixes:
# git log {base_tag}..HEAD --oneline --grep="Merge pull request" -> 0 results
# git log {base_tag}..HEAD --oneline | grep -oE "\(#[0-9]+\)$" -> 0 results
# Those are the standard idioms on a squash-merge repo and they fail SILENTLY
# here, returning an empty list that reads like "no PRs in this release".
#
# Enumerate from the GitHub API by merge time instead, and see the base-window
# note below for which timestamp to use as the floor.
gh pr list --state merged --limit 200 \
--json number,title,mergedAt,author,closingIssuesReferences \
--jq "sort_by(.number) | reverse | .[] | select(.mergedAt > \"$BASE_WINDOW\") | \"#\(.number)|\(.author.login)|\(.title)\""
# Spot-check any individual PR's membership by ancestry, which is authoritative
# regardless of merge strategy. Find the PR's commit on main by subject, then:
# git merge-base --is-ancestor <commit> {base_tag} && echo "already in {base_tag}"
# Use this whenever a contributor asks why their PR is or is not listed.
# Contributors -- direct authors of commits on main
# WARNING: this misses co-authors of squash-merged PRs (Step 4 #10 explains).
git log {base_tag}..HEAD --format="%aN" | sort | uniq -c | sort -rn
# Contributors -- per-PR commit authors (catches squash-merge co-authors)
# Squash merges collapse N branch commits into 1 commit on main authored by
# the merger, so `git log` above will not show the actual code authors.
# `gh pr view --json commits` returns the original branch commits with their
# authors intact, which is the only reliable way to credit everyone.
# $PR_NUMBERS comes from the gh pr list call above, NOT from commit subjects.
for pr in $PR_NUMBERS; do
gh pr view $pr --json number,author,commits \
--jq '"PR #\(.number) | opener: \(.author.login) | commit_authors: \([.commits[].authors[].name] | unique | join(", "))"' 2>/dev/null
done
# Env var changes
git diff {base_tag}..HEAD -- .env.example
# Helm chart changes (any file change inside charts/ requires
# `helm dependency build/update` for stack-chart consumers, even if
# Chart.yaml dependency lists are unchanged - subchart templates,
# values, and helpers are repackaged into .tgz on dependency rebuild).
git diff {base_tag}..HEAD -- charts/ --stat
# If ANY of these report changes, the upgrade instructions MUST tell
# Helm/EKS users to run `helm dependency build` and `helm dependency update`:
git diff {base_tag}..HEAD --stat -- 'charts/registry/' 'charts/auth-server/' 'charts/mcpgw/' 'charts/mcp-gateway-registry-stack/' 'charts/mongodb-configure/' 'charts/keycloak-configure/'
# Helm chart dependency-list changes (separate signal: added/removed deps)
git diff {base_tag}..HEAD -- charts/registry/Chart.yaml charts/auth-server/Chart.yaml charts/mcp-gateway-registry-stack/Chart.yaml charts/mcpgw/Chart.yaml
# Establish the base window ONCE, and use the EARLIER of two timestamps.
# The tag commit can be timestamped AFTER the GitHub release was published (seen
# on 1.31.0: tag commit 2026-09-24T00:34:45Z, release published
# 2026-09-23T22:34:13Z), in which case the tag-commit floor silently drops PRs
# that belong in the new release. Taking the earlier of the two is inclusive, and
# anything wrongly included is caught by the ancestry check above.
BASE_TAG_DATE=$(git log -1 --format=%cI {base_tag})
RELEASE_DATE=$(gh release view {base_tag} --json publishedAt --jq .publishedAt)
BASE_WINDOW=$(printf '%s\n%s\n' "$BASE_TAG_DATE" "$RELEASE_DATE" | sort | head -1)
echo "base window: $BASE_WINDOW"
gh issue list --state closed --limit 200 --json number,title,closedAt,labels \
--jq ".[] | select(.closedAt >= \"$BASE_WINDOW\") | \"\(.number) | \(.title) | \(.closedAt)\""
# Closed issues referenced by merged PRs in this release (most reliable mapping)
# For each PR number, the PR body usually has "Closes #N" or "Fixes #N" -- gh
# resolves these via the closingIssuesReferences field.
for pr in $PR_NUMBERS; do
gh pr view $pr --json number,title,closingIssuesReferences \
--jq '"\(.number) | \(.title) | closes: \(.closingIssuesReferences | map("#\(.number)") | join(","))"' 2>/dev/null
doneAnalyze all commits and PRs to categorize them:
Major Features: New capabilities that warrant their own section with description and PR link. Look for commits with feat: prefix or PRs labeled enhancement/feature-request.
Breaking Changes: Changes that require user action during upgrade. Check for:
New Environment Variables: Extract from .env.example diff -- any new variables added.
Bug Fixes: Commits with fix: prefix or PRs labeled bug.
Security Fixes: Commits mentioning security, CVE, injection, bypass, XSS, etc.
Infrastructure/Helm Changes: Changes to charts/, terraform/, docker/.
Dependency Updates: Dependabot PRs and manual dependency bumps.
Documentation: Commits with docs: prefix.
Closed Issues: Issues closed in the release window. Build from the
closingIssuesReferences of every merged PR in this release (most reliable -
GitHub auto-closes issues referenced by Closes #N / Fixes #N in PR
bodies), and supplement with manually-closed issues whose closedAt is
between the base-tag commit date and HEAD. De-duplicate by issue number.
Contributors: Build the union of TWO sources, because neither alone is complete:
git log {base_tag}..HEAD --format="%aN" --
catches anyone who pushed commits directly or whose PR was rebase/merge-
committed.gh pr view <num> --json commits --jq '[.commits[].authors[].name] | unique'
and union the results -- catches co-authors of squash-merged PRs,
whose branch commits get collapsed into a single commit on main authored
by the merger. Without this step, every contributor on a squash-merged
branch except the merger is silently dropped.Then for each unique contributor name, resolve to a GitHub username by looking up a PR they appeared on:
gh pr view <num> --json author --jq .author.login.gh pr view <num> --json commits --jq '.commits[].authors[] | select(.name == "<Display Name>") | .login'
(the per-commit authors array carries the GitHub login).gh api users/<candidate>; a 404 means
the guess is wrong. Never synthesize a username from a display name
("Amit Arora" -> "amitarora" was wrong; the actual login is aarora79).Create the file docs/release-notes/{version}.md following this exact structure
(note: bare semver, no v prefix, e.g. docs/release-notes/1.24.0.md):
# Release {version} - {Short Title Summarizing Major Features}
**{Month} {Year}**
---
## Upgrading from {base_version}
This section covers everything you need to know to upgrade from {base_version} to {version}.
### Breaking Changes
{List each breaking change with clear explanation and remediation steps.
If no breaking changes, write: "There are no breaking changes in this release."}
### New Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| {VAR_NAME} | {default} | {description} |
{If no new env vars, write: "No new environment variables in this release."}
### Upgrade Instructions
#### Docker Compose
```bash
cd mcp-gateway-registry
git pull origin main
git checkout {version}
# Review new env vars in .env.example and update your .env if needed
# Then rebuild and restart:
./build_and_run.shcd mcp-gateway-registry
git pull origin main
git checkout {version}
# {If helm dependency changes: "REQUIRED: Rebuild dependencies"}
cd charts/mcp-gateway-registry-stack
helm dependency build
helm dependency update
# Update values.yaml if needed, then upgrade:
helm upgrade mcp-gateway . -f your-values.yaml{CRITICAL: Include the helm dependency build and helm dependency update
commands whenever ANY file under charts/ changes between base and HEAD,
not just Chart.yaml dependency-list changes. The packaged subchart .tgz
files inside charts/mcp-gateway-registry-stack/charts/ are gitignored
and only get repackaged when consumers run helm dependency build/update.
If subchart templates/values/helpers changed, a plain git pull followed
by helm upgrade will use the OLD packaged subcharts, missing the changes.
Only omit helm dependency build/update if git diff {base_tag}..HEAD --stat -- charts/
shows ZERO files changed.}
cd mcp-gateway-registry
git pull origin main
git checkout {version}
# Update your .tfvars with any new variables
cd terraform/aws-ecs
terraform plan
terraform apply{Description of the feature -- what it does, why it matters, key capabilities as bullet points.}
{Repeat for each major feature.}
{Group changes by category using subsections. Use bullet points with PR/commit references.}
{Common categories: Deployment, Helm Chart Improvements, Security Fixes, Authentication, Infrastructure, Frontend Improvements, Documentation. Only include categories that have changes.}
| Issue | Title | Closed By |
|---|---|---|
| #{issue_number} | {issue_title} | {PR #{pr_number} or "manual"} |
{List all issues closed in the release window, sorted by issue number
descending. "Closed By" is the PR that closed the issue (via
closingIssuesReferences) or "manual" for issues closed without a PR
reference. If no issues were closed in this window, write:
"No issues were closed in this release window."}
| PR | Title |
|---|---|
| #{number} | {title} |
{List ALL merged PRs between base and HEAD, sorted by PR number descending.}
| Package | Previous | Updated | Scope |
|---|---|---|---|
| {package} | {old_version} | {new_version} | {scope} |
{Only include this section if there are dependency version bumps.}
Thank you to all contributors for this release:
{List all contributors from the UNION of (a) direct authors on main and
(b) per-PR commit authors via gh pr view --json commits (Step 4 #10).
Resolve every GitHub username from a real PR -- via .author.login if they
opened a PR, or via .commits[].authors[].login if they were a co-author
only. Never synthesize usernames from display names. Sort by commit count
descending.}
Full Changelog: {base_version}...{version}
### Step 6: Present Draft for User Review
After writing the release notes file:
1. Tell the user the file has been created at `docs/release-notes/{version}.md`
2. Present a brief summary:
- Number of major features
- Number of PRs included
- Number of bug fixes
- Number of closed issues
- Any breaking changes
- Contributor count
3. Ask the user to review the file and confirm it looks good, or request changes
### Step 7: Commit, Tag, and Push
Once the user confirms the release notes are ready:
1. **No navigation file needs editing.** There is no `mkdocs.yml` at the repo root; the only
one in the tree is under `.scratchpad/`, which is gitignored and unrelated. The published
site is built by `scripts/build_landing_page.py` (see `.github/workflows/docs.yml`), driven
by `README.md` and `landing/`, so a new `docs/release-notes/{version}.md` is picked up with
no nav change. Do NOT add `mkdocs.yml` to the release commit: it does not exist and `git add`
will fail.
2. **Add a highlight entry and rotate the README's "What's New" (regrowth prevention).** The
README's `## What's New` section holds **exactly the 5 most-recent highlights**; the full
history lives in `docs/overview/feature-release-highlights.md`. On a release with a notable
user-facing feature:
- **Prepend** one curated highlight entry (headline + 1-3 sentences + doc links) to the top of
`docs/overview/feature-release-highlights.md`, just under its intro, matching the existing
bullet format.
- **Rotate the README:** add that same highlight as the new first bullet under `## What's New`
in `README.md`, then **delete the now-sixth bullet** so exactly five remain (the dropped one
already lives in the archive, so this is a delete, not a re-copy). Keep the
"Older highlights → Feature & Release Highlights" line in place.
- This is the ONLY change the release cut makes to `README.md`. **Never add a new `##` section,
never let What's New exceed 5 bullets, and never touch any other part of the README**. Those
require their own dedicated PR. The README has a CI line-budget (350 lines) that will fail the
build otherwise. A patch release with no user-facing feature skips this step entirely.
3. **Open a PR; do not commit to `main`.** AGENTS.md requires branching first, and a direct
push to `main` bypasses the ~26 CI checks that gate everything else, including the README
line budget and the prose linter. Those are exactly the checks a release commit should face.
```bash
git checkout -b release/{version}
git add docs/release-notes/{version}.md docs/overview/feature-release-highlights.md README.md
git commit -m "docs: add {version} release notes"
git push -u origin release/{version}
gh pr create --base main --title "docs: add {version} release notes" --body-file <(...)Wait for CI to pass, then merge. This repo is rebase-and-merge only, so a branch carrying a merge commit cannot be merged; rebase and force-push instead.
Wait for the image-tag bump PR before you tag. Do not tag as soon as the notes PR merges.
Merging the notes PR causes helm-chart-update.yml to open a second PR,
chore: update image tags to {version}, on the branch release-update-{version}. It
rewrites every charts/*/values.yaml image tag and the Terraform image defaults in
terraform/aws-ecs/variables.tf and
terraform/aws-ecs/modules/mcp-gateway/variables.tf from the previous version to this
one. It always lands AFTER the notes PR.
Tag before it merges and the tag points at a commit whose charts and Terraform still
reference the PREVIOUS release's images. An operator who follows the upgrade
instructions and runs git checkout {version} then helm upgrade or terraform apply
installs the previous release. This happened on 1.32.1.
So: watch for that PR, merge it, pull main, and only then tag.
gh pr list --state open --json number,title,headRefName \
--jq '.[] | select(.headRefName == "release-update-{version}") | "#\(.number) \(.title)"'helm-release-retag.yml is meant to force-move the tag onto that commit if you tagged
early, so it reads like a safety net. Do not rely on it. Its branch-prefix gate had
drifted from the branch helm-chart-update.yml actually creates, so the job silently
skipped on every release through 1.32.1 (fixed in #1857). Earlier releases looked
correct only because whoever cut them happened to tag after the bump PR merged.
This also changes what you write in Step 5. The git diff {base_tag}..HEAD -- charts/
check runs before the bump PR exists, so it reports zero chart changes and tempts you to
write "you do not need to rebuild chart dependencies". That is wrong on any release where
the bump PR lands, because it rewrites five chart values files. Whenever that PR is part
of the release, the Helm upgrade instructions MUST include helm dependency build and
helm dependency update. Re-run the charts diff after the bump PR merges, and correct
the notes before tagging if you already wrote the "no chart changes" wording.
Tag only after both PRs are merged, so the tag points at a commit on main that
contains the release notes AND the updated image references:
# If tag already exists, delete it locally and remotely first
git tag -d {version} 2>/dev/null || true
git push origin :refs/tags/{version} 2>/dev/null || true
# Tag the merged commit on main (bare semver, no v prefix)
git checkout main && git pull origin main
git tag {version}
# Push tag
git push origin {version}Create a LIGHTWEIGHT tag, as above. Do not pass -m or -a: that makes an annotated
tag object, which every release tag in this repo is not. Pushing the tag triggers
release-images.yml, which builds and pushes the release images to ECR Public.
Verify:
git log --oneline -1
git tag -l {version} --format="%(refname:short) -> %(objectname:short)"
# The tag must carry THIS version's image references, not the previous one's
git show {version}:charts/registry/values.yaml | grep -m1 'tag:'
git show {version}:terraform/aws-ecs/variables.tf | grep -m1 'registry:'Tell the user the release notes are committed and the tag is created and pushed.
tests/e2e_release_test.py) was run and passed, or offer to run it. If it reports any FAILED test, STOP and do not cut the release. Only a user's explicit decision to skip may bypass this, and it must be warned about once.release-update-{version} PR merges. Merging the notes PR opens a
second PR that rewrites the chart and Terraform image references, and it lands afterward.
Tagging early produces a tag whose charts and Terraform deploy the PREVIOUS release, which
is what went wrong on 1.32.1. Do not treat helm-release-retag.yml as a safety net: it
skipped silently on every release through 1.32.1. Because that PR changes files under
charts/, the Helm upgrade instructions always need helm dependency build and
helm dependency update on a release where it lands, even though the Step 3 charts diff
reports nothing before it exists.docs/release-notes/ directory for the output file.charts/ tree diff, not just Chart.yaml. If ANY file under charts/ changed between base and HEAD, the upgrade instructions MUST include helm dependency build and helm dependency update for stack-chart consumers. The packaged .tgz subcharts inside charts/mcp-gateway-registry-stack/charts/ are gitignored and only repackage when those commands run -- a plain git pull + helm upgrade will silently use stale subcharts.Merge pull request commits and no (#NNNN) suffixes.
Both standard idioms return an EMPTY list rather than an error, which reads
like "no PRs in this release" and is how a whole release nearly went out
undercounted. Enumerate with gh pr list --state merged filtered on
mergedAt, and verify any individual PR with
git merge-base --is-ancestor <commit> <base_tag>.2026-09-24T00:34:45Z, release published
2026-09-23T22:34:13Z), so using the tag commit alone drops PRs that belong
in the new release.gh release list is the source of truth, not the v1.0.x tags in the local repo, which
are from the older scheme and look like the latest when sorted naively. A
request to "release 1.31.0" may be a request for the version after it.git log {base}..HEAD only sees the squashed commit's single author, so co-authors on the source branch get dropped. Always also iterate every merged PR with gh pr view <num> --json commits --jq '[.commits[].authors[].name] | unique' and union the results into the contributor list.gh pr view <num> --json author for openers, or .commits[].authors[].login for co-authors), and verify uncertain ones with gh api users/<candidate> (404 = wrong guess). Past mistakes: "Amit Arora" -> amitarora (wrong; actual: aarora79); "Nathan Fernandes Pedroza" -> nathanfernandes (wrong; actual: nathanzilgo).User: /release-notes v1.0.16© agentic-community, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/release-notes of agentic-community/mcp-gateway-registry.
Open the folder on GitHubat commit ec3a197
Release Notes next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release Notes this skillagentic-community/mcp-gateway-registry | 964 | — | ~6.9k | Automated safety check: Notes | Apache-2.0 | |
| Simple Englishmoeru-ai/airi | 50k | 2 repos | ~4.6k | Automated safety check: Pass | MIT | |
| StarRocks Release NotesStarRocks/starrocks | 12k | — | ~1.9k | Automated safety check: Notes | Apache-2.0 | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| React Router Release Notes Prepremix-run/react-router | 57k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Mole CLI Release Flowtw93/Mole | 70k | — | ~2.5k | Automated safety check: Pass | GPL-3.0 |
moeru-ai/airi
Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.
StarRocks/starrocks
Drafts English release notes for a StarRocks patch release from the PRs merged into its release branch, then opens a documentation PR and hands translation to /translate.
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
tw93/Mole
Runbook for assessing and executing a Mole CLI release: distribution channels, pre-flight checks, capital-V tags, build artifacts and the handoff to curated release notes.
PrefectHQ/fastmcp
Cut a FastMCP release end to end. An agent skill from PrefectHQ/fastmcp.
agentic-community/mcp-gateway-registry
Explain a GitHub issue or pull request at 100, 200, and 300 level.
agentic-community/mcp-gateway-registry
Debug issues in the MCP Gateway Registry using first-principles thinking.
agentic-community/mcp-gateway-registry
Keep Terraform and CDK infrastructure in sync. An agent skill from agentic-community/mcp-gateway-registry.
agentic-community/mcp-gateway-registry
Generate a search quality benchmark for the AI Registry. An agent skill from agentic-community/mcp-gateway-registry.
agentic-community/mcp-gateway-registry
Write prose people will actually read. An agent skill from agentic-community/mcp-gateway-registry.
agentic-community/mcp-gateway-registry
Given an MCP server URL, probe the server via curl to discover its metadata and tools, then generate a markdown file with copy-pasteable content for each field in the Amazon Bedrock AgentCore…
Categories
Create release notes for a new version tag. An agent skill from agentic-community/mcp-gateway-registry. Release Notes is an agent skill from agentic-community/mcp-gateway-registry. Create release notes for a new version tag.
Release Notes fits situations like: tasks that involve Changelog and release notes.
Run `npx skills add agentic-community/mcp-gateway-registry --skill release-notes -a claude-code`. Or copy the skill folder (.claude/skills/release-notes in agentic-community/mcp-gateway-registry) into .claude/skills/release-notes in your project. Claude Code loads it when a task matches its description.
Run `npx skills add agentic-community/mcp-gateway-registry --skill release-notes -a codex`. Or copy the skill folder (.claude/skills/release-notes in agentic-community/mcp-gateway-registry) into .agents/skills/release-notes in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add agentic-community/mcp-gateway-registry --skill release-notes -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release-notes, .gemini/skills/release-notes, .github/skills/release-notes and .opencode/skills/release-notes in your project.
Going by SKILL.md and its folder, Release Notes needs the command-line tools its instructions call (git, gh, helm, terraform and uv). Our summary lists: Python 3; Docker.
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Release Notes is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.9k tokens (SKILL.md is roughly 28k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Release Notes: Simple English (moeru-ai/airi, 50k stars), StarRocks Release Notes (StarRocks/starrocks, 12k stars), Cutting A Release (TriliumNext/Trilium, 38k stars) and React Router Release Notes Prep (remix-run/react-router, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
agentic-community (a GitHub organization) maintains it in agentic-community/mcp-gateway-registry, which has 964 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 6, 2026.
Source: agentic-community/mcp-gateway-registry on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.