Files
holocron/plugins/gitea/skills/gitea-labels-milestones/SKILL.md
Defame1297 6cfc3577e2 docs: trim repeated boilerplate in git, gitea, and bin skills
Finding 13: five blocks of near-identical wording were repeated across
skills within a plugin — the gitea "resolve owner and repo" step (5
skills), the 404-masks-403 note (6 files), the manual pagination
explanation (8 files), the git plugin's main/master force-push refusal
(7 files, some with multiple internal restatements), and the bin
skills' domain-glossary/ADR paragraph (5 skills). Tightened each
instance in place — same meaning, fewer words — rather than extracting
to a shared file, which ADR-0014's one-file-per-skill install
constraint rules out. Left the three git skills' structured-result
JSON shapes alone (coupled to the separate, out-of-scope git-orchestrate
merge candidate, finding 19).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YR2CjVumUbEGWcMikcoXBD
2026-09-12 19:48:31 +00:00

3.5 KiB

name, description, compatibility, metadata, allowed-tools
name description compatibility metadata allowed-tools
gitea-labels-milestones Use when reading or writing Gitea labels or milestones — "create a label", "what labels does this repo have", "close the milestone" — or to resolve label names to IDs, or infer a Kind/Priority/Status label from context, even when the user does not say "Gitea". Not applying them to an issue -> `gitea-issues`. Not to a PR -> `gitea-prs`. Requires Gitea MCP server configured with write:issue and write:repository token scopes.
category source_keys version
integration
gitea-mcp-repo
gitea-mcp-slim-go
context7-websites-gitea
context7-gitea-tea-cli
0.1.6
Bash mcp__gitea__label_read mcp__gitea__label_write mcp__gitea__milestone_read mcp__gitea__milestone_write

Gotchas

  • Applying a label needs a numeric ID; issue/PR responses give only name strings. Resolve name → ID with label_read first.
  • pull_request_read returns milestone as a bare title string, issue_read as {id, title}. Recover the ID by listing milestones and matching the title.
  • Never assume a Kind/*/Priority/*/Status/* scope is exclusive — read each label's exclusive field. list_repo_labels always returns it; label_write can only set it via org create methods ("org only"). true means Gitea enforces one-per-scope; replacing instead of stacking on a false label destroys a valid one.

Step 1 — Resolve owner, repo and org

Extract owner and repo from the git remote before any tool call (skip if 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."

The *_org_label* methods take org, not owner/repo. Pass that same owner as org — it's the org name whenever the owner is an organisation, which the remote URL doesn't say.

Read the failure text before interpreting it: list_org_labels needs read:organization, which this skill's declared scopes don't carry, so it fails with a scope error before it ever checks org-vs-user. Report the unchecked scope, not an empty pool — only a genuine not-found means the owner is a user account with no org pool.

Step 2 — Dispatch

Task Tool method
Resolve a label name to its ID label_read "list_repo_labels", then "list_org_labels"
List repo labels label_read "list_repo_labels"
Get one repo label by ID label_read "get_repo_label"
List org labels label_read "list_org_labels"
Create a repo/org label label_write "create_repo_label" / "create_org_label"
Edit a repo/org label label_write "edit_repo_label" / "edit_org_label"
Delete a repo/org label label_write "delete_repo_label" / "delete_org_label"
List milestones milestone_read "list"
Get one milestone by ID milestone_read "get"
Create a milestone milestone_write "create"
Update / close a milestone milestone_write "update"
Delete a milestone milestone_write "delete"

Every list method paginates manually (per_page default 30) — iterate page: 1, 2, ... until a page returns fewer than per_page. A truncated list silently breaks name → ID resolution.

If the task is a label operation, read references/labels.md; if a milestone operation, read references/milestones.md. If the label to apply has to be derived from conversation context rather than named, read references/label-inference.md.