merge_pull_request
Merge a GitHub pull request using specified methods (merge, squash, rebase) and optionally delete the branch. Supports dry runs to preview changes before execution.
Instructions
Merge a GitHub pull request
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| deleteBranch | No | Delete branch after merge | |
| dryRun | No | Preview without executing | |
| mergeMethod | No | Merge method | merge |
| prNumber | Yes | Pull request number | |
| workingDir | No | Working directory path |
Implementation Reference
- src/index.ts:297-340 (handler)The main handler function that executes the merge_pull_request tool. Uses GitHub CLI to merge the PR with specified method and options, handles dry-run and errors.async function mergePullRequest( prNumber: string, mergeMethod: 'merge' | 'squash' | 'rebase' = 'merge', deleteBranch: boolean = true, workingDir?: string, dryRun: boolean = false ): Promise<WorkflowResult> { try { if (dryRun) { return { success: true, message: "Dry run: Would merge pull request", details: { prNumber, mergeMethod, deleteBranch } }; } // Merge PR using GitHub CLI with cleared tokens const mergeFlag = mergeMethod === 'squash' ? '--squash' : mergeMethod === 'rebase' ? '--rebase' : '--merge'; const deleteFlag = deleteBranch ? '--delete-branch' : ''; const command = `gh pr merge ${prNumber} ${mergeFlag} ${deleteFlag}`.trim(); const result = await executeWithClearedTokens(command, workingDir); return { success: true, message: "Successfully merged pull request", details: { prNumber, mergeMethod, output: result.stdout } }; } catch (error: any) { return { success: false, message: "Failed to merge pull request", error: `Failed to merge pull request: ${error.message}` }; } }
- src/index.ts:490-519 (schema)Input schema definition for the merge_pull_request tool, specifying parameters, types, descriptions, defaults, and required fields.inputSchema: { type: "object", properties: { prNumber: { type: "string", description: "Pull request number" }, mergeMethod: { type: "string", enum: ["merge", "squash", "rebase"], description: "Merge method", default: "merge" }, deleteBranch: { type: "boolean", description: "Delete branch after merge", default: true }, workingDir: { type: "string", description: "Working directory path" }, dryRun: { type: "boolean", description: "Preview without executing", default: false } }, required: ["prNumber"] }
- src/index.ts:487-520 (registration)Tool registration in the ListToolsRequestSchema handler, defining name, description, and input schema.{ name: "merge_pull_request", description: "Merge a GitHub pull request", inputSchema: { type: "object", properties: { prNumber: { type: "string", description: "Pull request number" }, mergeMethod: { type: "string", enum: ["merge", "squash", "rebase"], description: "Merge method", default: "merge" }, deleteBranch: { type: "boolean", description: "Delete branch after merge", default: true }, workingDir: { type: "string", description: "Working directory path" }, dryRun: { type: "boolean", description: "Preview without executing", default: false } }, required: ["prNumber"] } },
- src/index.ts:606-614 (registration)Registration/dispatch in the CallToolRequestSchema switch statement, mapping tool name to handler function call with argument parsing.case "merge_pull_request": result = await mergePullRequest( args?.prNumber as string, (args?.mergeMethod as 'merge' | 'squash' | 'rebase') || 'merge', (args?.deleteBranch as boolean) ?? true, args?.workingDir as string, (args?.dryRun as boolean) || false ); break;