The retrofit left only a descriptive sentence on the loaded path — "Gitea never infers a prerelease from a -beta/-rc tag name" — and moved the imperative into references/conventions.md behind a trigger listing semver naming, release-notes sourcing and release-to-tag relationships. Draft and prerelease are not in that list, and "cut a v2.0.0-beta.1" is exactly the request where the caller does not raise the topic, so the rule was unreachable from the flow that needs it. Severity comes from the repair path: the MCP surface has create, get, get_latest, list and delete only — there is no update or edit tool. A release published without is_pre_release can only be corrected by delete_release plus a fresh create, and get_latest_release points consumers at the beta meanwhile. Neither SKILL.md nor call-signatures.md said so anywhere. The flags are now set explicitly on every create, the missing update tool and its delete-and-recreate consequence are stated in the body, and the semver pass-through rule stranded behind the same trigger is promoted alongside it. call-signatures.md now cites the deployed tool description as direct evidence that get_latest_release excludes drafts, while keeping the prerelease half hedged — that remains unconfirmed. Verified live against gitea-mcp v1.7.0, read-only calls. Refs #99
4.1 KiB
topic, source_keys
| topic | source_keys | ||
|---|---|---|---|
| call-signatures |
|
Release and tag call signatures
Signatures and response shapes are derived from gitea-mcp source (operation/*.go and slim.go,
see references/sources.md) rather than copied from upstream API docs, which can drift from the
deployed gitea-mcp version — but this is a source-code extraction, not a live MCP tool call.
Input parameter schemas for 3 of the 9 tools here — create_release, delete_tag, and
get_latest_release — were additionally cross-checked live via ToolSearch against the deployed
mcp__gitea__* tools in session 2026-07-05, and confirmed to match exactly (required/optional
params and names). That check covered only input params for those 3 tools, not response shapes,
and not the other 6 tools — treat the rest of this document as source-derived, not live-verified.
owner and repo are required strings on every tool below and are omitted from the per-tool lists
for brevity.
Releases
list_releases
- Optional:
is_draft(boolean),is_pre_release(boolean),page(number, default 1),per_page(number, default 20) - Returns an array of release objects (shape below), one page at a time.
get_release
- Required:
id(number) — the release's numeric id, not its tag name. - Returns a single release object.
get_latest_release
- No parameters beyond
owner/repo. - Returns a single release object for the most recently published release. The deployed tool's own description reads "the most recent published (non-draft) release" — it names drafts as excluded and is silent on prereleases, so whether prereleases are also excluded is unconfirmed; verify with
list_releasesif the caller depends on it. Either way a release created withoutis_pre_release: trueis eligible, which is why that flag has to be set in the create call (seeconventions.md).
create_release
- Required:
tag_name(string),target(string — branch, tag, or commit SHA to cut the tag from),title(string) - Optional:
body(string — release notes),is_draft(boolean),is_pre_release(boolean) - Assumed (not confirmed by the research docs) that if
tag_namedoesn't already exist as a tag, Gitea creates it againsttargetas part of this call. Verify withget_tag/list_tagsafterward if the caller needs certainty.
delete_release
- Required:
id(number) — same numeric id asget_release. Does not accepttag_name. - Does not delete the underlying tag.
Release object shape (returned by list/get/create/latest):
id, tag_name, target, title, body, draft, prerelease, html_url, author, created_at, published_at
author is the creator's login. body holds the release notes.
Tags
list_tags
- Optional:
page(number, default 1),per_page(number, default 20) - Returns an array of
{ name, commit_sha }— nomessagefield on list responses.
get_tag
- Required:
tag_name(string) - Returns
{ name, message, commit_sha }— the only tag call that returnsmessage.
create_tag
- Required:
tag_name(string) - Optional:
target(string — commitish to tag; if omitted, Gitea tags the default branch tip),message(string — annotated tag message)
delete_tag
- Required:
tag_name(string). Does not accept a numeric id. - Assumed by symmetry with
delete_release(documented above as not deleting the underlying tag) to also not delete any release wrapping the tag — but this reverse direction is not independently confirmed by the research docs, and is the more dangerous direction to get wrong: an agent might skip an explicitdelete_releasecall assuming the release survives. Verify withlist_releases/get_releaseafter callingdelete_tagrather than assume.
Pagination
None of the list tools auto-paginate. To collect a full result set, call with page: 1, then
page: 2, etc., stopping when a page returns fewer items than per_page. list_releases and
list_tags default per_page to 20 — lower than the 30-default used by most other gitea-mcp list
tools, so a caller assuming 30 will under-count pages needed for a fixed total.