create-pull-request
Create a pull request on GitHub Enterprise to propose and merge code changes between branches, specifying title, description, and draft status.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Repository owner (user or organization) | |
| repo | Yes | Repository name | |
| title | Yes | Pull request title | |
| head | Yes | Head branch (e.g., 'username:feature' or just 'feature' for same repo) | |
| base | Yes | Base branch (e.g., 'main') | |
| body | No | Pull request description | |
| draft | No | Create as draft PR |
Implementation Reference
- server/index.ts:735-828 (handler)The MCP tool handler function for 'create-pull-request'. Performs input validation and calls the underlying createPullRequest helper function.async ({ owner, repo, title, head, base, body, draft }) => { 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 (!title || typeof title !== 'string' || title.trim() === '') { return { content: [ { type: "text", text: "Error: Pull request title (title) is required." } ], isError: true }; } if (!head || typeof head !== 'string' || head.trim() === '') { return { content: [ { type: "text", text: "Error: Head branch (head) is required." } ], isError: true }; } if (!base || typeof base !== 'string' || base.trim() === '') { return { content: [ { type: "text", text: "Error: Base branch (base) is required." } ], isError: true }; } const pullRequest = await context.pulls.createPullRequest(context.client, { owner, repo, title, head, base, body, draft }); return { content: [ { type: "text", text: `Successfully created pull request #${pullRequest.number}: "${pullRequest.title}"` } ] }; } catch (error: any) { console.error('Error creating pull request:', error); return { content: [ { type: "text", text: `An error occurred while creating pull request: ${error.message}` } ], isError: true }; } }
- server/index.ts:727-734 (schema)Zod schema defining the input parameters for the create-pull-request tool.owner: z.string().describe("Repository owner (user or organization)"), repo: z.string().describe("Repository name"), title: z.string().describe("Pull request title"), head: z.string().describe("Head branch (e.g., 'username:feature' or just 'feature' for same repo)"), base: z.string().describe("Base branch (e.g., 'main')"), body: z.string().optional().describe("Pull request description"), draft: z.boolean().default(false).describe("Create as draft PR") },
- server/index.ts:725-829 (registration)The server.tool call that registers the 'create-pull-request' tool with its schema and handler."create-pull-request", { owner: z.string().describe("Repository owner (user or organization)"), repo: z.string().describe("Repository name"), title: z.string().describe("Pull request title"), head: z.string().describe("Head branch (e.g., 'username:feature' or just 'feature' for same repo)"), base: z.string().describe("Base branch (e.g., 'main')"), body: z.string().optional().describe("Pull request description"), draft: z.boolean().default(false).describe("Create as draft PR") }, async ({ owner, repo, title, head, base, body, draft }) => { 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 (!title || typeof title !== 'string' || title.trim() === '') { return { content: [ { type: "text", text: "Error: Pull request title (title) is required." } ], isError: true }; } if (!head || typeof head !== 'string' || head.trim() === '') { return { content: [ { type: "text", text: "Error: Head branch (head) is required." } ], isError: true }; } if (!base || typeof base !== 'string' || base.trim() === '') { return { content: [ { type: "text", text: "Error: Base branch (base) is required." } ], isError: true }; } const pullRequest = await context.pulls.createPullRequest(context.client, { owner, repo, title, head, base, body, draft }); return { content: [ { type: "text", text: `Successfully created pull request #${pullRequest.number}: "${pullRequest.title}"` } ] }; } catch (error: any) { console.error('Error creating pull request:', error); return { content: [ { type: "text", text: `An error occurred while creating pull request: ${error.message}` } ], isError: true }; } } );
- api/pulls/pulls.ts:61-71 (helper)Supporting function that performs the actual GitHub API POST request to create the pull request.export async function createPullRequest( client: GitHubClient, params: CreatePullRequestParams ): Promise<PullRequest> { const { owner, repo, ...data } = params; return client.post<PullRequest>( `/repos/${owner}/${repo}/pulls`, data ); }
- api/pulls/types.ts:71-80 (schema)TypeScript interface defining parameters for the createPullRequest helper function.export interface CreatePullRequestParams { owner: string; repo: string; title: string; head: string; base: string; body?: string; draft?: boolean; maintainer_can_modify?: boolean; }