merge-pull-request
Merge a GitHub pull request using specified method (merge, squash, or rebase) with customizable commit messages to integrate code changes into the repository.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Repository owner (user or organization) | |
| repo | Yes | Repository name | |
| pull_number | Yes | Pull request number | |
| commit_title | No | Title for the automatic commit message | |
| commit_message | No | Extra detail to append to automatic commit message | |
| merge_method | No | Merge method to use | merge |
Implementation Reference
- server/index.ts:832-911 (handler)Primary MCP tool handler for 'merge-pull-request'. Registers the tool with Zod input schema, performs parameter validation, calls the underlying mergePullRequest helper, and returns formatted success/error response.server.tool( "merge-pull-request", { owner: z.string().describe("Repository owner (user or organization)"), repo: z.string().describe("Repository name"), pull_number: z.number().describe("Pull request number"), commit_title: z.string().optional().describe("Title for the automatic commit message"), commit_message: z.string().optional().describe("Extra detail to append to automatic commit message"), merge_method: z.enum(['merge', 'squash', 'rebase']).default('merge').describe("Merge method to use") }, async ({ owner, repo, pull_number, commit_title, commit_message, merge_method }) => { try { // Parameter validation if (!owner || typeof owner !== 'string' || owner.trim() === '') { return { content: [ { type: "text", text: "Error: Repository owner (owner) is required." } ], isError: true }; } if (!repo || typeof repo !== 'string' || repo.trim() === '') { return { content: [ { type: "text", text: "Error: Repository name (repo) is required." } ], isError: true }; } if (!pull_number || typeof pull_number !== 'number') { return { content: [ { type: "text", text: "Error: Pull request number (pull_number) is required." } ], isError: true }; } const result = await context.pulls.mergePullRequest(context.client, { owner, repo, pull_number, commit_title, commit_message, merge_method }); return { content: [ { type: "text", text: `Successfully merged pull request #${pull_number}.\nResult: ${result.message}\nCommit SHA: ${result.sha}` } ] }; } catch (error: any) { console.error('Error merging pull request:', error); return { content: [ { type: "text", text: `An error occurred while merging pull request: ${error.message}` } ], isError: true }; } } );
- api/pulls/pulls.ts:97-107 (helper)Core helper function that executes the GitHub API PUT request to merge the specified pull request.export async function mergePullRequest( client: GitHubClient, params: MergePullRequestParams ): Promise<MergePullRequestResponse> { const { owner, repo, pull_number, ...data } = params; return client.put<MergePullRequestResponse>( `/repos/${owner}/${repo}/pulls/${pull_number}/merge`, data ); }
- api/pulls/types.ts:95-102 (schema)TypeScript interface defining the input parameters for the merge pull request operation.export interface MergePullRequestParams { owner: string; repo: string; pull_number: number; commit_title?: string; commit_message?: string; merge_method?: 'merge' | 'squash' | 'rebase'; }
- api/pulls/types.ts:105-109 (schema)TypeScript interface defining the response from the merge pull request operation.export interface MergePullRequestResponse { sha: string; merged: boolean; message: string; }