Review: Forgejo MCP: add update_issue tool

review-365-2026-03-27 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type — Feature
  • [x] Lineage — standalone, discovered during dogfooding
  • [x] Repo — forgejo_admin/claude-custom (BUT WRONG — see Repo Placement)
  • [x] User Story — As Betty Sue, I want to update issue body via MCP
  • [x] Context — explains consolidated spec convention gap
  • [x] File Targets — two files listed (BUT WRONG paths — see File Targets)
  • [x] Acceptance Criteria — 3 criteria
  • [x] Test Expectations — unit + integration + run command
  • [x] Constraints — API endpoint, patterns, optional fields
  • [x] Checklist — standard PR/tests/no-unrelated
  • [x] Related — references #161 and dotfiles#1

Traceability

  • [x] story:pm-scope label — Betty Sue PM workflow, appropriate for MCP tooling
  • [x] arch:forgejo-mcp label — correct architecture component
  • [x] Forgejo issue — forgejo_admin/claude-custom#162, open — BUT filed on wrong repo (see Repo Placement)

File Targets

  • [ ] ~/pal-e-docs-mcp/src/pal_e_docs_mcp/forgejo/tools.py — ISSUE: directory does not exist. ~/pal-e-docs-mcp is not present on the filesystem at all. The Forgejo MCP lives at ~/forgejo-mcp/src/forgejo_mcp/tools/workflows.py
  • [ ] ~/pal-e-docs-mcp/src/pal_e_docs_mcp/forgejo/client.py — ISSUE: does not exist. The forgejo-mcp has no client.py — it uses forgejo_sdk.ForgejoClient via ~/forgejo-mcp/src/forgejo_mcp/server.py. No new client code is needed because the SDK already exposes issue_edit_issue(owner, repo, index, *, title=None, body=None, ...)
Correct file targets should be:
  • ~/forgejo-mcp/src/forgejo_mcp/tools/workflows.py — add update_issue tool function following existing patterns (e.g., comment_on_issue)
  • ~/forgejo-mcp/tests/test_label_comment_repo.py (or new test file) — add integration tests

Repo Placement

MISMATCH. The issue body says ### Repo: forgejo_admin/claude-custom, but the actual code change lives in forgejo_admin/forgejo-mcp. The issue should be filed on forgejo_admin/forgejo-mcp.
DUPLICATE FOUND: forgejo_admin/forgejo-mcp#15 already exists with the same scope ("Add update_issue tool — expose SDK's issue_edit_issue"), filed on the correct repo. Board item #360 tracks it with labels type:feature,arch:mcp-tools,story:pm-scope,scope:discovered.

Dependencies

  • forgejo-sdk issue_edit_issue — VERIFIED. The SDK method exists with signature: (owner, repo, index, *, title=None, body=None, assignee=None, assignees=None, due_date=None, milestone=None, ref=None, state=None, ...). Both title and body are optional kwargs. No SDK changes needed.
  • Board item #364 (issue #161, "Scope review pipeline") — upstream motivation. Not a hard blocker.
  • Board item #360 (forgejo-mcp#15) — DUPLICATE. Same scope, correct repo.

Acceptance Criteria

  • [x] mcp__forgejo__update_issue(owner, repo, issue_number, body=..., title=...) — testable, clear
  • [x] Can update body without title and vice versa — testable, SDK supports optional kwargs
  • [x] Updated body appears on Forgejo web UI — integration test can verify via API round-trip
Criteria are reasonable and verifiable. The test run command (pytest tests/ -k test_update_issue) is plausible.

Blast Radius

  • Low blast radius. This adds a new tool following established patterns. No existing tools are modified.
  • The existing codebase already uses issue_edit_issue in test cleanup (closing issues), confirming the SDK method is stable.
  • No downstream consumers need changes — MCP tool registration is automatic via the @mcp.tool() decorator pattern.

Decomposition (5-minute rule)

  • 1 file target for implementation + 1 for tests, single repo — no decomposition needed
  • 3 acceptance criteria — within threshold
  • Estimated agent work: under 5 minutes — fits single agent pass

Recommendation

This board item (#365) is a duplicate of board item #360 (forgejo-mcp#15). Recommended actions:
  • Close claude-custom#162 as duplicate, linking to forgejo-mcp#15
  • Remove board item #365 from the board (duplicate of #360)
  • Update forgejo-mcp#15 with corrected file targets:
  • Confirm forgejo-mcp#15 has the SDK signature detail: client.issue_edit_issue(owner, repo, index, title=..., body=...) — no client.py changes needed
If this item is kept instead of #360, it must be moved to forgejo_admin/forgejo-mcp and have all file paths corrected.