GitHub MCP Server
Interact with GitHub repositories, issues, pull requests, and more.
Overview
| Property | Value |
|---|---|
| Package | @modelcontextprotocol/server-github |
| Source | GitHub |
| Transport | stdio |
Installation
npx -y @modelcontextprotocol/server-github
Configuration
mcp_servers:
- name: github
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: ${GITHUB_TOKEN}
Required Permissions
Your GitHub token needs these scopes:
repo- Full repository accessread:org- Read organization data (optional)read:user- Read user data (optional)
Tools
create_or_update_file
Create or update a file in a repository.
Parameters:
owner(string): Repository ownerrepo(string): Repository namepath(string): File pathcontent(string): File contentmessage(string): Commit messagebranch(string): Branch namesha(string, optional): SHA of file being replaced (for updates)
search_repositories
Search for repositories.
Parameters:
query(string): Search query
Example:
{
"tool": "search_repositories",
"arguments": {
"query": "kubernetes operator language:rust"
}
}
create_repository
Create a new repository.
Parameters:
name(string): Repository namedescription(string, optional): Descriptionprivate(boolean, optional): Private repository
get_file_contents
Get contents of a file or directory.
Parameters:
owner(string): Repository ownerrepo(string): Repository namepath(string): File pathbranch(string, optional): Branch name
push_files
Push multiple files in a single commit.
Parameters:
owner(string): Repository ownerrepo(string): Repository namebranch(string): Branch namefiles(array): Files to pushmessage(string): Commit message
create_issue
Create a new issue.
Parameters:
owner(string): Repository ownerrepo(string): Repository nametitle(string): Issue titlebody(string, optional): Issue bodylabels(array, optional): Labelsassignees(array, optional): Assignees
create_pull_request
Create a pull request.
Parameters:
owner(string): Repository ownerrepo(string): Repository nametitle(string): PR titlebody(string, optional): PR bodyhead(string): Head branchbase(string): Base branch
fork_repository
Fork a repository.
Parameters:
owner(string): Repository ownerrepo(string): Repository name
create_branch
Create a new branch.
Parameters:
owner(string): Repository ownerrepo(string): Repository namebranch(string): New branch namefrom_branch(string, optional): Source branch
list_commits
List commits in a repository.
Parameters:
owner(string): Repository ownerrepo(string): Repository namepage(number, optional): Page numberper_page(number, optional): Results per pagesha(string, optional): Branch/commit SHA
list_issues
List issues in a repository.
Parameters:
owner(string): Repository ownerrepo(string): Repository namestate(string, optional): open, closed, alllabels(string, optional): Comma-separated labelssort(string, optional): created, updated, commentsdirection(string, optional): asc, desc
update_issue
Update an existing issue.
Parameters:
owner(string): Repository ownerrepo(string): Repository nameissue_number(number): Issue numbertitle(string, optional): New titlebody(string, optional): New bodystate(string, optional): open, closedlabels(array, optional): Labels
add_issue_comment
Add a comment to an issue.
Parameters:
owner(string): Repository ownerrepo(string): Repository nameissue_number(number): Issue numberbody(string): Comment body
search_code
Search code across repositories.
Parameters:
query(string): Search query
Example:
{
"tool": "search_code",
"arguments": {
"query": "filename:Dockerfile FROM node"
}
}
search_issues
Search issues and pull requests.
Parameters:
query(string): Search query
search_users
Search GitHub users.
Parameters:
query(string): Search query
get_issue
Get details of a specific issue.
Parameters:
owner(string): Repository ownerrepo(string): Repository nameissue_number(number): Issue number
get_pull_request
Get details of a pull request.
Parameters:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): PR number
list_pull_requests
List pull requests.
Parameters:
owner(string): Repository ownerrepo(string): Repository namestate(string, optional): open, closed, allhead(string, optional): Filter by head branchbase(string, optional): Filter by base branch
create_pull_request_review
Create a review on a pull request.
Parameters:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): PR numberbody(string, optional): Review bodyevent(string): APPROVE, REQUEST_CHANGES, COMMENTcomments(array, optional): Line comments
merge_pull_request
Merge a pull request.
Parameters:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): PR numbercommit_title(string, optional): Merge commit titlecommit_message(string, optional): Merge commit messagemerge_method(string, optional): merge, squash, rebase
get_pull_request_files
Get files changed in a pull request.
Parameters:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): PR number
get_pull_request_diff
Get the diff of a pull request.
Parameters:
owner(string): Repository ownerrepo(string): Repository namepull_number(number): PR number
Use Cases
PR Review Agent
apiVersion: aof.sh/v1alpha1
kind: Agent
metadata:
name: pr-reviewer
spec:
model: google:gemini-2.5-flash
mcp_servers:
- name: github
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: ${GITHUB_TOKEN}
system_prompt: |
You are a code review agent. When given a PR:
1. Use get_pull_request_diff to see changes
2. Use get_pull_request_files to list changed files
3. Analyze for bugs, security issues, and style
4. Use create_pull_request_review to submit review
Issue Triage Agent
apiVersion: aof.sh/v1alpha1
kind: Agent
metadata:
name: issue-triage
spec:
model: google:gemini-2.5-flash
mcp_servers:
- name: github
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: ${GITHUB_TOKEN}
system_prompt: |
You triage new GitHub issues:
1. Use list_issues to get new issues
2. Analyze each issue for priority and category
3. Use update_issue to add labels
4. Use add_issue_comment to acknowledge
Repository Analyzer
apiVersion: aof.sh/v1alpha1
kind: Agent
metadata:
name: repo-analyzer
spec:
model: google:gemini-2.5-flash
mcp_servers:
- name: github
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: ${GITHUB_TOKEN}
system_prompt: |
You analyze GitHub repositories for:
- Code quality patterns
- Documentation completeness
- CI/CD configuration
- Security practices
Use get_file_contents to read key files like
README.md, .github/workflows/, Dockerfile, etc.
Rate Limits
GitHub API has rate limits:
- Authenticated: 5,000 requests/hour
- Search API: 30 requests/minute
The server handles rate limiting automatically with retries.
Troubleshooting
Authentication Failed
Verify your token:
curl -H "Authorization: token YOUR_TOKEN" https://api.github.com/user
Permission Denied
Check token scopes at: https://github.com/settings/tokens
Rate Limited
Wait for rate limit reset or use a token with higher limits.