No reviewers
Labels
No labels
needs-info
needs-triage
ready-for-agent
ready-for-human
wontfix
needs-info
needs-triage
ready-for-agent
ready-for-human
review/merge-ready
review/needs-fix
review/needs-human
review/needs-review
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:research
wayfinder:task
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
olympus/infra-forge!56
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "hermes/17-forgejo-mcp"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Implements the #17 spec's two remaining tickets on one integration branch.
#23 adds "The Agent side: the MCP client" to the deploy runbook (§4): the
mcppackage and itsmcp.client.streamable_httpimport path, the~/.hermes/config.yamlmcp_serversentry carrying the caller's own token in theAuthorizationheader, the restart with no hot reload, and that the round-trip survives the Edge being down because the Service reaches Forgejo over the Guest's loopback.#24 adds ADR 0005: per-Agent Forgejo tokens;
write:issuefor triage (plusread:organization, which the label tools need — recorded honestly);read:repositoryfor PR/code browsing;write:repositoryrefused; the credential-less Service enforces no authorisation, so the token scope is the only boundary.Evidence
initialize -> Forgejo MCP Server 3.2.0,tools/list -> 156 tools,list_repo_issues -> isError=Falsewith realpit/infra-forgeissues (#49, #24, #23),get_issue_by_index(23)returns the ticket.list_repo_pull_requestsreturns PR #56;get_pull_request_diff(#48)returns the diff;get_file_content(README.md)andlist_repo_contentsreturn real tree content;list_workflow_runsreturns run #1 (success).--url http://127.0.0.1:3080/; livess -tnduring a held LAN session shows127.0.0.1 -> 127.0.0.1:3080and no non-loopback upstream.tofu/npm/forgejo.tfvarsdeclares only the:22stream and the:3080proxy host — no:8089rule — so the Edge is provably not in the path. PRE has no Edge entry at all, so a full round-trip against it is the same fact live. The PROD Edge was UP and was deliberately not taken down; #23's literal "Edge down" criterion is therefore met by substitution (PRE round-trip + static no-rule + loopback socket), not literally.pit/mcp-probe):list_repo_issuessucceeds underwrite:issue; the same call is refused under aread:repository-only token;create_fileandmerge_pull_requestare refused underwrite:issue.Review
Two-axis
/code-review(Standards + Spec) on the diff. No hard documented-standard violation. Actionable findings fixed in9fdb0e4: the client subsection no longer restates the credential-less claim above it, and the 0001 "Covers" row now names the Agent MCP-client half. Remaining, stated plainly: the triage grant iswrite:issue,read:organizationrather thanwrite:issuealone (the label tools callGET /orgs/<owner>/labels); and #23's Edge-down criterion is met by substitution because the Edge is healthy.Merge Danger
Door: two-way — docs only;
git revertdrops both files and the runbook section.Blast Radius: docs. No role, template, unit, Stack or secret changed; nothing to rehearse or deploy.
Closes #23
Closes #24
forgejo-mcp: the Agent client half (#23) and the token-scope boundary (#24)to WIP: forgejo-mcp: the Agent client half (#23) and the token-scope boundary (#24)WIP: forgejo-mcp: the Agent client half (#23) and the token-scope boundary (#24)to forgejo-mcp: the Agent client half (#23) and the token-scope boundary (#24)forgejo-mcp: the Agent client half (#23) and the token-scope boundary (#24)to WIP: forgejo-mcp: the Agent client half (#23) and the token-scope boundary (#24)WIP: forgejo-mcp: the Agent client half (#23) and the token-scope boundary (#24)to forgejo-mcp: the Agent client half (#23) and the token-scope boundary (#24)