get_pull_request
Retrieve details of a specific pull request in a GitHub repository by providing the repository owner, name, and pull request number.
Instructions
Get details of a specific pull request in a GitHub repository.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Repository owner | |
| repo | Yes | Repository name | |
| pullNumber | Yes | Pull request number |
Implementation Reference
- src/tools/pullrequests.ts:15-45 (handler)Handler function for 'get_pull_request' tool. Calls octokit.rest.pulls.get() and formats PR details including state, author, branches, dates, commits, files, assignees, reviewers, labels, and body as markdown.
async ({ owner, repo, pullNumber }) => { try { const response = await octokit.rest.pulls.get({ owner, repo, pull_number: pullNumber, }) const pr = response.data let text = `**PR #${pr.number}: ${pr.title}**\n` text += `State: ${pr.state}${pr.draft ? " (draft)" : ""}${pr.merged ? " (merged)" : ""}\n` text += `URL: ${pr.html_url}\n` text += `Author: ${pr.user?.login || "unknown"}\n` text += `Branch: ${pr.head.label} -> ${pr.base.label}\n` text += `Created: ${pr.created_at}\n` text += `Updated: ${pr.updated_at}\n` if (pr.merged_at) text += `Merged: ${pr.merged_at}\n` text += `Commits: ${pr.commits} | Changed files: ${pr.changed_files} | +${pr.additions} -${pr.deletions}\n` if (pr.assignees && pr.assignees.length > 0) text += `Assignees: ${pr.assignees.map(a => a.login).join(", ")}\n` if (pr.requested_reviewers && pr.requested_reviewers.length > 0) text += `Reviewers: ${pr.requested_reviewers.map((r: any) => r.login).join(", ")}\n` if (pr.labels && pr.labels.length > 0) text += `Labels: ${pr.labels.map(l => l.name).join(", ")}\n` if (pr.body) text += `\n---\n${pr.body}\n` return { content: [{ type: "text", text }], } } catch (e: any) { return { content: [{ type: "text", text: `Error: ${e.message}` }], } } }, ) - src/tools/pullrequests.ts:10-14 (schema)Zod schema definitions for 'get_pull_request' inputs: owner (string), repo (string), and pullNumber (number).
{ owner: z.string().describe("Repository owner"), repo: z.string().describe("Repository name"), pullNumber: z.number().describe("Pull request number"), }, - src/tools/pullrequests.ts:7-45 (registration)Registration of the 'get_pull_request' tool via server.tool() with name, description, input schema, and handler.
server.tool( "get_pull_request", "Get details of a specific pull request in a GitHub repository.", { owner: z.string().describe("Repository owner"), repo: z.string().describe("Repository name"), pullNumber: z.number().describe("Pull request number"), }, async ({ owner, repo, pullNumber }) => { try { const response = await octokit.rest.pulls.get({ owner, repo, pull_number: pullNumber, }) const pr = response.data let text = `**PR #${pr.number}: ${pr.title}**\n` text += `State: ${pr.state}${pr.draft ? " (draft)" : ""}${pr.merged ? " (merged)" : ""}\n` text += `URL: ${pr.html_url}\n` text += `Author: ${pr.user?.login || "unknown"}\n` text += `Branch: ${pr.head.label} -> ${pr.base.label}\n` text += `Created: ${pr.created_at}\n` text += `Updated: ${pr.updated_at}\n` if (pr.merged_at) text += `Merged: ${pr.merged_at}\n` text += `Commits: ${pr.commits} | Changed files: ${pr.changed_files} | +${pr.additions} -${pr.deletions}\n` if (pr.assignees && pr.assignees.length > 0) text += `Assignees: ${pr.assignees.map(a => a.login).join(", ")}\n` if (pr.requested_reviewers && pr.requested_reviewers.length > 0) text += `Reviewers: ${pr.requested_reviewers.map((r: any) => r.login).join(", ")}\n` if (pr.labels && pr.labels.length > 0) text += `Labels: ${pr.labels.map(l => l.name).join(", ")}\n` if (pr.body) text += `\n---\n${pr.body}\n` return { content: [{ type: "text", text }], } } catch (e: any) { return { content: [{ type: "text", text: `Error: ${e.message}` }], } } }, ) - src/index.ts:18-19 (registration)Registration call: registerPullRequestTools(server, octokit) in the main setup function.
registerPullRequestTools(server, octokit) registerRepositoryResource(server, octokit) - src/index.ts:5-8 (helper)Import statement for registerPullRequestTools from './tools/pullrequests.js'.
import { registerPullRequestTools } from "./tools/pullrequests.js" import { registerRepositoryTools } from "./tools/repositories.js" import { registerSearchTools } from "./tools/search.js" import { registerRepositoryResource } from "./resources/repository_resource.js"