GitHub MCP Server
Provides tools for listing pull requests, getting commit details, and comparing changes on GitHub repositories.
Click on "Deploy 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 Serverlist open pull requests in facebook/react"
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 Model Context Protocol (MCP) server for GitHub operations. This server provides tools for listing PRs, getting commit details, and comparing changes - useful for understanding what changed in a build or investigating test failures.
Installation
npm install -g @bugzy-ai/github-mcp-serverOr use with npx:
npx @bugzy-ai/github-mcp-serverRelated MCP server: mcp-server-github
Configuration
Set the GITHUB_TOKEN environment variable with a token that has repo scope:
export GITHUB_TOKEN=ghp_your_token_hereAvailable Tools
github_list_prs
List pull requests in a repository with optional filters.
Parameters:
owner(required): Repository ownerrepo(required): Repository namestate(optional): Filter by state - "open", "closed", or "all" (default: "all")base(optional): Filter by base branchsort(optional): Sort by "created", "updated", "popularity", or "long-running"direction(optional): Sort direction - "asc" or "desc"per_page(optional): Results per page (max 100)page(optional): Page number
github_get_pr
Get detailed information about a specific pull request.
Parameters:
owner(required): Repository ownerrepo(required): Repository namepull_number(required): Pull request number
github_list_commits
List commits on a branch with optional date range filters.
Parameters:
owner(required): Repository ownerrepo(required): Repository namesha(optional): Branch name, tag, or commit SHAsince(optional): Only commits after this date (ISO 8601)until(optional): Only commits before this date (ISO 8601)per_page(optional): Results per page (max 100)page(optional): Page number
github_get_commit
Get detailed information about a specific commit.
Parameters:
owner(required): Repository ownerrepo(required): Repository nameref(required): Commit SHA, branch name, or tag name
github_compare_commits
Compare two commits, branches, or tags.
Parameters:
owner(required): Repository ownerrepo(required): Repository namebase(required): Base ref (branch, tag, or SHA)head(required): Head ref (branch, tag, or SHA)per_page(optional): Results per page (max 100)page(optional): Page number
MCP Configuration
Add to your .mcp.json:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@bugzy-ai/github-mcp-server"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}License
Apache-2.0
Available Tools
5 toolsgithub_compare_commitsB
Compare two commits, branches, or tags to see what changed between them
| Name | Required | Description | Default |
|---|---|---|---|
| base | Yes | Base ref (branch, tag, or SHA) | |
| head | Yes | Head ref (branch, tag, or SHA) | |
| page | No | Page number | |
| repo | Yes | Repository name | |
| owner | Yes | Repository owner (organization or username) | |
| per_page | No | Results per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic comparison operation and says nothing about the response shape (commit list vs. file diffs vs. stats), pagination behavior, or access requirements. 'What changed' is left ambiguous, which is a significant gap for a diff-oriented tool.
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?
A single 13-word sentence with the verb front-loaded and zero filler. Every word earns its place, and the scope of what is compared (commits, branches, tags) is stated immediately.
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?
With no annotations and no output schema, the description should disclose what the response contains — the entire purpose of a compare call is the diff representation — and it does not. Parameter coverage is complete, so the tool is callable, but an agent cannot anticipate whether results come back as a commit list, file patches, statistics, or some combination, nor how pagination affects the result.
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 all six parameters are already documented in the schema, including base/head as 'ref (branch, tag, or SHA)'. The tool description's mention that base/head can be commits, branches, or tags slightly reinforces the schema but adds little new meaning. Baseline 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 uses a specific verb ('Compare') with concrete resources (commits, branches, tags) and an outcome ('see what changed between them'). The verb differentiates it from the sibling list/get tools, though no sibling is named explicitly, so it stops short of maximal distinction. Clear and unambiguous overall.
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?
Usage is implied: use this when you want to diff two refs. However, there is no explicit when-to-use, when-not-to-use, or mention of alternatives such as github_list_commits or github_get_commit, which an agent might confuse with this tool when trying to inspect changes between refs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_get_commitA
Get detailed information about a specific commit including file changes and stats
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Commit SHA, branch name, or tag name | |
| repo | Yes | Repository name | |
| owner | Yes | Repository owner (organization or username) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description conveys a read-only 'Get' operation and clarifies the return scope ('file changes and stats'), which is useful given there are no annotations. However, it does not disclose potential limitations like large diffs, auth requirements, or response truncation despite carrying the full burden without annotations.
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 a single, front-loaded sentence that states the main purpose and the key output detail ('file changes and stats') without any filler. Every part contributes meaning.
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?
The tool is simple (3 required parameters, no nested objects, no output schema), and the description adequately summarizes what the tool returns. It could mention the response format or note about large diffs, but for this low-complexity tool, the missing details are minor.
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 coverage is 100%, so the schema already documents all three parameters (owner, repo, ref) including the ref formats. The description does not add parameter-specific detail beyond what the schema provides, so the baseline score of 3 applies.
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 states a specific verb and resource ('Get detailed information about a specific commit') and adds distinguishing detail ('including file changes and stats'). This clearly separates it from sibling tools like list_commits (which lists) and compare_commits (which compares).
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 phrase 'specific commit' implies this tool is for retrieving one commit's details rather than listing or comparing commits, but no explicit when-to-use or when-not-to-use guidance is given. The agent must infer usage context from the name and wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_get_prA
Get detailed information about a specific pull request including files changed, commits, and review status
| Name | Required | Description | Default |
|---|---|---|---|
| repo | Yes | Repository name | |
| owner | Yes | Repository owner (organization or username) | |
| pull_number | Yes | Pull request number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It communicates that the operation is a read-style retrieval and indicates the kind of data returned, but it does not mention authentication needs, rate limits, error behavior, or whether the files/commits lists are paginated.
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 a single, focused sentence that front-loads the core purpose and then lists the key content areas. There is no filler or redundant repetition of schema fields.
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 simple get-by-identifier tool with self-explanatory required parameters and no output schema, the description gives enough context about what will be returned. It lacks some behavioral context such as auth requirements and pagination, but it is otherwise sufficient for correct invocation.
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%, with owner, repo, and pull_number all adequately described in the schema. The tool description adds no parameter-level detail beyond that, so the baseline score of 3 is appropriate.
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 identifies the operation: getting detailed information about one specific pull request. It lists concrete result areas (files changed, commits, review status) and is distinct from the sibling github_list_prs, which is about listing PRs.
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 implies when to use it: when you need details about a known pull request rather than a list of PRs. However, it does not explicitly name alternatives like github_list_prs or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_list_commitsB
List commits on a branch with optional date range filters
| Name | Required | Description | Default |
|---|---|---|---|
| sha | No | Branch name, tag, or commit SHA to list commits from | |
| page | No | Page number | |
| repo | Yes | Repository name | |
| owner | Yes | Repository owner (organization or username) | |
| since | No | Only commits after this date (ISO 8601 format) | |
| until | No | Only commits before this date (ISO 8601 format) | |
| per_page | No | Results per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention pagination behavior, default branch behavior when sha is omitted, result ordering, or how date filters apply. These are notable gaps for a tool with no annotation-based safety or behavior hints.
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 a single, front-loaded sentence with no filler. Every word contributes to communicating the core purpose and the key optional capability.
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 7 parameters and no output schema, the description is thin. It omits key operational context such as default branch handling, pagination defaults, response shape, and the relationship between since/until filters. The schema covers parameter names but not the full call context.
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 documents all parameters well. The description adds only the idea of 'branch' and 'date range filters', which mostly restates schema info and does not meaningfully deepen parameter understanding beyond the structured definitions.
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 a specific action ('List commits') and resource ('on a branch') with optional date filters, which distinguishes it from siblings like PR listing and single-commit retrieval. However, it says 'on a branch' while the sha parameter explicitly accepts tags and commit SHAs, so the scope is slightly narrower than reality.
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 implies this is the tool for listing commit history, and the optional date range filters hint at a use case. But it does not explicitly state when to prefer this over siblings like github_get_commit or github_compare_commits, nor does it mention that listing the default branch requires no sha.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_list_prsA
List pull requests in a repository with optional filters for state, base branch, and sorting
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Filter by base branch (e.g., "main") | |
| page | No | Page number | |
| repo | Yes | Repository name | |
| sort | No | Sort by field | updated |
| owner | Yes | Repository owner (organization or username) | |
| state | No | Filter by PR state | all |
| per_page | No | Results per page (max 100) | |
| direction | No | Sort direction | desc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It establishes that this is a read/list operation, but it does not mention pagination behavior, result shape, sorting defaults, or any rate-limit or scoping caveats. The five-word core leaves significant behavioral context undisclosed.
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 a single efficient sentence that front-loads the core operation and then lists the key filter dimensions. There is no filler, repetition, or unnecessary detail.
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 list operation, the description plus a fully covered input schema gives the agent the essentials: required owner/repo and available filters. However, with no output schema and no mention of pagination or return contents, some context is missing, and the absence of any relationship to siblings leaves the tool somewhat contextually incomplete.
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 input schema fully documents owner, repo, state, sort, direction, page, per_page, and base. The description adds a high-level grouping of filters (state, base branch, sorting) but no syntax or meaning beyond the schema, so the baseline of 3 applies.
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 uses a specific verb ('List'), a clear resource ('pull requests in a repository'), and names the optional filters (state, base branch, sorting). This distinguishes it from siblings like github_get_pr (single PR) and github_list_commits (commits) even without explicitly naming them.
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 implies when to use it: whenever you need a list of pull requests with optional filtering. However, it provides no explicit guidance on when not to use it or when a sibling like github_get_pr would be more appropriate, so usage guidance is only implied rather than stated.
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.
5 tool updates
v0.1.0- First observed
github_compare_commits - First observed
github_get_commit - First observed
github_get_pr - First observed
github_list_commits - First observed
github_list_prs
TDQS
Scored across 5 tools
Each tool targets a clearly distinct resource and action: listing PRs, getting PR details, listing commits, getting commit details, and comparing refs. Even list_commits vs compare_commits are distinguishable by purpose, one showing branch history and the other showing changes between two refs.
All tool names follow the consistent pattern github_<verb>_<noun>, using snake_case throughout. The verbs list/get/compare are predictable and match the operation each tool performs.
Five tools is a well-scoped set for a focused GitHub read-only server covering PRs and commits. Each tool has a clear purpose and none feel redundant or unnecessary.
The set provides solid read-only coverage for exploring pull requests, commits, and diffs. Minor gaps exist, such as no direct branch listing or repository-level search, but these can be worked around using compare_commits and the included PR/commit detail endpoints.
Maintenance
Related MCP Connectors
Access the GitHub API, enabling file operations, repository management, search functionality, and…
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Screens public GitHub repos and PRs to generate risk maps, findings, and merge-readiness signals.
Ask any GitHub repository a question. Get source-backed answers.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables access to GitHub repositories and data through the GitHub API. Supports retrieving repositories, issues, pull requests, and searching code across GitHub with authentication via personal access tokens.-
- FlicenseAqualityCmaintenanceEnables interaction with GitHub repositories, issues, pull requests, code search, branches, and GitHub Actions workflows.820 npm-
- FlicenseAqualityDmaintenanceEnables natural-language queries about public GitHub repositories, including issues, pull requests, repo metadata, and READMEs, via the GitHub API.5-
- FlicenseAqualityDmaintenanceEnables analysis of GitHub Pull Requests, including details, diff, file lists, and review tracking.3-