Files
holocron/plugins/gitea/.apm/skills/gitea-releases/SKILL.md
Defame1297 2bde9a6a82 chore(skills): bump metadata.version for the Research doc migration
Raise the PATCH version of each skill whose references/sources.md,
references, or validator changed in the Research registry migration, as
ADR-0022 requires. factory-audit and skill-author changed behaviour and
docs; the rest changed provenance metadata only.

Refs: #121
ADR: 0022
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EGHFJextYtVQseaHPDDhxB
2026-09-21 17:33:54 +00:00

4.8 KiB

name, description, compatibility, metadata, allowed-tools
name description compatibility metadata allowed-tools
gitea-releases Use when managing Gitea releases or the git tags underneath them — list, get, create, or delete either — even when the user does not say "release" or "Gitea": "cut a v1.2.0", "publish a prerelease", "tag this commit", "what's the latest release". Not branches or commit history -> `gitea-branches`. Not issues -> `gitea-issues`. Not pull requests -> `gitea-prs`. Requires Gitea MCP server configured with a token with write:repository scope, which gates every release and tag tool here. Requires git remote "origin" pointing to the Gitea instance for owner/repo resolution, unless an orchestrating caller passes them already resolved.
category version source_keys
integration 0.1.3
gitea-mcp-repo
gitea-mcp-slim-go
context7-websites-gitea
context7-gitea-tea-cli
Bash mcp__gitea__list_releases mcp__gitea__get_release mcp__gitea__get_latest_release mcp__gitea__create_release mcp__gitea__delete_release mcp__gitea__list_tags mcp__gitea__get_tag mcp__gitea__create_tag mcp__gitea__delete_tag

Gotchas

  • delete_release takes the numeric id, never a tag_name; delete_tag takes the tag name, never an id. Holding only a tag name, resolve the release id through list_releases or get_release first — a tag name passed to delete_release fails, and that failure is not evidence the release is already gone.
  • Deleting a release never deletes its tag, and the reverse direction is unconfirmed — verify with list_releases/get_release after delete_tag. Removing both takes two independent destructive calls.
  • Set is_draft/is_pre_release explicitly on every create_release — Gitea infers neither from a -beta/-rc tag name, so v2.0.0-beta.1 publishes as a full release and becomes the repo's latest. draft/prerelease are output field names only; passing draft as an input key is silently ignored.
  • list_releases/list_tags default per_page to 20, where most other gitea-mcp list tools default to 30 — a caller assuming 30 under-counts pages.

Step 1 — Resolve owner and repo

owner and repo are required on every tool below. Extract from the git remote, unless an orchestrating caller already passed them in:

rtk git remote get-url origin

No origin, or not a Gitea URL: stop and report "No Gitea remote found — set origin to your Gitea instance URL."

Step 2 — Dispatch

Action Tool Required params Optional params
List releases list_releases owner, repo is_draft, is_pre_release, page (default 1), per_page (default 20)
Get one release get_release owner, repo, id (number) —
Get latest release get_latest_release owner, repo —
Create release create_release owner, repo, tag_name, target, title body, is_draft, is_pre_release
Delete release delete_release owner, repo, id (number) —
List tags list_tags owner, repo page (default 1), per_page (default 20)
Get one tag get_tag owner, repo, tag_name —
Create tag create_tag owner, repo, tag_name target, message
Delete tag delete_tag owner, repo, tag_name —

target (on create_release/create_tag) is a commitish — a branch name, existing tag, or commit SHA — the point the new tag is cut from.

Pass a caller-supplied tag_name through verbatim — the API accepts any string; semver is convention, not constraint.

Step 3 — Procedure for the scenario in hand

These four are mutually exclusive — pick the one row the request lands on.

Scenario Procedure
Create a release Call create_release with tag_name, target, title, and is_draft/is_pre_release set explicitly — never left to default. This surface carries no update or edit tool, so a wrong flag is repairable only by delete-and-recreate (references/conventions.md). A separate create_tag is only needed to tag a commit without wrapping it in a release — whether create_release creates a missing tag is unconfirmed, so verify with get_tag.
Delete a release Resolve the numeric id per the first Gotcha, confirm intent, then call delete_release. The tag survives.
Delete a tag along with its release Delete the release first, then call delete_tag — confirm both are intended before proceeding, since each is irreversible on its own.
List every page Loop page: 1, 2, 3... until a response returns fewer than per_page entries — nothing auto-paginates.

If exact input params or response field shapes are needed, read references/call-signatures.md. If the caller raises semver tag naming, draft/prerelease semantics, release-notes sourcing, or how a release relates to its tag, read references/conventions.md.