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

MCP `merge`: a person lands a pull from any MCP client, as the pull page's Merge button does #6243

shipped production is serving it opened this has it
opened this

POST …/pulls/:number/merge (mergePull) has no MCP tool, so a person steering from the Claude app or a car can approve (review) but not land. Agents propose and a person merges, so this tool is for a person's token only.

Done:

  • [ ] src/http/mcp/tools/merge.ts: { repo, number, strategy?: "merge"|"squash", dryRun? }, writes: true, dryByDefault: true (the dry run says what would land: head, base, mergeable, check state, from the same reads as the pull tool).
  • [ ] With dryRun: false it calls mergePull exactly as the route does, with its refusals (conflict, failing check, not a writer).
  • [ ] An agent's token is refused with forbidden and the words "a person merges"; a test proves it, and that a person's rw token merges a clean pull.
  • [ ] docs/MCP.md lists it.

Files: src/http/mcp/tools/merge.ts, the tool index, docs/MCP.md, test/mcp-merge.test.ts. Risk: never loosen mergePull's own rules; this is a second door to the same room.

commented

Parked by the steward, 2026-10-26 (owner: "get us unclogged now then resume everything else"). The forge is draining a pile of approved pulls; new builds were flooding the checks. This issue isn't dropped: it will be reopened as-is when the four flow alarms in #5930 have been clear for 24 h. The list is kept in the steward's parked-2026-10-26 file.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs