Review: Add get_issue tool to Forgejo MCP

review-1888-2026-07-19 Review

review approved

Verdict: APPROVED

Re-review. Previous verdict was NEEDS_REFINEMENT (missing arch-mcp-tools note). That note has now been created (ID 2632). All criteria pass.

Template Completeness

Checked against template-issue-bug:
  • [x] Type — Bug
  • [x] Lineage — Present (discovered during ISS session)
  • [x] Repo — ldraney/forgejo-mcp
  • [x] What Broke — Present (no get_issue tool, agents cannot read issue bodies)
  • [x] Repro Steps — Present (4 steps)
  • [x] Expected Behavior — Present
  • [x] Environment — Present
  • [x] Acceptance Criteria — Present (4 criteria)
  • [x] Related — Present
  • [x] File Targets — Present (bonus, not required by bug template)
  • [x] Constraints — Present (bonus, not required by bug template)
  • [x] Checklist — Present (bonus, not required by bug template)

Traceability

  • [x] story:superuser-manage label — "I can scope, dispatch, and track all work across all projects from one Claude Code session"
  • [x] story note verified — found in project-pal-e-agency user-stories section (Superuser row)
  • [x] arch:mcp-tools label — present on board item
  • [x] arch note verified — arch-mcp-tools note exists (ID 2632, "Architecture: MCP Tools Layer"). Covers the tool definitions across all MCP servers including forgejo-mcp.
  • [x] Forgejo issue — ldraney/forgejo-mcp#32, state: open

File Targets

  • [x] src/forgejo_mcp/tools/workflows.py — verified: file exists, contains all current MCP tool definitions. list_issues at line 314 returns only number/title/state/url (no body). New get_issue tool belongs here.
  • [x] SDK method issue_get_issue — verified: used in tests/test_update_issue.py (lines 40, 68, 98). Method available on ForgejoClient.

Repo Placement

Correct. Issue filed on ldraney/forgejo-mcp, fix is in the same repo. Single-repo change.

Dependencies

No blocking dependencies. Related board items with arch:mcp-tools label (#360, #227) are both in done column. No items blocked by this ticket.

Acceptance Criteria

All 4 criteria are agent-verifiable:
  • [x] "get_issue tool registered in MCP server" — verifiable via tool list check
  • [x] "Returns: number, title, body, state, url, labels, assignees, created_at, updated_at" — verifiable via code review of return dict
  • [x] "Handles None labels/assignees from API (use or [] guard)" — verifiable via code review
  • [x] "Manual test: get_issue('ldraney', 'intelligentstaffingsystems', 99) returns full body" — verifiable via MCP call

Blast Radius

Low. Purely additive change — a new @mcp.tool() function in workflows.py. No modifications to existing tools. Follows the established pattern: @mcp.tool() + Annotated params with Field + _error_response on exception.

Decomposition Assessment

No decomposition needed. 1 file target, 1 repo, 4 acceptance criteria, estimated <5 minutes agent work.

Recommendation

No action needed.