- Notifications
You must be signed in to change notification settings - Fork0
GitHub's official MCP Server
License
codingoutloud/github-mcp-server
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
GitHub MCP Server implemented in Go.
Create a GitHub Personal Access Token with the appropriate permissionsand set it as the GITHUB_PERSONAL_ACCESS_TOKEN environment variable.
- get_me - Get details of the authenticated user
- No parameters required
get_issue - Gets the contents of an issue within a repository
owner: Repository owner (string, required)repo: Repository name (string, required)issue_number: Issue number (number, required)
create_issue - Create a new issue in a GitHub repository
owner: Repository owner (string, required)repo: Repository name (string, required)title: Issue title (string, required)body: Issue body content (string, optional)assignees: Comma-separated list of usernames to assign to this issue (string, optional)labels: Comma-separated list of labels to apply to this issue (string, optional)
add_issue_comment - Add a comment to an issue
owner: Repository owner (string, required)repo: Repository name (string, required)issue_number: Issue number (number, required)body: Comment text (string, required)
list_issues - List and filter repository issues
owner: Repository owner (string, required)repo: Repository name (string, required)state: Filter by state ('open', 'closed', 'all') (string, optional)labels: Comma-separated list of labels to filter by (string, optional)sort: Sort by ('created', 'updated', 'comments') (string, optional)direction: Sort direction ('asc', 'desc') (string, optional)since: Filter by date (ISO 8601 timestamp) (string, optional)page: Page number (number, optional)per_page: Results per page (number, optional)
update_issue - Update an existing issue in a GitHub repository
owner: Repository owner (string, required)repo: Repository name (string, required)issue_number: Issue number to update (number, required)title: New title (string, optional)body: New description (string, optional)state: New state ('open' or 'closed') (string, optional)labels: Comma-separated list of new labels (string, optional)assignees: Comma-separated list of new assignees (string, optional)milestone: New milestone number (number, optional)
search_issues - Search for issues and pull requests
query: Search query (string, required)sort: Sort field (string, optional)order: Sort order (string, optional)page: Page number (number, optional)per_page: Results per page (number, optional)
get_pull_request - Get details of a specific pull request
owner: Repository owner (string, required)repo: Repository name (string, required)pull_number: Pull request number (number, required)
list_pull_requests - List and filter repository pull requests
owner: Repository owner (string, required)repo: Repository name (string, required)state: PR state (string, optional)sort: Sort field (string, optional)direction: Sort direction (string, optional)per_page: Results per page (number, optional)page: Page number (number, optional)
merge_pull_request - Merge a pull request
owner: Repository owner (string, required)repo: Repository name (string, required)pull_number: Pull request number (number, required)commit_title: Title for the merge commit (string, optional)commit_message: Message for the merge commit (string, optional)merge_method: Merge method (string, optional)
get_pull_request_files - Get the list of files changed in a pull request
owner: Repository owner (string, required)repo: Repository name (string, required)pull_number: Pull request number (number, required)
get_pull_request_status - Get the combined status of all status checks for a pull request
owner: Repository owner (string, required)repo: Repository name (string, required)pull_number: Pull request number (number, required)
update_pull_request_branch - Update a pull request branch with the latest changes from the base branch
owner: Repository owner (string, required)repo: Repository name (string, required)pull_number: Pull request number (number, required)expected_head_sha: The expected SHA of the pull request's HEAD ref (string, optional)
get_pull_request_comments - Get the review comments on a pull request
owner: Repository owner (string, required)repo: Repository name (string, required)pull_number: Pull request number (number, required)
get_pull_request_reviews - Get the reviews on a pull request
owner: Repository owner (string, required)repo: Repository name (string, required)pull_number: Pull request number (number, required)
create_pull_request_review - Create a review on a pull request review
owner: Repository owner (string, required)repo: Repository name (string, required)pull_number: Pull request number (number, required)body: Review comment text (string, optional)event: Review action ('APPROVE', 'REQUEST_CHANGES', 'COMMENT') (string, required)commit_id: SHA of commit to review (string, optional)comments: Line-specific comments array of objects, each object with path (string), position (number), and body (string) (array, optional)
create_or_update_file - Create or update a single file in a repository
owner: Repository owner (string, required)repo: Repository name (string, required)path: File path (string, required)message: Commit message (string, required)content: File content (string, required)branch: Branch name (string, optional)sha: File SHA if updating (string, optional)
push_files - Push multiple files in a single commit
owner: Repository owner (string, required)repo: Repository name (string, required)branch: Branch to push to (string, required)files: Files to push, each with path and content (array, required)message: Commit message (string, required)
search_repositories - Search for GitHub repositories
query: Search query (string, required)sort: Sort field (string, optional)order: Sort order (string, optional)page: Page number (number, optional)per_page: Results per page (number, optional)
create_repository - Create a new GitHub repository
name: Repository name (string, required)description: Repository description (string, optional)private: Whether the repository is private (boolean, optional)auto_init: Auto-initialize with README (boolean, optional)gitignore_template: Gitignore template name (string, optional)
get_file_contents - Get contents of a file or directory
owner: Repository owner (string, required)repo: Repository name (string, required)path: File path (string, required)ref: Git reference (string, optional)
fork_repository - Fork a repository
owner: Repository owner (string, required)repo: Repository name (string, required)organization: Target organization name (string, optional)
create_branch - Create a new branch
owner: Repository owner (string, required)repo: Repository name (string, required)branch: New branch name (string, required)sha: SHA to create branch from (string, required)
list_commits - Gets commits of a branch in a repository
owner: Repository owner (string, required)repo: Repository name (string, required)sha: Branch name, tag, or commit SHA (string, optional)path: Only commits containing this file path (string, optional)page: Page number (number, optional)per_page: Results per page (number, optional)
search_code - Search for code across GitHub repositories
query: Search query (string, required)sort: Sort field (string, optional)order: Sort order (string, optional)page: Page number (number, optional)per_page: Results per page (number, optional)
search_users - Search for GitHub users
query: Search query (string, required)sort: Sort field (string, optional)order: Sort order (string, optional)page: Page number (number, optional)per_page: Results per page (number, optional)
get_code_scanning_alert - Get a code scanning alert
owner: Repository owner (string, required)repo: Repository name (string, required)alert_number: Alert number (number, required)
list_code_scanning_alerts - List code scanning alerts for a repository
owner: Repository owner (string, required)repo: Repository name (string, required)ref: Git reference (string, optional)state: Alert state (string, optional)severity: Alert severity (string, optional)
Get Repository ContentRetrieves the content of a repository at a specific path.
- Template:
repo://{owner}/{repo}/contents{/path*} - Parameters:
owner: Repository owner (string, required)repo: Repository name (string, required)path: File or directory path (string, optional)
- Template:
Get Repository Content for a Specific BranchRetrieves the content of a repository at a specific path for a given branch.
- Template:
repo://{owner}/{repo}/refs/heads/{branch}/contents{/path*} - Parameters:
owner: Repository owner (string, required)repo: Repository name (string, required)branch: Branch name (string, required)path: File or directory path (string, optional)
- Template:
Get Repository Content for a Specific CommitRetrieves the content of a repository at a specific path for a given commit.
- Template:
repo://{owner}/{repo}/sha/{sha}/contents{/path*} - Parameters:
owner: Repository owner (string, required)repo: Repository name (string, required)sha: Commit SHA (string, required)path: File or directory path (string, optional)
- Template:
Get Repository Content for a Specific TagRetrieves the content of a repository at a specific path for a given tag.
- Template:
repo://{owner}/{repo}/refs/tags/{tag}/contents{/path*} - Parameters:
owner: Repository owner (string, required)repo: Repository name (string, required)tag: Tag name (string, required)path: File or directory path (string, optional)
- Template:
Get Repository Content for a Specific Pull RequestRetrieves the content of a repository at a specific path for a given pull request.
- Template:
repo://{owner}/{repo}/refs/pull/{pr_number}/head/contents{/path*} - Parameters:
owner: Repository owner (string, required)repo: Repository name (string, required)pr_number: Pull request number (string, required)path: File or directory path (string, optional)
- Template:
go run cmd/github-mcp-server/main.go stdio
E.g:
Set the PAT token in the environment variable and run:
script/get-me
And you should see the output of the GitHub MCP server responding with the user information.
GitHub MCP Server running on stdio{"jsonrpc":"2.0","id": 3,"result": {"content": [ {"type":"text","text":"{\"login\":\"juruen\",\"id\" ... } } ] }}Warning
This version of the server works with the2024-11-05 MCP Spec, which requires a stateful connection for SSE. We plan to add support for a stateless mode in the future, as allowed by the2025-03-26 MCP Spec.
Run the server in HTTP mode with Server-Sent Events (SSE):
go run cmd/github-mcp-server/main.go http
The server will start on port 8080 by default. You can specify a different port using the--port flag:
go run cmd/github-mcp-server/main.go http --port 3000
The server accepts connections athttp://localhost:<port> and communicates using Server-Sent Events (SSE).
Like the stdio server, ensure your GitHub Personal Access Token is set in theGITHUB_PERSONAL_ACCESS_TOKEN environment variable before starting the server.
You can use the same flags as the stdio server:
--read-only: Restrict the server to read-only operations--log-file: Path to log file--enable-command-logging: Enable logging of all command requests and responses--export-translations: Save translations to a JSON file--gh-host: Specify the GitHub hostname (for GitHub Enterprise, localhost etc.)
The descriptions of the tools can be overridden by creating a github-mcp-server.json file in the same directory as the binary.The file should contain a JSON object with the tool names as keys and the new descriptions as values.For example:
{"TOOL_ADD_ISSUE_COMMENT_DESCRIPTION":"an alternative description","TOOL_CREATE_BRANCH_DESCRIPTION":"Create a new branch in a GitHub repository"}You can create an export of the current translations by running the binary with the--export-translations flag.This flag will preserve any translations/overrides you have made, while adding any new translations that have been added to the binary since the last time you exported.
./github-mcp-server --export-translationscat github-mcp-server.json
You can also use ENV vars to override the descriptions. The environment variable names are the same as the keys in the JSON file,prefixed withGITHUB_MCP_ and all uppercase.
For example, to override theTOOL_ADD_ISSUE_COMMENT_DESCRIPTION tool, you can set the following environment variable:
export GITHUB_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION="an alternative description"
First of all, installgithub-mcp-server with:
go install ./cmd/github-mcp-server
RunPreferences: Open User Settings (JSON), and create or append to themcp setting:
{"mcp": {"inputs": [ {"type":"promptString","id":"githubpat","description":"GitHub Personal Access Token","password":true } ],"servers": {"mcp-github-server": {"command":"path-to-your/github-mcp-server","args": ["stdio"],"env": {"GITHUB_PERSONAL_ACCESS_TOKEN":"${input:githubpat}" } } } }}InCopilot Edits, you should now see an option to reload the availabletools.Reload, and you should be good to go.
Try something like the following prompt to verify that it works:
I'd like to know more about my GitHub profile.The flag--gh-host and the environment variableGH_HOST can be used to set the GitHub Enterprise Server hostname.
Testing
- Integration tests
- Blackbox testing: ideally comparing output to Anthropic's server to make sure that this is a fully compatible drop-in replacement.
And some other stuff:
- ...
About
GitHub's official MCP Server
Resources
License
Code of conduct
Contributing
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Languages
- Go98.9%
- Other1.1%