Agent skill

Release

by PrefectHQ in PrefectHQ/fastmcp

Cut a FastMCP release end to end. An agent skill from PrefectHQ/fastmcp.

Apache-2.0Auto-check passedDevelopment

Install Release

skills CLI
$ npx skills add PrefectHQ/fastmcp --skill release -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install PrefectHQ/fastmcp release --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/PrefectHQ/fastmcp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/release .claude/skills/release && rm -rf skills-src

Use ~/.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/

Facts

Skill name
release
GitHub stars
28k
Token cost
~2.9k tokens
SKILL.md length
1,360 words
Files
2 (incl. scripts)
Skills in repo
9
Repo updated
First seen
Licence
Apache-2.0

At a glance

Cut a FastMCP release end to end. An agent skill from PrefectHQ/fastmcp.

  • Works in 7 steps: Preview what's in it. → Propose titles. Titles are v: , pun on… → Write the notes file outside the… → …
  • The maintainer says cut a release
  • SKILL.md covers Procedure, Publishing docs by hand, Template: notes file for a patch and Gotchas, plus 1 more section
  • Runs Python scripts from its folder; calls gh, git and curl; reaches gofastmcp.com and pypi.org

What it does

Release is an agent skill from PrefectHQ/fastmcp. Cut a FastMCP release end to end. Use when the maintainer says "cut a release", "prep a patch", "ship 4.x.y", or asks what a release would contain. Covers the notes preview, the title pun, the docs changelog PR that must land before the tag, the tag itself, the publish fan-out, and verifying gofastmcp.com actually deployed.

Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/changelog_entry.py`).

It sits in Development, covering MCP servers and Changelog and release notes. It works with Model Context Protocol. The repository describes itself as: 🚀 The fast, Pythonic way to build MCP servers and clients. The licence is Apache-2.0.

When your agent uses it

  • The maintainer says cut a release
  • Asks what a release would contain

Example prompts

  • “cut a release”
  • “prep a patch”
  • “ship 4.x.y”
  • “/release”

Requirements

  • Python 3
  • Node.js

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  1. Preview what's in it.
  2. Propose titles. Titles are v: , pun on the release's main
  3. Write the notes file outside the repository (a temp directory), intro only.
  4. Docs entries. Branch docs/changelog- from origin/ and insert
  5. Tag, immediately after the docs PR merges. Re-run the step 1 preview first;
  6. Watch the fan-out. The slim run is keyed to the tag; the others are
  7. Publish docs (main releases only; maintenance releases skip this step and

What it can do on your machine

Read from SKILL.md and the folder at commit 5baeacf. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • gh
    • git
    • curl
    • uv
    • npx
    • jq

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • gofastmcp.com
    • pypi.org

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Release loads about 2.9k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 1,360 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~83
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k

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.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated 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); the scripts in this folder are not scanned.

SKILL.md

The full file from PrefectHQ/fastmcp at commit 5baeacf, republished under its Apache-2.0 licence (© PrefectHQ). 1,360 words, ~2,934 tokens.

Download SKILL.mdSave it as .claude/skills/release/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
release
description
Cut a FastMCP release end to end. Use when the maintainer says "cut a release", "prep a patch", "ship 4.x.y", or asks what a release would contain. Covers the notes preview, the title pun, the docs changelog PR that must land before the tag, the tag itself, the publish fan-out, and verifying gofastmcp.com actually deployed.

Cutting a release

A release is a tag on the branch that owns the line: <branch> below is main for the current major and release/3.x for 3.x maintenance. Every step runs against that branch, including the docs PR, so a maintenance entry lands in the maintenance branch's own changelog above its newest 3.x entry. The tag triggers Publish fastmcp-slim to PyPI; its success fans out to fastmcp-tasks, fastmcp-remote, and fastmcp, and the fastmcp publish job opens the published-docs PR that makes gofastmcp.com reflect the release. Two hand-maintained docs files mirror every release and must be on the tagged commit, so the docs PR always lands first. PyPI releases are immutable; a bad one gets a follow-up patch, never a re-tag.

Procedure

  1. Preview what's in it.

    bash
    git fetch origin && git log v<prev>..origin/<branch> --format='%h %s'
    gh api -X POST repos/PrefectHQ/fastmcp/releases/generate-notes \
      -f tag_name=v<new> -f target_commitish=<branch> -f previous_tag_name=v<prev> --jq .body \
      > /tmp/generated-notes.md
    uv run scripts/release_contributor_credit.py /tmp/generated-notes.md \
      > /tmp/contributor-credit.json

    Read the two most recent releases for voice: gh release list -L 5, then gh release view <tag> on each.

    Review the scan's attribution candidates. The helper batch-fetches metadata only for PRs in the generated notes. It suggests shared credit for human authors of the PR commits and final merged commit, plus issue reporters whose issues are closed by a maintainer PR, even when their co-author trailer is missing. Human co-authors are included even when the PR has no linked issue. It excludes known agent identities and bots; a GitHub User identity alone does not prove someone is human. Maintainer permission checks are reused across PRs.

    Supplemental attribution is for community contributors. Keep the PR author's credit and any credit already present, but do not add other maintainers or investigate their first-time status. Routine maintainer backports need no fresh attribution audit and no request for guidance. Preserve existing community credit.

    Apply the suggested entries to /tmp/generated-notes.md, for example Fix issue #123 by @jlowin and @reporter in <PR URL>. Check the flagged exceptions: unknown commit identities, missing reporter co-authorship, and issue closures that do not represent a contribution (such as administrative duplicate closure). Inspect individual PRs or issues only to resolve these discrepancies, rather than re-reading every PR. The helper is read-only; it does not change notes or decide who is a new contributor. Check prior contribution history only for people listed in first_time_review: added contributors and GitHub's first-time candidates. Earlier co-authorship and credited issue implementations count too. Add verified first-time contributors to New Contributors with the resolving PR link, and keep returning contributors in the shared change entries.

    Update both contributor counts after attribution is complete. Count distinct human GitHub accounts across the release entries for the total contributor count, and distinct accounts in the final New Contributors list for the first-time count. Count each person once across multiple PRs or roles, and exclude agents and bots. The helper's total_contributors is the proposed total; its generated_first_time_count is only the original baseline, not the final count. Resolve unknown identities and opt-outs before finalizing totals. Include the final counts in the release introduction (for example, Thanks to our 12 contributors, including 3 first-time contributors.), and update any other contributor totals in the notes to agree. These counts and shared attribution must appear in both the GitHub release and the docs changelog. Follow Contributor credit, honor opt-outs, and deduplicate entries. Save the completed generated notes to /tmp/generated-notes.md.

  2. Propose titles. Titles are v<version>: <pun>, pun on the release's main theme from the release preview. Check prior titles with gh release list --repo PrefectHQ/fastmcp --limit 60 to avoid repeats and keep the options on brand: two to four words, a familiar phrase bent toward the theme ("Cache Me If You Can", "Trust, but Proxy", "Come Back Any Time"), and a running family for a major's prereleases ("Fourst Contact", "Group Effourt"). Offer several; the maintainer picks. Draft the handwritten notes at the same time: one or two sentences for a patch, narrative prose for a point release. Get sign-off on both before anything is pushed.

  3. Write the notes file outside the repository (a temp directory), intro only. The release title is the heading, so the file has none.

    Also write /tmp/release-notes.md containing that intro followed by the completed /tmp/generated-notes.md. This is the exact body to publish; use the same completed generated notes for the docs entry. Do not regenerate plain GitHub notes at publication and discard the added contributor credit.

  4. Docs entries. Branch docs/changelog-<new> from origin/<branch> and insert both blocks (the last argument is the branch the notes are generated against):

    bash
    uv run .agents/skills/release/scripts/changelog_entry.py v<new> v<prev> "<pun>" /tmp/notes.md <branch> --release-notes /tmp/generated-notes.md

    Validate, and repeat until it reports no errors; a parse error names the file and line:col:

    bash
    cd docs && npx --yes mint@latest broken-links

    (@latest on purpose: the hosted Mintlify build is always current.) Commit, push, open the PR titled docs: add v<new> changelog entries with base <branch> and a one-line body, and merge it. Branch policy needs --admin on a maintainer-driven release. The docs PR itself appears in the GitHub notes but not in the mirror; that is expected.

  5. Tag, immediately after the docs PR merges. Re-run the step 1 preview first; if <branch> moved, delete the entry blocks from both docs files, re-run the helper (it refuses to insert a label that already exists), and land that as a follow-up docs PR before tagging.

    Refresh contributor attribution and both temporary notes files along with the preview when new changes enter the release. The docs-only changelog PR can appear in the GitHub notes without appearing in its own mirror, as described above.

    bash
    gh release create v<new> --target <branch> --title "v<new>: <pun>" \
      --notes-file /tmp/release-notes.md

    v<prev> is the last stable tag on that branch, passed as previous_tag_name in the notes preview. The compare link at the bottom of the created release must read v<prev>...v<new>. Verify the published contributor entries and New Contributors list against the completed notes.

  6. Watch the fan-out. The slim run is keyed to the tag; the others are workflow_run events on the default branch, so select them by workflow name. The slim run appears within a minute of the tag; the fastmcp run is queued the moment slim succeeds, so watch slim to completion first and the newest fastmcp run is the right one.

    bash
    gh run watch $(gh run list --event release --branch v<new> --limit 1 --json databaseId --jq '.[0].databaseId') --exit-status
    gh run watch $(gh run list --workflow "Publish fastmcp to PyPI" --limit 1 --json databaseId --jq '.[0].databaseId') --exit-status

    Confirm each package with curl -fsS https://pypi.org/pypi/<pkg>/<new>/json | jq .info.version; the unversioned endpoint lags a few minutes.

  7. Publish docs (main releases only; maintenance releases skip this step and leave gofastmcp.com on the current major). When the fastmcp run finishes, its last job has opened Publish FastMCP v<new> docs against published-docs:

    bash
    gh pr list --base published-docs --state open --json number,title
    gh pr merge <n> --merge --admin

    Merging pushes published-docs, which runs the Deploy docs workflow: it asks Mintlify's admin API for a deployment of the tip and waits for the verdict. That run is the signal that the site changed; the merge alone proves nothing.

    bash
    gh run watch $(gh run list --workflow "Deploy docs" --branch published-docs --limit 1 --json databaseId --jq '.[0].databaseId') --exit-status

    A red run prints Mintlify's summary and logs; fix the cause on main and publish again. If Mintlify's queue is backed up (status.mintlify.com), the run waits up to 40 minutes; re-run it with gh workflow run deploy-docs.yml --ref published-docs once their incident clears.

    Verify through the markdown endpoints, which bypass the HTML edge cache: curl -fsS https://gofastmcp.com/changelog.md | grep -c "<pun>", and the same for updates.md and any page the release touched.

Show full SKILL.md (217 more words)Show less

Publishing docs by hand

Used when a deploy failed and was fixed on main, or for a docs change outside a release. The publication commit must match main's tree exactly.

bash
git fetch origin main published-docs
git checkout -b publish-docs-<topic> origin/published-docs
git read-tree -m -u origin/main && git commit -m "docs: publish main @ $(git rev-parse --short origin/main)"
git diff --quiet HEAD origin/main && echo "tree matches main"
git push -u origin publish-docs-<topic>
gh pr create --base published-docs --title "docs: publish main to published-docs (<what>)" --body "<one line>"
gh pr merge <n> --merge --admin

Then watch the Deploy docs run and verify the endpoints as in step 7.

Template: notes file for a patch

`ClientGroup` now reference-counts its context the way `Client` does, so entering a
connected group from a nested block or a concurrent task reuses the existing
connections instead of raising.

Gotchas

  • --generate-notes copies PR titles verbatim; a title containing <1, {, or } breaks MDX, and __name__ renders as bold. scripts/changelog_entry.py wraps those in backticks; the validator in step 4 catches anything else.
  • Mintlify's GitHub App also deploys on its own, but it only rebuilds files changed since the last commit it recorded, and it records commits it failed on or skipped. Only the Deploy docs run's verdict counts; its API-triggered deployment is what brings a page a skipped deploy left stale back in line.
  • Always pass the last stable tag as previous_tag_name when generating notes; otherwise a prerelease tag can truncate the PR list. Publish the completed notes with --notes-file, rather than replacing them with --generate-notes.
  • Maintenance releases publish packages and notes but never repoint published-docs; their changelog entries go on the maintenance branch under the matching major section.

Check before finishing

Each of these prints a count above zero: curl -fsS https://pypi.org/pypi/fastmcp/<new>/json | grep -c '"version"', curl -fsS https://gofastmcp.com/changelog.md | grep -c "<pun>", curl -fsS https://gofastmcp.com/updates.md | grep -c "<pun>".

© PrefectHQ, 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

Files

SKILL.md and 1 other file (scripts) in .agents/skills/release of PrefectHQ/fastmcp.

  • SKILL.md
  • scripts/changelog_entry.py

Open the folder on GitHubat commit 5baeacf

Compare with similar skills

Release 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.

Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Release this skillPrefectHQ/fastmcp28k—~2.9kAutomated safety check: PassApache-2.0
Reading Livekit Docslivekit-examples/agent-starter-python2641 repos~1.1kAutomated safety check: PassMIT
MCP Server Trello Releasedelorenj/mcp-server-trello446—~3.5kAutomated safety check: PassMIT
Githits Releasegithits-com/githits-cli114—~2.8kAutomated safety check: PassApache-2.0
Suede Launch PackagingJasonColapietro/suede-creator-skills127—~2.4kAutomated safety check: PassMIT
Release Prepjohnhuang316/code-index-mcp1k—~680Automated safety check: PassMIT

Similar skills

  • Reading Livekit Docs

    livekit-examples/agent-starter-python

    Looks up current LiveKit facts (API signatures, CLI flags, config options, model and provider support, SDK changelogs, pricing) from the docs instead of answering from memory.

    264 GitHub starsUsed in 1 repo~1.1k tokens
    DevelopmentAuto-check passed
  • MCP Server Trello Release

    delorenj/mcp-server-trello

    Canonical build → release → tag → publish procedure for the @delorenj/mcp-server-trello repo.

    446 GitHub stars~3.5k tokensUpdated 13 days ago
    DevelopmentAuto-check passed
  • Githits Release

    githits-com/githits-cli

    A skill your agent uses when maintaining the GitHits changelog or preparing, reviewing, or executing a GitHits release.

    114 GitHub stars~2.8k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Suede Launch Packaging

    JasonColapietro/suede-creator-skills

    Suede-owned launch packaging and install verification. An agent skill from JasonColapietro/suede-creator-skills.

    127 GitHub stars~2.4k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Release Prep

    johnhuang316/code-index-mcp

    A skill your agent uses when code-index-mcp implementation is complete and a version bump, release notes, tag, package publication, or GitHub release is being prepared.

    1k GitHub stars~680 tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • MCP Apps Sync Docs

    apollographql/apollo-mcp-server

    Syncs MCP Apps documentation with the @apollo/client-ai-apps changelog.

    311 GitHub stars~1.2k tokensUpdated today
    DevelopmentAuto-check passed

More from PrefectHQ/fastmcp

All 9 skills in this repo
  • Fastmcp Client CLI

    PrefectHQ/fastmcp

    Query and invoke tools on MCP servers using fastmcp list and fastmcp call.

    28k GitHub starsUsed in 1 repo~823 tokens
    Auto-check passed
  • Docs

    PrefectHQ/fastmcp

    Write or revise a page under docs/ for gofastmcp.com. An agent skill from PrefectHQ/fastmcp.

    28k GitHub stars~1k tokensUpdated today
    Auto-check passed
  • Review Issue

    PrefectHQ/fastmcp

    Review an incoming external issue (and any gated-closed PR behind it) and decide whether to assign the contributor or decline.

    28k GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Review PR

    PrefectHQ/fastmcp

    Assess a FastMCP pull request for justified behavior, compatibility, and correctness, then follow CI and review feedback to a revision-specific verdict.

    28k GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • Review Security Report

    PrefectHQ/fastmcp

    Review FastMCP vulnerability reports before accepting, rejecting, patching, scoring, or publishing them.

    28k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Triage

    PrefectHQ/fastmcp

    Find worthwhile FastMCP issues to work on in a backlog or release window, verify promising candidates, and present concrete picks with existing PR links.

    28k GitHub stars~573 tokensUpdated today
    Auto-check passed

Questions about Release

What does Release do?

Cut a FastMCP release end to end. An agent skill from PrefectHQ/fastmcp. Release is an agent skill from PrefectHQ/fastmcp. Cut a FastMCP release end to end.

When should I use Release?

Release fits situations like: the maintainer says cut a release; asks what a release would contain.

How do I install Release in Claude Code?

Run `npx skills add PrefectHQ/fastmcp --skill release -a claude-code`. Or copy the skill folder (.agents/skills/release in PrefectHQ/fastmcp) into .claude/skills/release in your project. Claude Code loads it when a task matches its description.

How do I install Release in Codex?

Run `npx skills add PrefectHQ/fastmcp --skill release -a codex`. Or copy the skill folder (.agents/skills/release in PrefectHQ/fastmcp) into .agents/skills/release in your project. Codex loads it when a task matches its description.

Can I use Release in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add PrefectHQ/fastmcp --skill release -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, .gemini/skills/release, .github/skills/release and .opencode/skills/release in your project.

What does Release need to run?

Going by SKILL.md and its folder, Release needs Python for the scripts in its folder and the command-line tools its instructions call (gh, git, curl, uv, npx and jq). Our summary lists: Python 3; Node.js.

Does Release access the network?

SKILL.md names 2 domains. In commands or code: gofastmcp.com and pypi.org; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Release safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Release use?

Release is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Release use?

About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Release?

Skills that share tags, products or a category with Release: Reading Livekit Docs (livekit-examples/agent-starter-python, 264 stars), MCP Server Trello Release (delorenj/mcp-server-trello, 446 stars), Githits Release (githits-com/githits-cli, 114 stars) and Suede Launch Packaging (JasonColapietro/suede-creator-skills, 127 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Release?

PrefectHQ (a GitHub organization) maintains it in PrefectHQ/fastmcp, which has 27,989 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 6, 2026.

Source: PrefectHQ/fastmcp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.