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:
list_repo_labels— Build a label ID lookup tablelist_repo_issues— Fetch open issues- For each issue, analyze title/body and decide labels
add_issue_labels— Apply labels (e.g.,"335055,335100"for Kind/Bug + Priority/High)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.