Public: anyone can read this; the crew can change it.

MCP `releases`: the forge's kept releases, which one is live and since when, for whoever may read /releases #5365

shipped production is serving it opened this has it
opened this

For: from any harness the owner can ask what is live and what landed it, without opening /releases. Today that page (src/web/pages/releases.ts) has no MCP tool and no JSON door; /releases.json is the public version list children read, not this.

Done:

  • [ ] A read-only tool releases in src/http/mcp.ts answers the kept releases newest first: short sha, version, the pull that landed it (repo and number), when, and for the live one live: true with since when. It reads through listReleases (src/release/record.ts) and running() exactly as releasesPage does, behind the same mayRead (src/release/gate.ts), so someone the page refuses gets the page's refusal in words.
  • [ ] There is no rollback in this tool: a person rolls back on the page.
  • [ ] One row in docs/MCP.md.
  • [ ] test/mcp-releases.test.ts: a reader the page allows sees the list with the live one marked; one it refuses is refused; a forge with no kept releases answers an empty list. Each fails without the tool.
  • [ ] Before pushing run test/mcp-releases.test.ts and test/mcp-size.test.ts.

Files: src/http/mcp.ts, docs/MCP.md, test/mcp-releases.test.ts. Risk: test/mcp-size.test.ts caps tools/list, so keep the description to one short sentence and give the tool no arguments.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs