Motivation
The README's feature-area comparison marks Releases & tags as ❌ for this server while both the official mcp__github__* server and the gh CLI cover it first-class. Releases are a common read target ("what changed in the latest release?", "is X released yet?") and a natural write target at release time.
Plan (phased, mirroring the Actions rollout in #8)
Phase 1 — read tools (#96)
list_releases — one line per release: ID, tag, name, draft / prerelease / published state, published date, author
get_release — single release detail; polymorphic lookup by release_id, by tag, or the latest release when neither is given. Renders the release notes body (truncated at the response cap)
list_tags — one line per tag: name, commit SHA
Phase 2 — write tools
create_release — create a release (and its tag) from tag_name + optional target_commitish, name, body, draft, prerelease, generate_release_notes
update_release — edit an existing release's fields by release_id
delete_release — delete a release by release_id (the underlying tag is left in place; note this in the output)
Same conventions as the existing tool modules: curated Markdown output (list = # Label + bullet-per-row, detail = heading + bulleted metadata per ADR-0003), wrapTool error surfacing, logRateLimit, logWrite on mutations, MAX_TEXT_FIELD_LENGTH cap on the release body input, stubbed-Octokit unit tests per tool.
Out of scope: release assets upload/download (binary handling — same reasoning as the artifacts metadata-only convention); git tag creation as a standalone tool (a release creates its tag; bare tag creation can come later if needed).
Motivation
The README's feature-area comparison marks Releases & tags as ❌ for this server while both the official
mcp__github__*server and theghCLI cover it first-class. Releases are a common read target ("what changed in the latest release?", "is X released yet?") and a natural write target at release time.Plan (phased, mirroring the Actions rollout in #8)
Phase 1 — read tools (#96)
list_releases— one line per release: ID, tag, name, draft / prerelease / published state, published date, authorget_release— single release detail; polymorphic lookup byrelease_id, bytag, or the latest release when neither is given. Renders the release notes body (truncated at the response cap)list_tags— one line per tag: name, commit SHAPhase 2 — write tools
create_release— create a release (and its tag) fromtag_name+ optionaltarget_commitish,name,body,draft,prerelease,generate_release_notesupdate_release— edit an existing release's fields byrelease_iddelete_release— delete a release byrelease_id(the underlying tag is left in place; note this in the output)Same conventions as the existing tool modules: curated Markdown output (list =
# Label+ bullet-per-row, detail = heading + bulleted metadata per ADR-0003),wrapToolerror surfacing,logRateLimit,logWriteon mutations,MAX_TEXT_FIELD_LENGTHcap on the release body input, stubbed-Octokit unit tests per tool.Out of scope: release assets upload/download (binary handling — same reasoning as the artifacts metadata-only convention); git tag creation as a standalone tool (a release creates its tag; bare tag creation can come later if needed).