MCP Server for the GitHub API
Enabling file operations, repository management, search functionality, and more.
Features
- Automatic Branch Creation: When creating/updating files or pushing changes, branches are automatically created if they don't exist.
- Comprehensive Error Handling: Clear error messages for common issues.
- Git History Preservation: Operations maintain proper Git history without force pushing.
- Batch Operations: Support for both single-file and multi-file operations.
- Advanced Search: Support for searching code, issues/PRs, and users.
create_or_update_file
Create or update a single file in a repository.
Inputs:
owner
(string): Repository owner (username or organization)
repo
(string): Repository name
path
(string): Path where to create/update the file
content
(string): Content of the file
message
(string): Commit message
branch
(string): Branch to create/update the file in
sha
(optional string): SHA of file being replaced (for updates)
Returns: File content and commit details
push_files
Push multiple files in a single commit.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
branch
(string): Branch to push to
files
(array): Files to push, each with path and content
message
(string): Commit message
Returns: Updated branch reference
search_repositories
Search for GitHub repositories.
Inputs:
query
(string): Search query
page
(optional number): Page number for pagination
perPage
(optional number): Results per page (max 100)
Returns: Repository search results
create_repository
Create a new GitHub repository.
Inputs:
name
(string): Repository name
description
(optional string): Repository description
private
(optional boolean): Whether repo should be private
autoInit
(optional boolean): Initialize with README
Returns: Created repository details
get_file_contents
Get contents of a file or directory.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
path
(string): Path to file/directory
branch
(optional string): Branch to get contents from
Returns: File/directory contents
create_issue
Create a new issue.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
title
(string): Issue title
body
(optional string): Issue description
assignees
(optional string[]): Usernames to assign
labels
(optional string[]): Labels to add
milestone
(optional number): Milestone number
Returns: Created issue details
create_pull_request
Create a new pull request.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
title
(string): PR title
body
(optional string): PR description
head
(string): Branch containing changes
base
(string): Branch to merge into
draft
(optional boolean): Create as draft PR
maintainer_can_modify
(optional boolean): Allow maintainer edits
Returns: Created pull request details
fork_repository
Fork a repository.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
organization
(optional string): Organization to fork to
Returns: Forked repository details
create_branch
Create a new branch.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
branch
(string): Name for new branch
from_branch
(optional string): Source branch (defaults to repo default)
Returns: Created branch reference
list_issues
List and filter repository issues.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
state
(optional string): Filter by state ('open', 'closed', 'all')
labels
(optional string[]): Filter by labels
sort
(optional string): Sort by ('created', 'updated', 'comments')
direction
(optional string): Sort direction ('asc', 'desc')
since
(optional string): Filter by date (ISO 8601 timestamp)
page
(optional number): Page number
per_page
(optional number): Results per page
Returns: Array of issue details
update_issue
Update an existing issue.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
issue_number
(number): Issue number to update
title
(optional string): New title
body
(optional string): New description
state
(optional string): New state ('open' or 'closed')
labels
(optional string[]): New labels
assignees
(optional string[]): New assignees
milestone
(optional number): New milestone number
Returns: Updated issue details
add_issue_comment
Add a comment to an issue.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
issue_number
(number): Issue number to comment on
body
(string): Comment text
Returns: Created comment details
search_code
Search for code across GitHub repositories.
Inputs:
q
(string): Search query using GitHub code search syntax
sort
(optional string): Sort field ('indexed' only)
order
(optional string): Sort order ('asc' or 'desc')
per_page
(optional number): Results per page (max 100)
page
(optional number): Page number
Returns: Code search results with repository context
search_issues
Search for issues and pull requests.
Inputs:
q
(string): Search query using GitHub issues search syntax
sort
(optional string): Sort field (comments, reactions, created, etc.)
order
(optional string): Sort order ('asc' or 'desc')
per_page
(optional number): Results per page (max 100)
page
(optional number): Page number
Returns: Issue and pull request search results
search_users
Search for GitHub users.
Inputs:
q
(string): Search query using GitHub users search syntax
sort
(optional string): Sort field (followers, repositories, joined)
order
(optional string): Sort order ('asc' or 'desc')
per_page
(optional number): Results per page (max 100)
page
(optional number): Page number
Returns: User search results
list_commits
Gets commits of a branch in a repository.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
page
(optional string): Page number
per_page
(optional string): Number of records per page
sha
(optional string): Branch name
Returns: List of commits
get_issue
Gets the contents of an issue within a repository.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
issue_number
(number): Issue number to retrieve
Returns: GitHub Issue object & details
get_pull_request
Get details of a specific pull request.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
pull_number
(number): Pull request number
Returns: Pull request details including diff and review status
list_pull_requests
List and filter repository pull requests.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
state
(optional string): Filter by state ('open', 'closed', 'all')
head
(optional string): Filter by head user/org and branch
base
(optional string): Filter by base branch
sort
(optional string): Sort by ('created', 'updated', 'popularity', 'long-running')
direction
(optional string): Sort direction ('asc', 'desc')
per_page
(optional number): Results per page (max 100)
page
(optional number): Page number
Returns: Array of pull request details
create_pull_request_review
Create a review on a pull request.
Inputs:
owner
(string): Repository owner
repo
(string): Repository name
pull_number
(number): Pull request number
body
(string): Review comment text
event
(string): Review action ('APPROVE', 'REQUEST_CHANGES', 'COMMENT')
- `commit_id