GitHub MCP Server Plus

GitHub MCP Server Plus

MCP Server for the GitHub API, providing features for file operations, repository management, and advanced search, with automatic branch creation and comprehensive error handling.

PhialsBasement

Version Control
Developer Tools
Search
Visit Server

Tools

create_or_update_file

Create or update a single file in a GitHub repository

search_repositories

Search for GitHub repositories

create_repository

Create a new GitHub repository in your account

get_file_contents

Get the contents of a file or directory from a GitHub repository

push_files_content

Push multiple files with direct content to a GitHub repository in a single commit

push_files_from_path

Push multiple files from filesystem paths to a GitHub repository in a single commit

create_issue

Create a new issue in a GitHub repository

create_pull_request

Create a new pull request in a GitHub repository

fork_repository

Fork a GitHub repository to your account or specified organization

create_branch

Create a new branch in a GitHub repository

list_commits

Get list of commits of a branch in a GitHub repository

list_issues

List issues in a GitHub repository with filtering options

update_issue

Update an existing issue in a GitHub repository

add_issue_comment

Add a comment to an existing issue

search_code

Search for code across GitHub repositories

search_issues

Search for issues and pull requests across GitHub repositories

search_users

Search for users on GitHub

get_issue

Get details of a specific issue in a GitHub repository.

README

GitHub MCP Server Plus

npm downloads

MCP Server for the GitHub API, enabling file operations, repository management, search functionality, and more.

<a href="https://glama.ai/mcp/servers/qmvm4mx87p"><img width="380" height="200" src="https://glama.ai/mcp/servers/qmvm4mx87p/badge" alt="GitHub Server Plus MCP server" /></a>

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 with content or file paths
  • Advanced Search: Support for searching code, issues/PRs, and users

Tools

  1. 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
  2. push_files_content

    • Push multiple files with direct content 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
  3. push_files_from_path

    • Push multiple files from filesystem paths 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 (string): Target path in the repository
        • filepath (string): Source filesystem path to read from
      • message (string): Commit message
    • Returns: Updated branch reference
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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 record per page
      • sha (optional string): branch name
    • Returns: List of commits
  18. 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
  19. 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
  20. 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
  21. 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 (optional string): SHA of commit to review
      • comments (optional array): Line-specific comments, each with:
        • path (string): File path
        • position (number): Line position in diff
        • body (string): Comment text
    • Returns: Created review details
  22. merge_pull_request

    • Merge a pull request
    • Inputs:
      • owner (string): Repository owner
      • repo (string): Repository name
      • pull_number (number): Pull request number
      • commit_title (optional string): Title for merge commit
      • commit_message (optional string): Extra detail for merge commit
      • merge_method (optional string): Merge method ('merge', 'squash', 'rebase')
    • Returns: Merge result details
  23. get_pull_request_files

    • Get the list of files changed in a pull request
    • Inputs:
      • owner (string): Repository owner
      • repo (string): Repository name
      • pull_number (number): Pull request number
    • Returns: Array of changed files with patch and status details
  24. get_pull_request_status

    • Get the combined status of all status checks for a pull request
    • Inputs:
      • owner (string): Repository owner
      • repo (string): Repository name
      • pull_number (number): Pull request number
    • Returns: Combined status check results and individual check details
  25. update_pull_request_branch

    • Update a pull request branch with the latest changes from the base branch
    • Inputs:
      • owner (string): Repository owner
      • repo (string): Repository name
      • pull_number (number): Pull request number
      • expected_head_sha (optional string): The expected SHA of the pull request's HEAD ref
    • Returns: Success message when branch is updated
  26. get_pull_request_comments

    • Get the review comments on a pull request
    • Inputs:
      • owner (string): Repository owner
      • repo (string): Repository name
      • pull_number (number): Pull request number
    • Returns: Array of pull request review comments
  27. get_pull_request_reviews

    • Get the reviews on a pull request
    • Inputs:
      • owner (string): Repository owner
      • repo (string): Repository name
      • pull_number (number): Pull request number
    • Returns: Array of pull request reviews

Search Query Syntax

Code Search

  • language:javascript: Search by programming language
  • repo:owner/name: Search in specific repository
  • path:app/src: Search in specific path
  • extension:js: Search by file extension
  • Example: q: "import express" language:typescript path:src/

Issues Search

  • is:issue or is:pr: Filter by type
  • is:open or is:closed: Filter by state
  • label:bug: Search by label
  • author:username: Search by author
  • Example: q: "memory leak" is:issue is:open label:bug

Users Search

  • type:user or type:org: Filter by account type
  • followers:>1000: Filter by followers
  • location:London: Search by location
  • Example: q: "fullstack developer" location:London followers:>100

For detailed search syntax, see GitHub's searching documentation.

Setup

Personal Access Token

Create a GitHub Personal Access Token with appropriate permissions:

  • Go to Personal access tokens (in GitHub Settings > Developer settings)
  • Select which repositories you'd like this token to have access to (Public, All, or Select)
  • Create a token with the repo scope ("Full control of private repositories")
    • Alternatively, if working only with public repositories, select only the public_repo scope
  • Copy the generated token

Usage with Claude Desktop

To use this with Claude Desktop, add the following to your claude_desktop_config.json:

Docker

{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "mcp/github"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

NPX

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-github"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}

Build

Docker build:

docker build -t mcp/github -f src/github/Dockerfile .

License

This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
MCP Package Docs Server

MCP Package Docs Server

Facilitates LLMs to efficiently access and fetch structured documentation for packages in Go, Python, and NPM, enhancing software development with multi-language support and performance optimization.

Featured
Local
TypeScript
Claude Code MCP

Claude Code MCP

An implementation of Claude Code as a Model Context Protocol server that enables using Claude's software engineering capabilities (code generation, editing, reviewing, and file operations) through the standardized MCP interface.

Featured
Local
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

Model Context Protocol server for Task Management. This allows Claude Desktop (or any MCP client) to manage and execute tasks in a queue-based system.

Featured
Local
JavaScript
Gitingest-MCP

Gitingest-MCP

An MCP server for gitingest. It allows MCP clients like Claude Desktop, Cursor, Cline etc to quickly extract information about Github repositories including repository summaries, project directory structure, file contents, etc

Featured
Local
Python
Linear MCP Server

Linear MCP Server

Enables interaction with Linear's API for managing issues, teams, and projects programmatically through the Model Context Protocol.

Featured
JavaScript
serper-search-scrape-mcp-server

serper-search-scrape-mcp-server

This Serper MCP Server supports search and webpage scraping, and all the most recent parameters introduced by the Serper API, like location.

Featured
TypeScript