Skip to main content
Glama
radireddy

GitHub MCP Server

by radireddy

github.getPRReviews

Fetch GitHub pull request reviews by user within a time range to assess code review participation, analyze review patterns, and track review activity for performance evaluation.

Instructions

Fetch all PR reviews submitted by a user within a time range, filtered by repository. Returns review state (APPROVED, CHANGES_REQUESTED, COMMENTED), PR details, and submission timestamps. Automatically filters out reviews on auto-generated PRs. Use this tool to assess code review participation and review quality.

Example use cases:

  • Measure code review engagement (how many PRs reviewed)

  • Analyze review patterns (approval vs. change requests)

  • Track review activity over time

  • Assess code review contribution for performance evaluations

Returns: Array of review objects with id, state, prId, prNumber, prTitle, prRepo, submittedAt

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
usernameYesGitHub username (case-insensitive, @ prefix optional, required). Examples: "octocat", "@octocat"
reposYesArray of repositories in owner/repo format (required, at least one). Only reviews for these repositories will be returned. Example: ["owner/repo1", "owner/repo2"]
fromNoOptional: Start timestamp in ISO 8601 format. If omitted, uses last 3 months. Example: "2024-01-01T00:00:00Z"
toNoOptional: End timestamp in ISO 8601 format. If omitted, uses last 3 months. Example: "2024-12-31T23:59:59Z"

Implementation Reference

  • Core handler implementation: validates parameters, fetches user's pull request review contributions via GitHub GraphQL API, maps to PRReview objects, filters by repository and excludes auto-generated PRs, paginates results, returns structured array of reviews.
    async getPRReviews( username: string, repos: string[], from?: string, to?: string ): Promise<{ reviews: PRReview[] }> { const { normalizedUsername, normalizedRepos, from: validatedFrom, to: validatedTo } = this.validateCommonParameters(username, repos, from, to); const allReviews = await fetchAllPages( async (cursor: string | null) => { const response = await this.client.query(QUERIES.PRReviews, { username: normalizedUsername, from: validateTimestamp(validatedFrom), to: validateTimestamp(validatedTo), after: cursor, }); return response.data; }, (data: any) => { const contributions = data.user?.contributionsCollection ?.pullRequestReviewContributions?.nodes || []; // Filter reviews using shared filter method return contributions .map(mapPRReview) .filter((review: PRReview) => this.filterPRReview(review, normalizedRepos)) as PRReview[]; }, (data: any) => { const pageInfo = data.user?.contributionsCollection ?.pullRequestReviewContributions?.pageInfo || {}; return extractPageInfo(pageInfo); } ); return { reviews: allReviews as PRReview[] }; }
  • Tool schema definition including name, detailed description, input schema with properties (username, repos, from, to), examples, and required fields.
    { name: 'github.getPRReviews', description: `Fetch all PR reviews submitted by a user within a time range, filtered by repository. Returns review state (APPROVED, CHANGES_REQUESTED, COMMENTED), PR details, and submission timestamps. Automatically filters out reviews on auto-generated PRs. Use this tool to assess code review participation and review quality. Example use cases: - Measure code review engagement (how many PRs reviewed) - Analyze review patterns (approval vs. change requests) - Track review activity over time - Assess code review contribution for performance evaluations Returns: Array of review objects with id, state, prId, prNumber, prTitle, prRepo, submittedAt`, inputSchema: { type: 'object', properties: { username: { type: 'string', description: 'GitHub username (case-insensitive, @ prefix optional, required). Examples: "octocat", "@octocat"', examples: ['octocat', '@octocat'], }, repos: { type: 'array', items: { type: 'string' }, description: 'Array of repositories in owner/repo format (required, at least one). Only reviews for these repositories will be returned. Example: ["owner/repo1", "owner/repo2"]', examples: [['owner/repo'], ['owner/repo1', 'owner/repo2']], }, from: { type: 'string', description: 'Optional: Start timestamp in ISO 8601 format. If omitted, uses last 3 months. Example: "2024-01-01T00:00:00Z"', examples: ['2024-01-01T00:00:00Z'], }, to: { type: 'string', description: 'Optional: End timestamp in ISO 8601 format. If omitted, uses last 3 months. Example: "2024-12-31T23:59:59Z"', examples: ['2024-12-31T23:59:59Z'], }, }, required: ['username', 'repos'], },
  • Tool dispatch registration in MCP server request handler: calls GitHubTools.getPRReviews with parsed arguments and formats result as MCP text content response.
    case 'github.getPRReviews': { const result = await tools.getPRReviews( args.username as string, args.repos as string[], args.from as string | undefined, args.to as string | undefined ); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; }
  • Helper function used by getPRReviews to filter reviews: excludes reviews on auto-created PRs (e.g., backmerges) and ensures repository match.
    private filterPRReview(review: PRReview, normalizedRepos: string[]): boolean { // Filter out reviews on auto-created PRs if (this.isAutoCreatedPR(review.prTitle)) { return false; } // Filter by repository (must match one of the provided repos) const reviewRepo = review.prRepo?.toLowerCase(); if (!reviewRepo || !normalizedRepos.includes(reviewRepo)) { return false; } return true; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/radireddy/github-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server