Merge Project Branches
openl_merge_project_branchesMerges project branches in either direction while checking permissions and locks before writing, and reports conflicts for user resolution instead of auto-choosing.
Instructions
Attempt to merge project branches. The tool first repeats the relationship and permission precheck: up-to-date returns without a write, and permission/lock blockers fail before merge. The precheck does not predict conflicts, so an allowed attempt can still return status='conflicts'. mode='receive' merges otherBranch into the current branch; mode='send' merges the current branch into otherBranch. A conflict result creates read-only, session-bound conflict state: inspect it on this same MCP server, then hand resolution to the user in Studio or cancel the pending state. Never choose OURS or THEIRS automatically. force is only for an eligible protected-target bypass and requires confirmForce=true.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | receive merges the other branch into the project's current branch; send merges the current branch into otherBranch. | |
| force | No | Bypass eligible protected-target restrictions. Default false. Use only after Studio reports blockedBy='bypass-required'. | |
| projectId | Yes | Project ID returned by backend. Use the exact 'projectId' value from openl_list_projects() response without modification or reformatting. | |
| otherBranch | Yes | The other branch: source for receive mode, target for send mode. Discover all merge targets with openl_list_project_branches(scope='repository'). | |
| confirmForce | No | Must be true when force=true, confirming the protected-branch bypass. | |
| response_format | No | Response format: 'json' for structured, round-trippable data (default), 'markdown' for human-readable output, 'markdown_concise' for a brief summary (1-2 paragraphs), or 'markdown_detailed' for full details with context | json |