GitHub MCP Server
Provides comprehensive tools for analyzing developer activity and contributions, including pull request analysis, code review tracking, comment analysis, impact assessment, and repository statistics through GitHub's REST and GraphQL APIs.
Uses GraphQL queries to efficiently fetch nested GitHub data such as reviews, comments, and files in a single request with cursor-based pagination.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GitHub MCP Servershow my PRs and reviews for the last month in radireddy/AiApps"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GitHub MCP Server
A production-ready MCP (Model Context Protocol) server that exposes employee-centric GitHub activity APIs for AI agents and agent orchestration systems. This server abstracts GitHub REST & GraphQL APIs and provides semantic endpoints for analyzing developer contributions, code reviews, and impact over time ranges.
🎯 For AI Agents & Agent Orchestration
Quick Start for Agents: See AGENT_GUIDE.md for comprehensive agent-focused documentation, use cases, and examples.
Recommended Tool for Quick Overview: Use github.getUserRepoStats to get comprehensive metrics in a single call (PRs, comments, reviews, code changes).
Tool Discovery: All tools include detailed descriptions, examples, and use cases in their schemas for easy agent discovery.
Related MCP server: GitInsight-MCP
Features
Pull Request Analysis: Fetch PRs authored by employees with detailed metadata
Review Tracking: Get PR reviews with states (APPROVED, CHANGES_REQUESTED, COMMENTED)
Comment Analysis: Extract inline and general review comments with file/line context
User Comments: Fetch all comments (review and issue) by a user for a repository within a time range
Repository Statistics: Get comprehensive stats (PRs, comments, reviews, code changes) for a user in a repository
Impact Assessment: Analyze whether review comments led to code changes
Code Statistics: Get detailed diff metadata and code stats for PRs
Architecture
/src
/mcp
server.ts # MCP server registration
tools.ts # Tool definitions and handlers
/github
client.ts # GraphQL client with auth
queries.ts # GraphQL query definitions
mapper.ts # Normalize GitHub → MCP DTOs
/utils
pagination.ts # Cursor-based pagination
time.ts # ISO 8601 timestamp handling
rateLimit.ts # Rate limit managementPrerequisites
Node.js 20+
GitHub Personal Access Token with appropriate permissions:
repo(REQUIRED for private repos)read:org(REQUIRED for organization repositories)read:user(for user data)
For Private Organization Repositories
If you're querying private organization repositories (e.g., radireddy/AiApps), ensure:
Token has both scopes:
repoANDread:orgAccount membership: Your account must be a member of the organization
Organization settings: Organization must allow third-party access (if using OAuth)
Repository access: You must have at least read access to the repository
To verify your token has access, run:
npm run check-token radireddy/AiAppsInstallation
npm install
npm run buildConfiguration
Option 1: Using .env file (Recommended)
Copy the example file:
cp .env.example .envEdit
.envand add your GitHub token:GITHUB_TOKEN=ghp_your_token_here
The .env file is automatically loaded and is excluded from git (already in .gitignore).
Option 2: Environment Variable
export GITHUB_TOKEN=ghp_your_token_hereNote: The .env file approach is recommended as it keeps your token local and secure.
Usage
MCP Configuration
Add to your MCP client configuration (mcp.json):
{
"mcpServers": {
"github": {
"command": "node",
"args": ["dist/mcp/server.js"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}Running the Server
npm startThe server communicates via stdio, so it should be launched by your MCP client.
MCP Tools
1. github.getAuthoredPRs
Fetch all PRs authored by a user in a time range.
Input:
{
"username": "octocat",
"repos": ["owner/repo1", "owner/repo2"],
"from": "2024-01-01T00:00:00Z",
"to": "2024-12-31T23:59:59Z"
}Note: from and to are optional. If omitted, defaults to last 3 months. repos is required (at least one repository).
Output:
{
"prs": [
{
"id": "PR_kwDO...",
"repo": "owner/repo",
"title": "Fix bug in authentication",
"createdAt": "2024-06-15T10:30:00Z",
"mergedAt": "2024-06-16T14:20:00Z",
"state": "MERGED",
"filesChanged": 5,
"additions": 120,
"deletions": 45
}
]
}2. github.getPRReviews
Fetch PR reviews submitted by the employee. Filters by repository.
Input:
{
"username": "octocat",
"repos": ["owner/repo"],
"from": "2024-01-01T00:00:00Z",
"to": "2024-12-31T23:59:59Z"
}Note: from and to are optional. If omitted, defaults to last 3 months. repos is required (at least one repository).
Output:
{
"reviews": [
{
"id": "PRR_kwDO...",
"state": "APPROVED",
"prId": "PR_kwDO...",
"prNumber": 123,
"prTitle": "Add feature X",
"prRepo": "owner/repo",
"submittedAt": "2024-06-20T09:15:00Z"
}
]
}3. github.getReviewComments
Fetch inline and general review comments. Returns structured JSON with PR-level grouping, totals, and date range. Filters by repository.
Input:
{
"username": "octocat",
"repos": ["owner/repo"],
"from": "2024-01-01T00:00:00Z",
"to": "2024-12-31T23:59:59Z"
}Note: from and to are optional. If omitted, defaults to last 3 months. repos is required (at least one repository).
Note: The repos parameter is required (at least one repository). Only comments on PRs in the specified repositories will be included. from and to are optional (defaults to last 3 months if omitted).
Output:
{
"userId": "octocat",
"dateRange": {
"from": "2024-01-01T00:00:00Z",
"to": "2024-12-31T23:59:59Z"
},
"totalPRsReviewed": 5,
"totalComments": 12,
"prs": [
{
"prId": "PR_kwDO...",
"prNumber": 123,
"prTitle": "Add feature X",
"prRepo": "owner/repo",
"prUrl": "https://github.com/owner/repo/pull/123",
"prCreatedAt": "2024-06-15T10:30:00Z",
"comments": [
"Consider using a constant here",
"This looks good!"
],
"totalComments": 2
},
{
"prId": "PR_kwDO...",
"prNumber": 124,
"prTitle": "Fix bug Y",
"prRepo": "owner/repo",
"prUrl": "https://github.com/owner/repo/pull/124",
"prCreatedAt": "2024-06-20T14:20:00Z",
"comments": [
"Maybe we should add error handling here"
],
"totalComments": 1
}
]
}Note: All comment bodies are properly JSON-escaped to handle newlines (\n), quotes, and other special characters. The response is 100% valid JSON format.
4. github.getCommentImpact
Analyze whether review comments resulted in code changes. Filters by repository.
Input:
{
"username": "octocat",
"repos": ["owner/repo"],
"from": "2024-01-01T00:00:00Z",
"to": "2024-12-31T23:59:59Z"
}Note: from and to are optional. If omitted, defaults to last 3 months. repos is required (at least one repository).
Output:
{
"impacts": [
{
"commentId": "PRRC_kwDO...",
"prId": "PR_kwDO...",
"hadImpact": true,
"confidence": 0.7,
"evidence": [
"Commit abc1234 modified files after comment (3 files)"
]
}
],
"stats": {
"totalComments": 25,
"totalPRsReviewed": 10,
"totalImpacts": 8
}
}Note:
Only comments with actual impact (commits found after comment) are included in the
impactsarrayThe
statsobject is only included if data is available (i.e., if comments were analyzed)Statistics are calculated from existing data without additional API calls
5. github.getUserComments
Fetch all comments (review comments and issue comments) added by a user for a given repository within a time duration. This tool combines PR review comments and PR issue comments, filters by comment.createdAt and author, normalizes the results, and deduplicates them.
Input:
{
"username": "octocat",
"repos": ["owner/repo"],
"from": "2024-01-01T00:00:00Z",
"to": "2024-12-31T23:59:59Z"
}Note: from and to are optional. If omitted, defaults to last 3 months. repos is required (at least one repository).
Output:
{
"comments": [
{
"id": "PRRC_kwDO...",
"body": "Consider using a constant here",
"createdAt": "2024-06-20T09:15:00Z",
"author": "octocat",
"prId": "PR_kwDO...",
"prNumber": 123,
"prTitle": "Add feature X",
"prRepo": "owner/repo",
"commentType": "review",
"filePath": "src/utils/helper.ts",
"lineNumber": 42,
"reviewId": "PRR_kwDO..."
},
{
"id": "IC_kwDO...",
"body": "Great work! This looks good to me.",
"createdAt": "2024-06-21T14:30:00Z",
"author": "octocat",
"prId": "PR_kwDO...",
"prNumber": 123,
"prTitle": "Add feature X",
"prRepo": "owner/repo",
"commentType": "issue",
"filePath": null,
"lineNumber": null,
"reviewId": null
}
]
}Note: This tool uses GitHub GraphQL APIs directly and filters by comment.createdAt client-side for accurate time-based filtering. It combines both review comments (inline comments from PR reviews) and issue comments (general comments on PRs), normalizes them into a unified format, and deduplicates by comment ID.
6. github.getUserRepoStats
Get comprehensive repository statistics for a user within a time frame. Aggregates all activity metrics including PRs, comments, reviews, and code changes.
Input:
{
"username": "octocat",
"repos": ["owner/repo"],
"from": "2024-01-01T00:00:00Z",
"to": "2024-12-31T23:59:59Z"
}Note: from and to are optional. If omitted, defaults to last 3 months. repos is required (at least one repository).
Output:
{
"stats": {
"username": "octocat",
"repo": "owner/repo",
"timeRange": {
"from": "2024-01-01T00:00:00Z",
"to": "2024-12-31T23:59:59Z"
},
"prs": {
"count": 15,
"merged": 12,
"open": 2,
"closed": 1
},
"comments": {
"total": 45,
"review": 30,
"issue": 15
},
"reviews": {
"total": 20,
"totalPRsReviewed": 15,
"approved": 12,
"changesRequested": 5,
"commented": 3
},
"codeChanges": {
"filesChanged": 120,
"additions": 3500,
"deletions": 800,
"netChange": 2700
}
}
}Note: This tool combines data from multiple sources (getAuthoredPRs, getUserComments, getPRReviews) to provide a complete overview of user activity in a repository. All statistics are filtered by the specified time range and repository.
Important: When comparing with github.getReviewComments:
getUserRepoStats.comments.totalincludes both review comments AND issue comments, whilegetReviewComments.totalCommentsincludes only review commentsgetUserRepoStats.comments.reviewshould matchgetReviewComments.totalCommentswhen both are filtered by the same repositorygetUserRepoStats.reviews.totalPRsReviewedcounts unique PRs reviewed, whilegetUserRepoStats.reviews.totalcounts total review submissions (a user can review the same PR multiple times)
Agent Orchestration
This MCP server is designed for use by AI agents and agent orchestration systems. All tools include:
Detailed descriptions with use cases and examples
Parameter examples in tool schemas
Consistent response formats for easy parsing
Automatic filtering of auto-generated content
Error handling with clear error messages
Quick Reference for Agents
Tool | Best For | Returns |
| Quick overview - Single call for all metrics | Complete stats (PRs, comments, reviews, code changes) |
| PR analysis | Array of PRs with metadata |
| Review participation | Array of reviews with states |
| Comment analysis | Grouped comments by PR |
| Review effectiveness | Impact assessments with confidence scores |
| All comments | Combined review + issue comments |
See AGENT_GUIDE.md for comprehensive agent documentation, workflows, and best practices.
See agent-examples.json for real-world agent usage examples and workflows.
Example Agent Call
Here's an example of how an AI agent might use this MCP server:
// Agent workflow for collecting data for employee performance analysis
// 1. Get all PRs authored by employee in Q1 2024
const prs = await mcp.callTool('github.getAuthoredPRs', {
username: 'johndoe',
repos: ['company/main-repo'],
from: '2024-01-01T00:00:00Z',
to: '2024-03-31T23:59:59Z'
});
// 2. Get PR reviews to assess code review participation
const reviews = await mcp.callTool('github.getPRReviews', {
username: 'johndoe',
repos: ['company/main-repo'],
from: '2024-01-01T00:00:00Z',
to: '2024-03-31T23:59:59Z'
});
// 3. Analyze review comment impact
const impacts = await mcp.callTool('github.getCommentImpact', {
username: 'johndoe',
repos: ['company/main-repo'],
from: '2024-01-01T00:00:00Z',
to: '2024-03-31T23:59:59Z'
});
// 4. Get all comments by employee for a specific repository
const comments = await mcp.callTool('github.getUserComments', {
username: 'johndoe',
repos: ['company/important-repo'],
from: '2024-01-01T00:00:00Z',
to: '2024-03-31T23:59:59Z'
});
// 6. Get comprehensive repository statistics
const repoStats = await mcp.callTool('github.getUserRepoStats', {
username: 'johndoe',
repos: ['company/important-repo'],
from: '2024-01-01T00:00:00Z',
to: '2024-03-31T23:59:59Z'
});
// Returns aggregated stats: PRs, comments, reviews, code changesDesign Decisions
GraphQL over REST
More efficient for nested data (reviews, comments, files)
Single request for complex queries
Better type safety
Cursor-based Pagination
Handles large datasets efficiently
No duplicate results
Predictable performance
Normalized DTOs
Consistent data structure for agents
Hides GitHub API complexity
Easy to extend
Rate Limit Handling
Automatic detection and waiting
Request ID logging for debugging
Graceful error messages
Case-Insensitive Usernames
User-friendly (handles @ prefix, case variations)
Normalizes to lowercase for consistency
Error Handling
The server handles:
Authentication errors: Clear messages about GITHUB_TOKEN
Rate limits: Automatic waiting and informative errors
Invalid timestamps: Validation with helpful error messages
Missing data: Graceful defaults (null, empty arrays)
Extensibility
The architecture supports easy extension:
New Tools: Add to
tools.tsand register inserver.tsNew Queries: Add GraphQL queries to
queries.tsNew Mappers: Extend
mapper.tswith new DTOsCaching: Add caching layer in
client.ts(extension point)
Development
# Build
npm run build
# Watch mode
npm run dev
# Run
npm startAgent Integration Examples
Example 1: Performance Review Data Collection
// Get comprehensive stats in one call (from/to optional, defaults to last 3 months)
const stats = await mcp.callTool('github.getUserRepoStats', {
username: 'johndoe',
repos: ['company/main-repo'],
from: '2024-01-01T00:00:00Z',
to: '2024-12-31T23:59:59Z'
});
// Returns: Complete metrics that can be used for performance reviewsExample 2: Code Review Quality Assessment
// Step 1: Get review activity
const reviews = await mcp.callTool('github.getPRReviews', {
username: 'reviewer-name',
repos: ['company/main-repo'],
from: '2024-01-01T00:00:00Z',
to: '2024-12-31T23:59:59Z'
});
// Step 2: Measure review impact
const impact = await mcp.callTool('github.getCommentImpact', {
username: 'reviewer-name',
repos: ['company/main-repo'],
from: '2024-01-01T00:00:00Z',
to: '2024-12-31T23:59:59Z'
});
// Calculate effectiveness: impact.stats.totalImpacts / impact.stats.totalCommentsExample 3: Multi-Repository Analysis
// Option 1: Get stats for multiple repos separately
const repos = ['company/repo1', 'company/repo2'];
const results = await Promise.all(
repos.map(repo =>
mcp.callTool('github.getUserRepoStats', {
username: 'developer-name',
repos: [repo],
from: '2024-01-01T00:00:00Z',
to: '2024-12-31T23:59:59Z'
})
)
);
// Option 2: Get stats for multiple repos in one call (aggregated)
const aggregatedStats = await mcp.callTool('github.getUserRepoStats', {
username: 'developer-name',
repos: ['company/repo1', 'company/repo2'],
from: '2024-01-01T00:00:00Z',
to: '2024-12-31T23:59:59Z'
});For more examples and workflows, see AGENT_GUIDE.md.
License
MIT
Available Tools
6 toolsgithub.getAuthoredPRsA
Fetch all pull requests authored by a given user within a time range. Returns PRs with metadata including state (OPEN/MERGED/CLOSED), creation/merge dates, code statistics (files changed, additions, deletions), and repository information. Optionally filter by specific repositories. Automatically filters out auto-generated PRs (e.g., backmerge PRs). Use this tool to analyze a user's code contribution activity.
Example use cases:
Assess developer productivity by counting PRs authored in a time period
Analyze code contribution trends over time
Get detailed metrics for performance reviews
Track PR merge rates and code change statistics
Returns: Array of PR objects with id, repo, title, createdAt, mergedAt, state, filesChanged, additions, deletions
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | GitHub username (case-insensitive, @ prefix optional). Examples: "octocat", "@octocat", "JohnDoe" | |
| repos | Yes | Array of repositories in owner/repo format (required, at least one). Example: ["owner/repo1", "owner/repo2"] | |
| from | No | Optional: Start timestamp in ISO 8601 format. Must be before "to" parameter if provided. If omitted, uses last 3 months. Example: "2024-01-01T00:00:00Z" | |
| to | No | Optional: End timestamp in ISO 8601 format. Must be after "from" parameter if provided. If omitted, uses last 3 months. Example: "2024-12-31T23:59:59Z" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does well by specifying the return format ('Array of PR objects with id, repo, title...'), mentioning automatic filtering of auto-generated PRs, and indicating time range defaults ('If omitted, uses last 3 months'). However, it doesn't mention potential limitations like rate limits, authentication requirements, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, behavioral details, usage guidance, and output specification. While somewhat lengthy, every section adds value. The example use cases could potentially be more concise, but they provide helpful context for tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description does a good job covering behavior, use cases, and return format. It specifies what data is returned and includes important behavioral details like auto-filtering and time defaults. The main gap is lack of information about authentication, rate limits, or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all four parameters. The description adds minimal parameter semantics beyond the schema - it mentions 'Optionally filter by specific repositories' which is already clear in the schema. The description focuses more on use cases and outputs rather than parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('fetch all pull requests authored by a given user within a time range') and distinguishes it from sibling tools by specifying it's for analyzing user code contribution activity rather than reviews, comments, or repo stats. It explicitly mentions filtering out auto-generated PRs, which further differentiates its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance with 'Use this tool to analyze a user's code contribution activity' and lists four concrete example use cases (assess productivity, analyze trends, performance reviews, track metrics). This clearly indicates when to use this tool versus alternatives like review or comment analysis tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github.getCommentImpactA
Analyze whether review comments resulted in subsequent code changes. Examines PR timeline data to determine if commits were made after comments were submitted. Returns impact assessment with confidence scores (0.0-1.0) and evidence (e.g., "Commit abc1234 modified files after comment"). Only includes comments with actual impact (commits found after comment). Includes statistics: totalComments, totalPRsReviewed, totalImpacts. Filters by repository. Use this tool to measure the effectiveness of code reviews.
Example use cases:
Measure review impact (how often comments lead to code changes)
Assess review quality and influence
Track review effectiveness metrics
Identify high-impact reviewers
Returns: Object with impacts array (commentId, prId, hadImpact, confidence, evidence) and optional stats object (totalComments, totalPRsReviewed, totalImpacts)
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | GitHub username (case-insensitive, @ prefix optional). Examples: "octocat", "@octocat" | |
| repo | Yes | Repository in owner/repo format. Required - only comments for PRs in this repository will be analyzed. Example: "owner/repo" | |
| from | Yes | Start timestamp in ISO 8601 format. Example: "2024-01-01T00:00:00Z" | |
| to | Yes | End timestamp in ISO 8601 format. Example: "2024-12-31T23:59:59Z" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well at disclosing key behaviors: it explains what the tool examines (PR timeline data), what it returns (impact assessment with confidence scores and evidence), filtering behavior ('Only includes comments with actual impact'), and statistical outputs. It doesn't mention rate limits, authentication requirements, or potential data limitations, but provides substantial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose in the first sentence. The use cases and return format sections are helpful additions, though the 'Returns:' section could be more integrated. Some redundancy exists between the description text and the explicit 'Returns:' statement, but overall it's well-structured with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no annotations, and no output schema, the description provides good contextual completeness. It explains the tool's purpose, usage context, behavioral characteristics, and return format in detail. The main gap is the lack of output schema, but the description compensates by explicitly describing the return structure. Some edge cases (like what happens with no matching data) aren't addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage with clear parameter documentation. The description doesn't add any meaningful parameter semantics beyond what's already in the schema - it mentions 'Filters by repository' which is already covered in the repo parameter description. With high schema coverage, the baseline of 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Analyze whether review comments resulted in subsequent code changes' with specific verbs (analyze, examine, determine) and resources (review comments, PR timeline data, code changes). It distinguishes from siblings like 'github.getReviewComments' (which just retrieves comments) by focusing on impact analysis rather than data retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: 'Use this tool to measure the effectiveness of code reviews' with specific use cases listed (measure review impact, assess review quality, track metrics, identify high-impact reviewers). However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github.getPRReviewsA
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
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | GitHub username (case-insensitive, @ prefix optional, required). Examples: "octocat", "@octocat" | |
| repos | Yes | Array of repositories in owner/repo format (required, at least one). Only reviews for these repositories will be returned. Example: ["owner/repo1", "owner/repo2"] | |
| from | No | Optional: Start timestamp in ISO 8601 format. If omitted, uses last 3 months. Example: "2024-01-01T00:00:00Z" | |
| to | No | Optional: End timestamp in ISO 8601 format. If omitted, uses last 3 months. Example: "2024-12-31T23:59:59Z" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it describes the return format (array of review objects with specific fields), filtering behavior (auto-filters out reviews on auto-generated PRs), and time range defaults (last 3 months if omitted). It doesn't mention rate limits or authentication needs, but covers most essential aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core functionality, followed by use cases and return details. The example use cases section is helpful but slightly lengthens the text, though each sentence earns its place by clarifying application scenarios.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, no annotations, and no output schema, the description does well by explaining behavior, filtering, defaults, and return format. It could be more complete by mentioning potential limitations like pagination or error cases, but it covers the essentials for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all parameters. The description adds no additional parameter semantics beyond what's in the schema, maintaining the baseline score of 3 for adequate but no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('fetch all PR reviews submitted by a user') and resources ('filtered by repository'), and distinguishes it from siblings by focusing on reviews rather than authored PRs, comments, or stats. It explicitly mentions what it returns and what it filters out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('to assess code review participation and review quality') and includes example use cases, but it doesn't explicitly state when not to use it or name alternatives among sibling tools like github.getReviewComments or github.getUserComments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github.getReviewCommentsA
Fetch all inline and general review comments authored by a user within a time range, filtered by repository. Returns structured JSON with PR-level grouping, total PRs reviewed, total comments, user ID, date range, and for each PR: array of comment bodies and total comments count. Automatically filters out auto-generated comments and comments on auto-created PRs. All comment bodies are properly JSON-escaped. Use this tool to analyze review comment quality and quantity.
Example use cases:
Count review comments to assess review thoroughness
Analyze comment patterns across different PRs
Track review engagement metrics
Extract review feedback for analysis
Returns: Object with userId, dateRange, totalPRsReviewed, totalComments, and array of PR objects (each with prId, prNumber, prTitle, prRepo, prUrl, prCreatedAt, comments array, totalComments)
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | GitHub username (case-insensitive, @ prefix optional). Examples: "octocat", "@octocat" | |
| repo | Yes | Repository in owner/repo format. Required - only comments for PRs in this repository will be returned. Example: "owner/repo" | |
| from | Yes | Start timestamp in ISO 8601 format. Example: "2024-01-01T00:00:00Z" | |
| to | Yes | End timestamp in ISO 8601 format. Example: "2024-12-31T23:59:59Z" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does this well. It describes important behavioral traits beyond basic functionality: automatic filtering of auto-generated comments and comments on auto-created PRs, JSON-escaping of comment bodies, and the structured grouping of results. It doesn't mention rate limits, authentication requirements, or pagination behavior, preventing a perfect score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core functionality in the first sentence. The example use cases and return format details are useful additions, though the return format section could be slightly more concise. Every sentence adds value, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description provides substantial context: clear purpose, usage guidance, behavioral details, and a detailed explanation of the return structure. It covers the complexity of filtering, processing, and formatting results well. The main gap is the lack of explicit mention of authentication or rate limiting considerations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all four parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, but it does reinforce the repository filtering requirement in the purpose statement. This meets the baseline expectation when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('fetch', 'filtered by', 'returns') and resources ('inline and general review comments', 'user', 'time range', 'repository'). It distinguishes from siblings like github.getUserComments by specifying it's for review comments only, not all comments, and from github.getPRReviews by focusing on comments rather than review statuses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('to analyze review comment quality and quantity') and includes example use cases that illustrate appropriate scenarios. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools, which would be needed for a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github.getUserCommentsA
Fetch all comments (review comments and issue comments) added by a user for a given repository within a time duration. Combines PR review comments (inline comments from PR reviews) and PR issue comments (general comments on PRs), normalizes them into a unified format, and deduplicates by comment ID. Filters by comment.createdAt and author. Automatically filters out auto-generated comments and comments on auto-created PRs. Use this tool to get a complete view of all user comments in a repository.
Example use cases:
Get all comments by a user in a repository for analysis
Track comment activity and engagement
Analyze comment patterns and types
Extract all user feedback for sentiment analysis
Returns: Array of comment objects with id, body, createdAt, author, prId, prNumber, prTitle, prRepo, commentType (review/issue), filePath, lineNumber, reviewId
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | GitHub username (case-insensitive, @ prefix optional). Examples: "octocat", "@octocat" | |
| repo | Yes | Repository in owner/repo format. Required - only comments for PRs in this repository will be returned. Example: "owner/repo" | |
| from | Yes | Start timestamp in ISO 8601 format. Example: "2024-01-01T00:00:00Z" | |
| to | Yes | End timestamp in ISO 8601 format. Example: "2024-12-31T23:59:59Z" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it normalizes comments into a unified format, deduplicates by comment ID, filters by createdAt and author, and automatically filters out auto-generated comments and comments on auto-created PRs. It also specifies the return format in detail. This covers most critical aspects, though it lacks explicit mention of potential rate limits or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized, with a clear purpose statement followed by behavioral details and use cases. Every sentence adds value, such as explaining the combination of comment types and filtering logic. It could be slightly more concise by integrating the return format into the main flow, but overall it is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (fetching and processing multiple comment types) and the lack of annotations and output schema, the description does a good job of providing necessary context. It explains the tool's behavior, filtering logic, and return format in detail. However, it could improve by addressing potential limitations like pagination or large result sets, which would enhance completeness for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, meaning the input schema already documents all parameters thoroughly. The description does not add significant meaning beyond the schema, as it only mentions filtering by 'comment.createdAt and author' without elaborating on parameter usage or interactions. The baseline score of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Fetch all comments'), resource ('added by a user for a given repository'), and scope ('within a time duration'). It distinguishes from siblings by specifying it combines PR review comments and PR issue comments into a unified format with deduplication, unlike tools like github.getReviewComments or github.getPRReviews which likely focus on specific comment types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('to get a complete view of all user comments in a repository') and includes example use cases that illustrate appropriate scenarios. However, it does not explicitly state when not to use it or name alternatives among the sibling tools, such as github.getReviewComments for only review comments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github.getUserRepoStatsA
Get comprehensive repository statistics for a user within a time frame. Aggregates all activity metrics in a single call: PRs authored (with state breakdown: merged/open/closed), comments (total with review/issue breakdown), PR reviews (total with state breakdown: approved/changesRequested/commented, plus unique PRs reviewed), and code changes (files changed, additions, deletions, net change). This is the most efficient tool for getting a complete overview of user activity in a repository. Combines data from multiple sources internally.
Example use cases:
Get complete activity overview for performance reviews
Generate comprehensive developer metrics reports
Compare user activity across different repositories
Track overall contribution metrics in a single call
Returns: Object with stats containing username, repo, timeRange, prs (count, merged, open, closed), comments (total, review, issue), reviews (total, totalPRsReviewed, approved, changesRequested, commented), codeChanges (filesChanged, additions, deletions, netChange)
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | GitHub username (case-insensitive, @ prefix optional). Examples: "octocat", "@octocat" | |
| repo | Yes | Repository in owner/repo format. Required - statistics will be calculated only for this repository. Example: "owner/repo" | |
| from | Yes | Start timestamp in ISO 8601 format. Example: "2024-01-01T00:00:00Z" | |
| to | Yes | End timestamp in ISO 8601 format. Example: "2024-12-31T23:59:59Z" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior by detailing what metrics are aggregated (e.g., PRs with state breakdown, comments with review/issue breakdown, reviews with state breakdown, code changes) and mentions it 'combines data from multiple sources internally,' adding useful context. However, it lacks information on potential limitations like rate limits, error handling, or authentication needs, which slightly reduces transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded, starting with a clear purpose statement followed by detailed metrics and use cases. It efficiently conveys comprehensive information without unnecessary fluff. However, the inclusion of example use cases and a detailed returns section, while helpful, adds some length that could be slightly trimmed for optimal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (aggregating multiple metrics) and the absence of annotations and output schema, the description does a good job of providing context. It details the returned stats comprehensively, covering all key metrics. However, it could be more complete by addressing potential behavioral aspects like performance implications or data freshness, which would enhance usability for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, providing clear details for all four parameters (username, repo, from, to). The description does not add any additional semantic meaning beyond what the schema already specifies, such as format nuances or constraints. According to the rules, with high schema coverage (>80%), the baseline score is 3, as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get comprehensive repository statistics for a user within a time frame') and distinguishes it from sibling tools by emphasizing it's 'the most efficient tool for getting a complete overview' and 'combines data from multiple sources internally.' It explicitly mentions metrics like PRs, comments, reviews, and code changes, making the purpose highly specific and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives by stating 'This is the most efficient tool for getting a complete overview of user activity in a repository' and listing example use cases like performance reviews and developer metrics reports. It implies alternatives (sibling tools like github.getAuthoredPRs) are for more specific, granular queries, making the context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v1.0.0- First observed
github.getAuthoredPRs - First observed
github.getCommentImpact - First observed
github.getPRReviews - First observed
github.getReviewComments - First observed
github.getUserComments - First observed
github.getUserRepoStats
TDQS
Most tools have distinct purposes focused on different aspects of GitHub activity (PRs authored, reviews, comments, stats), but there is some overlap between getCommentImpact and getReviewComments/getUserComments in analyzing comments. The descriptions help clarify differences, but an agent might occasionally confuse which tool to use for comment-related analysis.
All tools follow a consistent verb_noun pattern with 'get' as the verb (e.g., getAuthoredPRs, getCommentImpact, getPRReviews). The naming is uniform and predictable, using camelCase throughout without any deviations or mixed conventions.
With 6 tools, the count is reasonable for a GitHub analytics server, but it feels slightly thin for comprehensive coverage. The tools focus on user activity metrics, missing broader operations like repository management or issue handling, which might limit scope. However, each tool serves a clear purpose within this niche.
The toolset covers user-centric analytics well (e.g., PRs, reviews, comments, stats), but there are notable gaps for a GitHub server, such as no create, update, or delete operations, and missing tools for repositories, issues, or code search. This limits agents to read-only analysis without full lifecycle coverage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Screens public GitHub repos and PRs to generate risk maps, findings, and merge-readiness signals.
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
The open-source talent graph for humans and AI agents. Find developers.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform comprehensive GitHub pull request code reviews, including analysis of code patterns, complexity, and security issues, while managing review comments and ensuring compliance with team coding standards.2MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to access and analyze GitHub profile data, providing insights on repositories, commit history, coding patterns, and generating portfolio summaries for developers and recruiters.82MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to search and retrieve context from GitHub issues, pull requests, releases, and documentation using hybrid semantic search and time-ordered activity scans.103Apache 2.0
- AlicenseBqualityBmaintenanceEnables AI agents to interact with GitHub (search repos, read files, issues, PRs), analyze code for quality and issues, and manage tasks with priority sorting.7MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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