release-notes
$
npx mdskill add agentic-community/mcp-gateway-registry/release-notesGenerate release notes, tag, and push for new versions.
- Automates gathering commits, PRs, and issues since the last release.
- Integrates with git to verify tags and create version tags.
- Decides the base version by parsing input and checking existing tags.
- Delivers structured markdown files in the release-notes directory.
SKILL.md
.github/skills/release-notesView on GitHub ↗
---
name: release-notes
description: "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."
license: Apache-2.0
metadata:
author: mcp-gateway-registry
version: "1.0"
---
# Release Notes Skill
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.
## Input
The skill takes a version tag as input:
- Format: `v{major}.{minor}.{patch}` (e.g., `v1.0.16`)
- The user may also provide the version without the `v` prefix (e.g., `1.0.16`) -- always normalize to `v`-prefixed format
## Output
Creates a release notes file in `release-notes/` and tags the repo:
- `release-notes/v{version}.md` - Release notes markdown file
- Git tag `v{version}` pointing to the commit that includes the release notes
## Workflow
### Step 1: Determine the New Version Tag
1. Parse the version from user input. If not provided, ask the user what version to release.
2. Normalize to `v`-prefixed format (e.g., `1.0.16` becomes `v1.0.16`).
3. Verify the tag does not already exist: `git tag -l v{version}`.
4. If it exists, ask the user if they want to move it or choose a different version.
### Step 2: Determine the Base Version (Ask User to Confirm)
The release notes are incremental from a previous version. Determine the base version:
1. List existing release notes files:
```bash
ls release-notes/v*.md
```
2. List existing git tags (version tags only):
```bash
git tag --sort=-v:refname | grep '^v[0-9]'
```
3. Find the most recent release notes file and the most recent git tag. Present these to the user:
```
Found release notes: v1.0.15, v1.0.14, v1.0.13, ...
Found git tags: v1.0.15, v1.0.13, v1.0.12, ...
This release (v1.0.16) appears to be incremental from v1.0.15.
Confirm base version, or specify a different one if you want to skip versions.
```
4. **Ask the user to confirm the base version** using AskUserQuestion. Present the most recent tag as the recommended option and the 2-3 previous tags as alternatives. The user may want to skip intermediate tags (e.g., diff from v1.0.13 to v1.0.16, skipping v1.0.14 and v1.0.15).
### Step 3: Gather All Changes Between Base and HEAD
Run these commands in parallel to gather change data:
```bash
# 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
# Merge commits (to extract PR numbers)
git log {base_tag}..HEAD --oneline --grep="Merge pull request"
# Contributors
git log {base_tag}..HEAD --format="%aN" | sort | uniq -c | sort -rn
# Env var changes
git diff {base_tag}..HEAD -- .env.example
# Helm chart changes
git diff {base_tag}..HEAD -- charts/ --stat
# Helm chart dependency changes (breaking change indicator)
git diff {base_tag}..HEAD -- charts/registry/Chart.yaml charts/auth-server/Chart.yaml charts/mcp-gateway-registry-stack/Chart.yaml
# Recently closed issues
gh issue list --state closed --limit 50 --json number,title,closedAt --jq '.[] | "\(.number) | \(.title) | \(.closedAt)"'
```
### Step 4: Categorize Changes
Analyze all commits and PRs to categorize them:
1. **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`.
2. **Breaking Changes**: Changes that require user action during upgrade. Check for:
- Helm chart dependency additions/removals (Chart.yaml changes)
- Renamed or removed environment variables (.env.example diff)
- Auth mechanism changes
- API endpoint changes (removed or renamed routes)
- Database schema changes
3. **New Environment Variables**: Extract from `.env.example` diff -- any new variables added.
4. **Bug Fixes**: Commits with `fix:` prefix or PRs labeled `bug`.
5. **Security Fixes**: Commits mentioning security, CVE, injection, bypass, XSS, etc.
6. **Infrastructure/Helm Changes**: Changes to charts/, terraform/, docker/.
7. **Dependency Updates**: Dependabot PRs and manual dependency bumps.
8. **Documentation**: Commits with `docs:` prefix.
9. **Contributors**: Unique contributor list from git log.
### Step 5: Write Release Notes
Create the file `release-notes/v{version}.md` following this exact structure:
```markdown
# Release v{version} - {Short Title Summarizing Major Features}
**{Month} {Year}**
---
## Upgrading from v{base_version}
This section covers everything you need to know to upgrade from v{base_version} to v{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 v{version}
# Review new env vars in .env.example and update your .env if needed
# Then rebuild and restart:
./build_and_run.sh
```
#### Kubernetes / Helm (EKS)
```bash
cd mcp-gateway-registry
git pull origin main
git checkout v{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
```
{Note: If there are NO Helm chart dependency changes (no Chart.yaml dependency
additions/removals), omit the helm dependency build/update commands and just
show the helm upgrade command.}
#### Terraform / ECS
```bash
cd mcp-gateway-registry
git pull origin main
git checkout v{version}
# Update your .tfvars with any new variables
cd terraform/aws-ecs
terraform plan
terraform apply
```
#### DockerHub Images
Pre-built images are available:
```bash
docker pull mcpgateway/registry:v{version}
docker pull mcpgateway/auth-server:v{version}
docker pull mcpgateway/currenttime-server:v{version}
docker pull mcpgateway/realserverfaketools-server:v{version}
docker pull mcpgateway/mcpgw-server:v{version}
docker pull mcpgateway/fininfo-server:v{version}
docker pull mcpgateway/metrics-service:v{version}
```
---
## Major Features
### {Feature Name}
{Description of the feature -- what it does, why it matters, key capabilities as bullet points.}
[PR #{number}](https://github.com/agentic-community/mcp-gateway-registry/pull/{number})
{Repeat for each major feature.}
---
## What's New
{Group changes by category using subsections. Use bullet points with PR/commit references.}
### {Category Name}
- {Change description} (#{pr_number})
- {Change description} (#{pr_number})
{Common categories: Deployment, Helm Chart Improvements, Security Fixes,
Authentication, Infrastructure, Frontend Improvements, Documentation.
Only include categories that have changes.}
---
## Bug Fixes
- {Bug fix description} (#{pr_number})
- {Bug fix description} (#{pr_number})
---
## Pull Requests Included
| PR | Title |
|----|-------|
| #{number} | {title} |
{List ALL merged PRs between base and HEAD, sorted by PR number descending.}
---
## Security Dependency Updates
| Package | Previous | Updated | Scope |
|---------|----------|---------|-------|
| {package} | {old_version} | {new_version} | {scope} |
{Only include this section if there are dependency version bumps.}
---
## Contributors
Thank you to all contributors for this release:
- **{Full Name}** ([@{github_username}](https://github.com/{github_username}))
{List all contributors from git log, sorted by commit count descending.
Map known email addresses to GitHub usernames where possible.}
---
## Support
- [GitHub Issues](https://github.com/agentic-community/mcp-gateway-registry/issues)
- [GitHub Discussions](https://github.com/agentic-community/mcp-gateway-registry/discussions)
- [Documentation](https://github.com/agentic-community/mcp-gateway-registry/tree/main/docs)
---
**Full Changelog:** [v{base_version}...v{version}](https://github.com/agentic-community/mcp-gateway-registry/compare/v{base_version}...v{version})
```
### Step 6: Present Draft for User Review
After writing the release notes file:
1. Tell the user the file has been created at `release-notes/v{version}.md`
2. Present a brief summary:
- Number of major features
- Number of PRs included
- Number of bug fixes
- 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. **Commit the release notes:**
```bash
git add release-notes/v{version}.md
git commit -m "docs: Add v{version} release notes"
```
2. **Push the commit:**
```bash
git push origin main
```
3. **Create or move the git tag** to point at this latest commit (which includes the release notes):
```bash
# If tag already exists, delete it locally and remotely first
git tag -d v{version} 2>/dev/null || true
git push origin :refs/tags/v{version} 2>/dev/null || true
# Create tag on current HEAD
git tag v{version}
# Push tag
git push origin v{version}
```
4. **Verify:**
```bash
git log --oneline -1
git tag -l v{version} --format="%(refname:short) -> %(objectname:short)"
```
5. Tell the user the tag is created and pushed, and provide the DockerHub push command:
```
To publish images to DockerHub with this tag:
make publish-dockerhub-version VERSION=v{version}
```
## Important Rules
- **Never skip the user confirmation** for base version in Step 2. The user may want to create release notes that span multiple versions.
- **Never include emojis** in the release notes file. The project CLAUDE.md prohibits emojis in documentation.
- **Never include Claude Code attribution** or "Co-Authored-By" lines in commits.
- **Always use the `release-notes/` directory** at the project root for the output file.
- **Always include upgrade instructions** for all three deployment methods (Docker Compose, Helm/EKS, Terraform/ECS).
- **Always list breaking changes first** in the upgrade section -- this is the most critical information for operators.
- **Always verify Helm Chart.yaml diffs** to detect dependency additions/removals -- these are the most common breaking changes for EKS users.
- **DockerHub image list** should match the components defined in `scripts/publish_containers.sh` in the `COMPONENTS` array. Read this file to get the current list rather than hardcoding.
## Example Usage
```
User: /release-notes v1.0.16More from agentic-community/mcp-gateway-registry
- agentcore-registerGiven 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 "Create record" form.
- create-milestoneCreate a GitHub milestone for an upcoming release. Suggests the next version based on the latest release, gathers all merged PRs and closed issues since that release, presents a draft with two tables (Issues and PRs) for user approval, then creates the milestone and assigns all approved items.
- generate-agent-cardGenerate an A2A agent card JSON by analyzing agent source code in a folder or GitHub URL. Studies the code to detect agent name, skills, tools, auth, protocol, and generates a spec-compliant agent card.
- generate-server-cardGenerate an MCP server card JSON (mcp-gateway-registry format) by analyzing server source code in a folder or GitHub URL. Studies code to detect server name, tools, transport, auth, and generates a registry-compatible config.
- macos-setupComplete macOS setup and teardown for MCP Gateway & Registry (AI-registry). Clones the repository, installs all services, configures Keycloak auth, registers the Cloudflare docs server, and verifies the full stack. Also supports complete teardown. Can be run directly from its GitHub URL without the repository already cloned. Uses an interactive or default-values mode chosen at startup.
- new-feature-designDesign and document new features with GitHub issue, low-level design (LLD), expert review, and testing plan. Creates structured documentation in .scratchpad/ with issue spec, technical design with diagrams and pseudo-code, multi-persona expert review, and a testing plan covering functional (curl and registry_management.py), backwards-compatibility, UX, ECS/terraform, and E2E API tests. Supports starting from a user description OR an existing GitHub issue URL. Folder naming: issue-{number}/ for existing issues, {feature-name}/ for new features.
- usage-reportGenerate a usage report for MCP Gateway Registry by SSHing into the telemetry bastion host, exporting telemetry data from DocumentDB, and producing a formatted markdown report with deployment insights.