About Github MCP Server
Github MCP Server connects LLMs to the GitHub API through MCP. It is intended for users who need to search GitHub or inspect issues and pull requests from an MCP client, with tools covering common repository queries.
Key features
- 01Search repositories, issues, and commits
- 02Search code, users, topics, and labels
- 03List repository issues and pull requests
- 04Retrieve issue and pull request details
Use cases
- 01Find GitHub repositories by query
- 02Search repository code or commits
- 03Review issues and pull requests in a repository
- 04Retrieve details for a specific issue or pull request
MCP support
The MCP server exposes GitHub REST API search, listing, and detail-retrieval tools to MCP clients. A GitHub Personal Access Token is required for configuration.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEGithub MCP Server
A Model Context Protocol Server for Github.
Provides integration with Github through MCP, allowing LLMs to interact with it.
Installation
Manual Installation
-
Create or get access token for your Github Account: Guide
-
Add server config to Claude Desktop:
- MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
- Windows: Check this Guide
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "github-mcp-server"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your_personal_github_access_token"
}
}
}
}
Components
Tools
-
search_repositories: Search GitHub for a repository.- Required inputs:
query(string): The query to search for repository.page(number, default: 30, max: 100): Page number for pagination.per_page(number, default: 30, max: 100): Number of results per page.
- Required inputs:
-
search_issues: Search issues from a repository.- Required inputs:
query(string): The query to search for repository.page(number, default: 1): Page number for pagination.per_page(number, default: 30, max: 100): Number of results per page.order(optional string, default:desc): Sort of order (ascordesc).sort(optional string, default:best match): Sort field (can be one of:comments,reactions,reactions-+1,reactions--1,reactions-smile,reactions-thinking_face,reactions-heart,reactions-tada,interactions,createdorupdated).
- Required inputs:
-
search_commits: Search commits from a repository.- Required inputs:
query(string): The query to search for repository.page(number, default: 1): Page number for pagination.per_page(number, default: 30, max: 100): Number of results per page.order(optional string, default:desc): Sort of order (ascordesc).sort(optional string, default:best match): Sort field (can be one of:committer-dateorauthor-date).
- Required inputs:
-
search_code: Search code from a repository.- Required inputs:
query(string): The query to search for repository.page(number, default: 1): Page number for pagination.per_page(number, default: 30, max: 100): Number of results per page.
- Required inputs:
-
search_users: Search users from a repository.- Required inputs:
query(string): The query to search for repository.page(number, default: 1): Page number for pagination.per_page(number, default: 30, max: 100): Number of results per page.order(optional string, default:desc): Sort of order (ascordesc).sort(optional string, default:best match): Sort field (can be one of:followers,repositoriesorjoined).
- Required inputs:
-
search_topics: Search topics.- Required inputs:
query(string): The query to search for repository.page(number, default: 1): Page number for pagination.per_page(number, default: 30, max: 100): Number of results per page.
- Required inputs:
-
search_labels: Search labels in a repository.- Required inputs:
query(string): The query to search for repository.page(number, default: 1): Page number for pagination.per_page(number, default: 30, max: 100): Number of results per page.order(optional string, default:desc): Sort of order (ascordesc).sort(optional string, default:best match): Sort field (can be one of:createdorupdated).
- Required inputs:
-
list_repositories_issues: List issues from a repository.- Required inputs:
owner(string): The owner of the repository.repo(string): The repository name.page(optional number, default: 1): Page number for pagination.per_page(optional number, default: 30, max: 100): Number of results per page.direction(optional string, default:desc): Direction of sort (ascordesc).sort(optional string, default:created): Sort field (can be one of:created,commentsorupdated).since(optional string): Results last updated after the given time (ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.).labels(optional string): Comma separated label names. Example: bug,ui,@high.milestone(optional string): Milestone number.assignee(optional string): Name of assignee user (*for all).creator(optional string): The user that created the issue. (*for all).mentioned(optional string): A user that's mentioned in the issue.
- Required inputs:
-
get_issue: Get an issue from a repository.- Required inputs:
owner(string): The owner of the repository.repo(string): The repository name.issue_number(number): The issue number.
- Required inputs:
-
list_repositories_pull_requests: List pull requests from a repository.- Required inputs:
owner(string): The owner of the repository.repo(string): The repository name.page(optional number, default: 1): Page number for pagination.per_page(optional number, default: 30, max: 100): Number of results per page.direction(optional string, default:desc): Direction of sort (ascordesc).sort(optional string, default:created): Sort field (can be one of:created,popularity,long-runningorupdated).head(optional string): Filter pulls by head user or head organization and branch name in the format of user:ref-name or organization:ref-name (For example: github:new-script-format or octocat:test-branch).base(optional string): Filter pulls by base branch name. (For example: gh-pages).
- Required inputs:
-
get_pull_request: Get a pull request from a repository.- Required inputs:
owner(string): The owner of the repository.repo(string): The repository name.pull_request_number(number): The pull request number.
- Required inputs:
Usage examples
Some example prompts you can use to interact with Github:
- "modelcontextprotocol" → execute the
search_repositoriestool to find repositories where modelcontextprotocol mentioned. - "What is the 739 issue on modelcontextprotocol servers repo" → execute the
get_issuetool to find 739 issue from modelcontextprotocol servers repo. - "What is the 717 PR on modelcontextprotocol servers repo" → execute the
get_pull_requesttool to find 717 PR from modelcontextprotocol servers repo.
Development
- Install dependencies:
pnpm install
- Configure Github Access token in
.env:
GITHUB_PERSONAL_ACCESS_TOKEN=<your_personal_github_access_token>
- Run locally with watch:
pnpm dev
- Build the server:
pnpm build
- Local debugging with inspector:
pnpm inspector
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.