forgejo-mcp/demos/issue-labels.md
2026-03-20 17:57:11 +01:00

5.1 KiB

Demo: add_issue_labels + remove_issue_labels

2026-03-20T08:30:00Z by Showboat 0.6.1

What these tools do

Two issue label management tools let AI agents programmatically tag and untag issues without leaving the MCP/CLI workflow:

  • add_issue_labels — Add one or more labels to an issue (by numeric label ID)
  • remove_issue_labels — Remove one or more labels from an issue (by numeric label ID)

Both tools require numeric label IDs. Use list_repo_labels first to discover the ID↔name mapping, then pass IDs to the mutation tools. This enables fully autonomous label triage workflows.

Setup

Set FORGEJO_URL and FORGEJO_ACCESS_TOKEN environment variables (or use direnv), then build:

make build

CLI mode: parameter schemas

./forgejo-mcp --cli add_issue_labels --help 2>/dev/null
Tool: add_issue_labels
Description: Add labels to issue

Parameters:
  index                number     required   Issue index
  labels               string     required   Labels to add (comma-separated)
  owner                string     required   Repository owner
  repo                 string     required   Repository name
./forgejo-mcp --cli remove_issue_labels --help 2>/dev/null
Tool: remove_issue_labels
Description: Remove labels from issue

Parameters:
  index                number     required   Issue index
  labels               string     required   Labels to remove (comma-separated label IDs)
  owner                string     required   Repository owner
  repo                 string     required   Repository name

End-to-end workflow: discover, add, remove

Step 1: Discover available labels

./forgejo-mcp --cli list_repo_labels \
  --args '{"owner":"goern","repo":"forgejo-mcp"}' 2>/dev/null
  id= 335073  Compat/Breaking                 #c62828
  id= 335055  Kind/Bug                        #ee0701
  id= 335070  Kind/Documentation              #37474f
  id= 335061  Kind/Enhancement                #84b6eb
  id= 335058  Kind/Feature                    #0288d1
  id= 335064  Kind/Security                   #9c27b0
  id= 335067  Kind/Testing                    #795548
  id= 335097  Priority/Critical               #b71c1c
  id= 335100  Priority/High                   #d32f2f
  id= 335106  Priority/Low                    #4caf50
  id= 335103  Priority/Medium                 #e64a19
  id= 335082  Reviewed/Confirmed              #795548
  id= 335076  Reviewed/Duplicate              #616161
  id= 335079  Reviewed/Invalid                #546e7a
  id= 335085  Reviewed/Won't Fix              #eeeeee
  id= 335094  Status/Abandoned                #222222
  id= 335091  Status/Blocked                  #880e4f
  id= 335088  Status/Need More Info           #424242

Step 2: Check current labels on an issue

./forgejo-mcp --cli get_issue_by_index \
  --args '{"owner":"goern","repo":"forgejo-mcp","index":92}' 2>/dev/null
  Issue #92: Add support for creating organisations
  State: open
  Labels:
    - Kind/Enhancement (id=335061)
    - Kind/Feature (id=335058)

Step 3: Add a label (Priority/Medium = 335103)

./forgejo-mcp --cli add_issue_labels \
  --args '{"owner":"goern","repo":"forgejo-mcp","index":92,"labels":"335103"}' 2>/dev/null
  Issue #92: Add support for creating organisations
  Labels after add:
    - Kind/Enhancement (id=335061)
    - Kind/Feature (id=335058)
    - Priority/Medium (id=335103)

Step 4: Remove the label

./forgejo-mcp --cli remove_issue_labels \
  --args '{"owner":"goern","repo":"forgejo-mcp","index":92,"labels":"335103"}' 2>/dev/null
  Issue #92: Add support for creating organisations
  Labels after remove:
    - Kind/Enhancement (id=335061)
    - Kind/Feature (id=335058)

MCP stdio mode: adding multiple labels at once

An MCP client can add several labels in a single call by passing comma-separated IDs:

echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{...}}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
  "name":"add_issue_labels",
  "arguments":{"owner":"goern","repo":"forgejo-mcp","index":92,"labels":"335067,335106"}
}}' | ./forgejo-mcp 2>/dev/null
  Issue #92: Add support for creating organisations
    - Kind/Enhancement (id=335061)
    - Kind/Feature (id=335058)
    - Kind/Testing (id=335067)
    - Priority/Low (id=335106)

Multiple labels can also be removed in one call the same way — remove_issue_labels iterates and deletes each one.

Autonomous triage workflow

An AI agent can implement a full label triage pipeline:

  1. list_repo_labels — Build a label ID lookup table
  2. list_repo_issues — Fetch open issues
  3. For each issue, analyze title/body and decide labels
  4. add_issue_labels — Apply labels (e.g., "335055,335100" for Kind/Bug + Priority/High)
  5. remove_issue_labels — Fix misclassifications by removing wrong labels

No human needed to look up IDs or visit the web UI — the agent discovers IDs at runtime and applies them programmatically.