mcpField
G
GitHub MCP Server

GitHub MCP Server

本地服务
github.com/tangochuy版本控制081 周前更新

关于 GitHub MCP Server

GitHub MCP Server 将 MCP 客户端和工具连接到 GitHub API,以执行仓库、Issue 和 Pull Request 操作。开发者可用它进行 GitHub 自动化和数据访问;支持通过 Docker 或 Go 构建的二进制运行,并可配置 GitHub Enterprise Server。

主要功能

  1. 01读取和管理 Issue
  2. 02创建并审查 Pull Request
  3. 03搜索仓库和 Issue
  4. 04创建或更新仓库文件
  5. 05配置 GitHub Enterprise Server 主机
  6. 06覆盖工具描述

适用场景

  1. 01自动化 Issue 工作流
  2. 02检查和更新 Pull Request
  3. 03搜索仓库数据
  4. 04向仓库提交文件

MCP 相关

它将 GitHub API 操作作为工具提供给 MCP 客户端,包括 Issue、Pull Request 和仓库操作。可配置用于 VS Code、Claude Desktop 和 GitHub Enterprise Server。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"github-mcp-server-tangochuy": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<GITHUB_PERSONAL_ACCESS_TOKEN>"
}
}
}
}
启动命令docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server
需要配置的环境变量
GITHUB_PERSONAL_ACCESS_TOKEN密钥

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/github/github-mcp-server

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

GitHub MCP 服务

GitHub MCP 服务是一个 Model Context Protocol(MCP)服务,可与 GitHub API 无缝集成,为开发者和工具提供高级自动化和交互能力。

在 VS Code 中使用 Docker 安装 在 VS Code Insiders 中使用 Docker 安装

使用场景

  • 自动化 GitHub 工作流和流程。
  • 从 GitHub 仓库提取和分析数据。
  • 构建可与 GitHub 生态系统交互的 AI 工具和应用。

前置条件

  1. 要在容器中运行服务,需要安装 Docker。
  2. 安装 Docker 后,还需要确保 Docker 正在运行。
  3. 最后,需要创建 GitHub 个人访问令牌。 MCP 服务可以调用许多 GitHub API,因此请启用你愿意授予 AI 工具的权限(如需了解访问令牌的更多信息,请参阅文档)。

安装

在 VS Code 中使用

如需快速安装,请使用本 README 顶部的任一一键安装按钮。

如需手动安装,请将以下 JSON 代码块添加到 VS Code 的“用户设置(JSON)”文件中。按下 Ctrl + Shift + P 并输入 Preferences: Open User Settings (JSON) 即可打开该文件。

也可以将其添加到工作区中的 .vscode/mcp.json 文件。这样便可与他人共享配置。

请注意,.vscode/mcp.json 文件中不需要 mcp 键。

{
  "mcp": {
    "inputs": [
      {
        "type": "promptString",
        "id": "github_token",
        "description": "GitHub Personal Access Token",
        "password": true
      }
    ],
    "servers": {
      "github": {
        "command": "docker",
        "args": [
          "run",
          "-i",
          "--rm",
          "-e",
          "GITHUB_PERSONAL_ACCESS_TOKEN",
          "ghcr.io/github/github-mcp-server"
        ],
        "env": {
          "GITHUB_PERSONAL_ACCESS_TOKEN": "${input:github_token}"
        }
      }
    }
  }
}

有关在 VS Code 中使用 MCP 服务工具的更多信息,请参阅Agent 模式文档。

在 Claude Desktop 中使用
{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}
从源代码构建

如果没有 Docker,可以使用 go 在 cmd/github-mcp-server 目录中构建二进制文件,并运行 github-mcp-server stdio 命令,同时将环境变量 GITHUB_PERSONAL_ACCESS_TOKEN 设置为你的令牌。

GitHub Enterprise Server

可以使用标志 --gh-host 和环境变量 GH_HOST 设置 GitHub Enterprise Server 主机名。

国际化 / 覆盖描述

可以在二进制文件所在的目录中创建 github-mcp-server-config.json 文件,以覆盖工具的描述。

该文件应包含一个 JSON 对象,以工具名称为键,以新的描述为值。例如:

{
  "TOOL_ADD_ISSUE_COMMENT_DESCRIPTION": "an alternative description",
  "TOOL_CREATE_BRANCH_DESCRIPTION": "Create a new branch in a GitHub repository"
}

运行二进制文件并使用 --export-translations 标志,可以导出当前翻译。

此标志会保留你所做的任何翻译/覆盖,同时添加自上次导出后加入二进制文件的所有新翻译。

./github-mcp-server --export-translations
cat github-mcp-server-config.json

你也可以使用环境变量覆盖描述。环境变量的名称与 JSON 文件中的键相同,前缀为 GITHUB_MCP_,并且全部使用大写字母。

例如,要覆盖 TOOL_ADD_ISSUE_COMMENT_DESCRIPTION 工具,可以设置以下环境变量:

export GITHUB_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION="an alternative description"

工具

用户
  • get_me - 获取已通过身份验证的用户的详细信息
    • 无需提供参数
问题
  • get_issue - 获取仓库中某个问题的内容

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • issue_number:问题编号(数字,必填)
  • get_issue_comments - 获取 GitHub 问题的评论

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • issue_number:问题编号(数字,必填)
  • create_issue - 在 GitHub 仓库中创建新问题

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • title:问题标题(字符串,必填)
    • body:问题正文内容(字符串,可选)
    • assignees:分配给此问题的用户名(字符串数组,可选)
    • labels:应用于此问题的标签(字符串数组,可选)
  • add_issue_comment - 为问题添加评论

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • issue_number:问题编号(数字,必填)
    • body:评论文本(字符串,必填)
  • list_issues - 列出并筛选仓库问题

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • state:按状态筛选('open'、'closed'、'all')(字符串,可选)
    • labels:用于筛选的标签(字符串数组,可选)
    • sort:排序依据('created'、'updated'、'comments')(字符串,可选)
    • direction:排序方向('asc'、'desc')(字符串,可选)
    • since:按日期筛选(ISO 8601 时间戳)(字符串,可选)
    • page:页码(数字,可选)
    • perPage:每页结果数(数字,可选)
  • update_issue - 更新 GitHub 仓库中已有的问题

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • issue_number:要更新的问题编号(数字,必填)
    • title:新标题(字符串,可选)
    • body:新描述(字符串,可选)
    • state:新状态('open' 或 'closed')(字符串,可选)
    • labels:新标签(字符串数组,可选)
    • assignees:新的受分配者(字符串数组,可选)
    • milestone:新里程碑编号(数字,可选)
  • search_issues - 搜索问题和拉取请求

    • query:搜索查询(字符串,必填)
    • sort:排序字段(字符串,可选)
    • order:排序顺序(字符串,可选)
    • page:页码(数字,可选)
    • perPage:每页结果数(数字,可选)
拉取请求
  • get_pull_request - 获取特定拉取请求的详细信息

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • pullNumber:拉取请求编号(数字,必填)
  • list_pull_requests - 列出并筛选仓库拉取请求

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • state:PR 状态(字符串,可选)
    • sort:排序字段(字符串,可选)
    • direction:排序方向(字符串,可选)
    • perPage:每页结果数(数字,可选)
    • page:页码(数字,可选)
  • merge_pull_request - 合并拉取请求

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • pullNumber:拉取请求编号(数字,必填)
    • commit_title:合并提交的标题(字符串,可选)
    • commit_message:合并提交的消息(字符串,可选)
    • merge_method:合并方式(字符串,可选)
  • get_pull_request_files - 获取拉取请求中更改的文件列表

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • pullNumber:拉取请求编号(数字,必填)
  • get_pull_request_status - 获取拉取请求所有状态检查的汇总状态

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • pullNumber:拉取请求编号(数字,必填)
  • update_pull_request_branch - 使用基分支中的最新更改更新拉取请求分支

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • pullNumber:拉取请求编号(数字,必填)
    • expectedHeadSha:拉取请求 HEAD 引用的预期 SHA(字符串,可选)
  • get_pull_request_comments - 获取拉取请求的审查评论

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • pullNumber:拉取请求编号(数字,必填)
  • get_pull_request_reviews - 获取拉取请求的审查记录

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • pullNumber:拉取请求编号(数字,必填)
  • create_pull_request_review - 创建拉取请求审查

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • pullNumber:拉取请求编号(数字,必填)
    • body:审查评论文本(字符串,可选)
    • event:审查操作('APPROVE'、'REQUEST_CHANGES'、'COMMENT')(字符串,必填)
    • commitId:要审查的提交 SHA(字符串,可选)
    • comments:针对特定行的评论对象数组,用于在拉取请求更改中添加评论(数组,可选)
      • 对于行内评论:提供 path、position(或 line)和 body
      • 对于多行评论:提供 path、start_line、line、可选的 side/start_side,以及 body
  • create_pull_request - 创建新的拉取请求

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • title:PR 标题(字符串,必填)
    • body:PR 描述(字符串,可选)
    • head:包含更改的分支(字符串,必填)
    • base:要合并到的分支(字符串,必填)
    • draft:创建为草稿 PR(布尔值,可选)
    • maintainer_can_modify:允许维护者编辑(布尔值,可选)
  • add_pull_request_review_comment - 在拉取请求中添加审查评论,或回复现有评论

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • pull_number:拉取请求编号(数字,必填)
    • body:审查评论的文本(字符串,必填)
    • commit_id:要评论的提交的 SHA(字符串,除非使用 in_reply_to,否则必填)
    • path:需要添加评论的文件的相对路径(字符串,除非使用 in_reply_to,否则必填)
    • line:拉取请求差异中评论所针对的代码行(数字,可选)
    • side:要评论的差异一侧(LEFT 或 RIGHT)(字符串,可选)
    • start_line:对于多行评论,范围的第一行(数字,可选)
    • start_side:对于多行评论,差异的起始一侧(LEFT 或 RIGHT)(字符串,可选)
    • subject_type:评论所针对的级别(行或文件)(字符串,可选)
    • in_reply_to:要回复的审查评论 ID(数字,可选)。指定后,只需提供 body,其他参数均会被忽略。
  • update_pull_request - 更新 GitHub 仓库中的现有拉取请求

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • pullNumber:要更新的拉取请求编号(数字,必填)
    • title:新标题(字符串,可选)
    • body:新描述(字符串,可选)
    • state:新状态('open' 或 'closed')(字符串,可选)
    • base:新的基础分支名称(字符串,可选)
    • maintainer_can_modify:是否允许维护者进行修改(布尔值,可选)
仓库
  • create_or_update_file - 在仓库中创建或更新单个文件

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • path:文件路径(字符串,必填)
    • message:提交消息(字符串,必填)
    • content:文件内容(字符串,必填)
    • branch:分支名称(字符串,可选)
    • sha:更新文件时使用的文件 SHA(字符串,可选)
  • list_branches - 列出 GitHub 仓库中的分支

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • page:页码(数字,可选)
    • perPage:每页结果数(数字,可选)
  • push_files - 在一次提交中推送多个文件

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • branch:要推送到的分支(字符串,必填)
    • files:要推送的文件,每个文件包含路径和内容(数组,必填)
    • message:提交消息(字符串,必填)
  • search_repositories - 搜索 GitHub 仓库

    • query:搜索查询(字符串,必填)
    • sort:排序字段(字符串,可选)
    • order:排序顺序(字符串,可选)
    • page:页码(数字,可选)
    • perPage:每页结果数(数字,可选)
  • create_repository - 创建新的 GitHub 仓库

    • name:仓库名称(字符串,必填)
    • description:仓库描述(字符串,可选)
    • private:仓库是否为私有(布尔值,可选)
    • autoInit:是否使用 README 自动初始化(布尔值,可选)
  • get_file_contents - 获取文件或目录的内容

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • path:文件路径(字符串,必填)
    • ref:Git 引用(字符串,可选)
  • fork_repository - 复刻仓库

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • organization:目标组织名称(字符串,可选)
  • create_branch - 创建新分支

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • branch:新分支名称(字符串,必填)
    • sha:用于创建分支的 SHA(字符串,必填)
  • list_commits - 获取仓库中某个分支的提交列表

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • sha:分支名称、标签或提交 SHA(字符串,可选)
    • path:仅列出包含此文件路径的提交(字符串,可选)
    • page:页码(数字,可选)
    • perPage:每页结果数(数字,可选)
  • get_commit - 获取仓库中某次提交的详细信息

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • sha:提交 SHA、分支名称或标签名称(字符串,必填)
    • page:提交中文件的页码(数字,可选)
    • perPage:提交中文件的每页结果数(数字,可选)
搜索
  • search_code - 搜索 GitHub 仓库中的代码

    • query:搜索查询(字符串,必填)
    • sort:排序字段(字符串,可选)
    • order:排序顺序(字符串,可选)
    • page:页码(数字,可选)
    • perPage:每页结果数(数字,可选)
  • search_users - 搜索 GitHub 用户

    • query:搜索查询(字符串,必填)
    • sort:排序字段(字符串,可选)
    • order:排序顺序(字符串,可选)
    • page:页码(数字,可选)
    • perPage:每页结果数(数字,可选)
代码扫描
  • get_code_scanning_alert - 获取代码扫描警报

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • alertNumber:警报编号(数字,必填)
  • list_code_scanning_alerts - 列出仓库的代码扫描警报

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • ref:Git 引用(字符串,可选)
    • state:警报状态(字符串,可选)
    • severity:警报严重程度(字符串,可选)

资源

仓库内容
  • 获取仓库内容 获取仓库中指定路径的内容。

    • 模板:repo://{owner}/{repo}/contents{/path*}
    • 参数:
      • owner:仓库所有者(字符串,必填)
      • repo:仓库名称(字符串,必填)
      • path:文件或目录路径(字符串,可选)
  • 获取指定分支的仓库内容 获取仓库中指定路径在给定分支上的内容。

    • 模板:repo://{owner}/{repo}/refs/heads/{branch}/contents{/path*}
    • 参数:
      • owner:仓库所有者(字符串,必填)
      • repo:仓库名称(字符串,必填)
      • branch:分支名称(字符串,必填)
      • path:文件或目录路径(字符串,可选)
  • 获取指定提交的仓库内容 获取仓库中指定路径在给定提交上的内容。

    • 模板:repo://{owner}/{repo}/sha/{sha}/contents{/path*}
    • 参数:
      • owner:仓库所有者(字符串,必填)
      • repo:仓库名称(字符串,必填)
      • sha:提交 SHA(字符串,必填)
      • path:文件或目录路径(字符串,可选)
  • 获取指定标签的仓库内容 获取仓库中指定路径在给定标签上的内容。

    • 模板:repo://{owner}/{repo}/refs/tags/{tag}/contents{/path*}
    • 参数:
      • owner:仓库所有者(字符串,必填)
      • repo:仓库名称(字符串,必填)
      • tag:标签名称(字符串,必填)
      • path:文件或目录路径(字符串,可选)
  • 获取指定拉取请求的仓库内容 获取仓库中指定路径在给定拉取请求上的内容。

    • 模板:repo://{owner}/{repo}/refs/pull/{prNumber}/head/contents{/path*}
    • 参数:
      • owner:仓库所有者(字符串,必填)
      • repo:仓库名称(字符串,必填)
      • prNumber:拉取请求编号(字符串,必填)
      • path:文件或目录路径(字符串,可选)

库用法

目前应将此模块导出的 Go API 视为不稳定,并且可能会发生破坏性变更。未来我们可能会提供稳定性保证;如果你认为某个用例需要此保证,请提交问题。

许可证

本项目采用 MIT 开源许可证的条款授权。完整条款请参阅 MIT。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。