0.15.0
forgejo-mcp v0.15.0 (2026-08-31)
Since the first release this server could attach a milestone without being able to tell you which milestones existed, post a comment without being able to correct a typo in it, and write a file it had no way to remove. Twenty tools later, all three are closed, and the surface stops asking callers for identifiers it refused to hand out. The more useful find was in the check rather than the code: swapping the elevated token for the everyday one passed the whole suite, on a tool that had shipped in that tier since #106. The stub now records which credential actually arrives, so the trust boundary is asserted rather than assumed. Deleting a label, a release or a tag is elevated, because none of the three can be undone from here.
Added
- tools: add edit_issue for issue and pull request content edits (#131) (be49344), closes #123
- tools: add milestone tools (#132) (d6223e3), closes #124
- tools: add edit_issue_comment and delete_issue_comment (#133) (9110b7c), closes #125
- tools: add create_commit_status and list_commit_statuses (#134) (3a0479b), closes #126
- tools: add delete_file (#135) (8054511), closes #128
- tools: add label definition tools, delete_label elevated (#136) (5429673), closes #127
- tools: add release reads, edit_release, and elevated release and tag deletion (#137) (631543c), closes #129
- tools: let merge_pull_request request head-branch deletion (#121) (3b8d856), closes #120
The default surface goes from 36 tools to 53.
Elevated tier
The opt-in tier goes from four tools to seven. delete_label, delete_release and delete_tag join merge_pull_request, delete_branch, create_repo and delete_repo. Each was placed there on the same test as the rest of the tier, which is whether the damage can be undone from this server: a deleted label is stripped from every issue that carried it, release notes and assets never existed in git, and a tag may be the only pointer to its commits.
The double gate is unchanged. Nothing in this tier registers unless FORGEJO_MCP_ELEVATED=1, FORGEJO_TOKEN is set, and FORGEJO_MCP_ELEVATED_TOKEN differs from it. If you allowlist tools for unattended use, allowlist named default tools rather than the server.
Verification
The smoke check now records the Authorization header on every stub request and asserts that elevated tools travel on the elevated token while default tools do not. Before this release that boundary was invisible to the check, so an elevated tool running under the everyday credential would have passed. It also drives 44 real tool calls against a stub Forgejo, up from 23.
Known limitations
The token-scope review that this project requires whenever the elevated tier widens has not been done for create_repo, delete_repo, delete_label, delete_release or delete_tag. Separately, create_repo fails against a live instance when the token lacks write:user.
Full changelog: v0.14.0...v0.15.0