Review: Add get_issue tool to Forgejo MCP
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-toolsnote 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_issuesat line 314 returns only number/title/state/url (no body). Newget_issuetool belongs here. - [x] SDK method
issue_get_issue— verified: used intests/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.