Cover image
Try Now
2025-04-03

Github MCP Server to integrate with CI flows

3 years

Works with Finder

1

Github Watches

0

Github Forks

0

Github Stars

GitHub MCP Server

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

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

    • 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  1. 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
  1. 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
  1. 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
  1. 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
  1. 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
  1. 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
  1. 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
  1. update_pull_request_branch
  • Update a pull request branch with the latest changes from the base branch (equivalent to GitHub's "Update branch" button)
  • 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
  1. 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 with details like the comment text, author, and location in the diff
  1. 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 with details like the review state (APPROVED, CHANGES_REQUESTED, etc.), reviewer, and review body
  1. list_workflow_runs
  • List and filter GitHub workflow runs for a repository
  • Inputs:
    • owner (optional string): Repository owner. If not provided, uses GITHUB_OWNER environment variable.
    • repo (optional string): Repository name. If not provided, uses GITHUB_REPO environment variable.
    • branch (optional string): Filter by branch name
    • actor (optional string): Filter by GitHub username who triggered the workflow
    • event (optional string): Filter by event type that triggered the workflow
    • status (optional string): Filter by workflow status
    • per_page (optional number): Results per page (max 100)
    • page (optional number): Page number of the results
  • Returns: List of workflow runs with detailed information
  1. get_workflow_run
  • Get details of a specific GitHub workflow run
  • Inputs:
    • run_id (number): The ID of the workflow run
    • owner (optional string): Repository owner. If not provided, uses GITHUB_OWNER environment variable.
    • repo (optional string): Repository name. If not provided, uses GITHUB_REPO environment variable.
  • Returns: Detailed information about the workflow run including status, conclusion, timestamps, and repository context
  1. list_workflow_runs_by_workflow_id
  • List workflow runs for a specific workflow ID
  • Inputs:
    • workflow_id (string or number): The ID or filename of the workflow. If not provided, uses GITHUB_WORKFLOW_ID environment variable.
    • owner (optional string): Repository owner. If not provided, uses GITHUB_OWNER environment variable.
    • repo (optional string): Repository name. If not provided, uses GITHUB_REPO environment variable.
    • branch (optional string): Filter by branch name
    • actor (optional string): Filter by GitHub username who triggered the workflow
    • event (optional string): Filter by event type that triggered the workflow
    • status (optional string): Filter by workflow status
    • created (optional string): Date range filter (e.g., '>=2020-01-01')
    • exclude_pull_requests (optional boolean): If true, excludes workflow runs triggered by pull requests
    • check_suite_id (optional number): Filter by check suite ID
    • head_sha (optional string): Only returns workflow runs associated with this SHA
    • per_page (optional number): Results per page (max 100)
    • page (optional number): Page number of the results
  • Returns: List of workflow runs for the specified workflow
  1. get_workflow_run_logs
  • Get the download URL for workflow run logs (URL is valid for 1 minute)
  • Inputs:
    • run_id (number): The ID of the workflow run
    • owner (optional string): Repository owner. If not provided, uses GITHUB_OWNER environment variable.
    • repo (optional string): Repository name. If not provided, uses GITHUB_REPO environment variable.
  • Returns: A download URL for the logs archive that is valid for 1 minute
  1. download_and_unzip
  • Download a file from a URL and unzip it to a specified directory
  • Inputs:
    • url (string): The URL to download the file from
    • outputDir (optional string): Directory to extract files to (defaults to '/tmp')
    • filename (optional string): Custom filename for the downloaded file
  • Returns:
    • success (boolean): Whether the operation was successful
    • message (string): Success message with extraction path
    • extractedDirectory (string): Path to the directory where files were extracted
    • files (array): List of files in the extracted directory

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 Cursor or Windsurf, add the following to your ~/.cursor/mcp_config.json or ~/.windsurf/mcp_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.

Environment Variables

You can configure the GitHub MCP Server using these environment variables:

  • GITHUB_PERSONAL_ACCESS_TOKEN (required): Your GitHub personal access token
  • GITHUB_OWNER (optional): Default repository owner to use if not specified in API calls
  • GITHUB_REPO (optional): Default repository name to use if not specified in API calls
  • GITHUB_WORKFLOW_ID (optional): Default workflow ID to use if not specified in API calls

相关推荐

  • https://maiplestudio.com
  • Find Exhibitors, Speakers and more

  • Yusuf Emre Yeşilyurt
  • I find academic articles and books for research and literature reviews.

  • https://suefel.com
  • Latest advice and best practices for custom GPT development.

  • Carlos Ferrin
  • Encuentra películas y series en plataformas de streaming.

  • Emmet Halm
  • Converts Figma frames into front-end code for various mobile frameworks.

  • Joshua Armstrong
  • Confidential guide on numerology and astrology, based of GG33 Public information

  • https://zenepic.net
  • Embark on a thrilling diplomatic quest across a galaxy on the brink of war. Navigate complex politics and alien cultures to forge peace and avert catastrophe in this immersive interstellar adventure.

  • Elijah Ng Shi Yi
  • Advanced software engineer GPT that excels through nailing the basics.

  • https://reddgr.com
  • Delivers concise Python code and interprets non-English comments

  • 林乔安妮
  • A fashion stylist GPT offering outfit suggestions for various scenarios.

  • 1Panel-dev
  • 💬 MaxKB is a ready-to-use AI chatbot that integrates Retrieval-Augmented Generation (RAG) pipelines, supports robust workflows, and provides advanced MCP tool-use capabilities.

  • ShrimpingIt
  • Micropython I2C-based manipulation of the MCP series GPIO expander, derived from Adafruit_MCP230xx

  • open-webui
  • User-friendly AI Interface (Supports Ollama, OpenAI API, ...)

  • Dhravya
  • Collection of apple-native tools for the model context protocol.

  • Mintplex-Labs
  • The all-in-one Desktop & Docker AI application with built-in RAG, AI agents, No-code agent builder, MCP compatibility, and more.

    Reviews

    4 (1)
    Avatar
    user_Px3jC31N
    2025-04-16

    I've been using the github-mcp-server by rahul-roy-glean for a while now, and it has significantly streamlined my development workflow. It’s a robust tool with an intuitive interface, making collaboration on GitHub projects seamless. Highly recommend it to anyone looking to enhance their project management efficiency!