Cross-cutting skill for label and milestone operations, composed by gitea-issues and gitea-prs. Includes the label inference guide deferred from issue #6 comment #848.
5.1 KiB
5.1 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 — listing repo/org labels, creating, editing, or deleting a label, resolving label names to the numeric IDs required for applying them to an issue or PR, or listing, creating, updating, closing, or deleting a milestone. This is a cross-cutting shared skill: `gitea-issues` and `gitea-prs` both compose it whenever they need to apply labels or assign a milestone, rather than duplicating label/milestone logic. Also use for label inference — mapping a bug report, feature request, or urgency signal in conversation context to the repo's `Kind/*`/`Priority/*`/`Status/*` label taxonomy. Do not use for applying already-resolved label IDs or milestone IDs to a specific issue or PR — that write goes through `issue_write`/`pull_request_write` in `gitea-issues`/`gitea-prs`, not here. | Requires Gitea MCP server configured with write:issue and write:repository token scopes. |
|
mcp__gitea__label_read mcp__gitea__label_write mcp__gitea__milestone_read mcp__gitea__milestone_write |
Gotchas
- Label writes take IDs, reads return names.
label_readis the only tool that returns full label objects (id,name,color,description). Issue/PR responses slim labels down to name strings. Before any label is applied to an issue or PR (ingitea-issues/gitea-prs), resolve names → IDs here vialabel_read method: "list_repo_labels"— never pass a name string where an ID is expected. - Milestones are referenced by ID everywhere, never by title.
milestone_writeupdate/delete takeid. The one place titles show up as the sole handle is thepull_request_readresponse (see next gotcha). - Milestone representation differs between issues and PRs.
issue_readreturnsmilestone: {id, title}— an object.pull_request_readreturnsmilestone: "title string"— title only, no ID. You cannot recover a milestone ID from a PR response directly; callmilestone_read method: "list"and match by title instead. - Repo labels and org labels are separate pools, never mixed in one call.
label_read/label_writetake eitherowner+repo(repo-scoped methods) ororg(org-scoped methods) — passing both or neither for a given method is a caller error, not something the schema enforces for you. Repo and org labels can both apply to the same issue, but you list/create/edit them through different method values. milestone_writeaccepts"update"and"edit"as the same operation. Both method values map to the identical update call. Prefer"update"for consistency withissue_write/pull_request_write.- A
/in a label name plusexclusive: truemeans mutual exclusivity, not just a naming convention. This repo'sKind/*,Priority/*,Status/*labels follow Gitea's native scoped-label feature: applying a new label within a scope (e.g.Priority/High) is expected to replace any existing label in that same scope, not add alongside it. Label inference (seereferences/label-inference.md) must respect this — replace, don't stack. - Pagination is manual on every list call.
label_readandmilestone_readboth default toper_page: 30. Iteratepage: 1, 2, ...until the result count is less thanper_page— there is no cursor or auto-pagination. - Schema requiredness differs between the two tool families.
milestone_read/milestone_writehaveownerandrepoas hard-required parameters (the call fails validation without them).label_read/label_writeonly hard-requiremethod—owner/repo/orgare functionally required per method but not schema-enforced, so passing none produces a runtime error from Gitea, not a client-side validation error.
Dispatch
| Task | Tool | method |
|---|---|---|
| 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" |
For full parameter detail and step-by-step call sequences, read references/labels.md (label operations) or references/milestones.md (milestone operations). For mapping conversation context to a label to apply, read references/label-inference.md.
Applying resolved label IDs or a milestone ID to a specific issue or PR is out of scope here — that's issue_write/pull_request_write in the composing skill (gitea-issues/gitea-prs).