mcpField
G
GitHub MCP Server

GitHub MCP Server

本地服务
github.com/cloudbarista版本控制082 周前更新

关于 GitHub MCP Server

GitHub MCP Server 将 GitHub API 操作提供给开发者和工具,涵盖仓库、议题、拉取请求及搜索等。它支持令牌访问、GitHub Enterprise 主机配置和工具描述覆盖。

主要功能

  1. 01读取和管理议题
  2. 02创建并审查拉取请求
  3. 03搜索仓库、代码和用户
  4. 04管理仓库文件与分支
  5. 05配置 GitHub Enterprise 主机
  6. 06覆盖工具描述

适用场景

  1. 01自动化 GitHub 议题工作流
  2. 02审查和更新拉取请求
  3. 03查找代码或仓库
  4. 04读取或修改仓库内容

MCP 相关

它向 MCP 客户端提供 GitHub API 操作工具。可通过 Docker 运行或从源码构建,并使用 GitHub Personal Access Token 进行身份验证。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"cloudbarista": {
"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. 创建 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 主机名。

i18n / 覆盖描述

可以在二进制文件所在目录中创建 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

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

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

export GITHUB_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION="an alternative description"

工具

用户
  • get_me - 获取已认证用户的详细信息
    • 无需参数
问题
  • get_issue - 获取仓库中某个问题的内容

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

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

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

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

    • owner:仓库所有者(string,必填)
    • repo:仓库名称(string,必填)
    • issue_number:要更新的问题编号(number,必填)
    • title:新标题(string,可选)
    • body:新描述(string,可选)
    • state:新状态('open' 或 'closed')(string,可选)
    • labels:新标签(string[],可选)
    • assignees:新指派对象(string[],可选)
    • milestone:新里程碑编号(number,可选)
  • search_issues - 搜索问题和拉取请求

    • query:搜索查询(string,必填)
    • sort:排序字段(string,可选)
    • order:排序顺序(string,可选)
    • page:页码(number,可选)
    • per_page:每页结果数(number,可选)
拉取请求
  • 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(数字)和 body(字符串)(数组,可选)
  • create_pull_request - 创建新的拉取请求

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • title:PR 标题(字符串,必填)
    • body:PR 描述(字符串,可选)
    • head:包含变更的分支(字符串,必填)
    • base:要合并到的分支(字符串,必填)
    • draft:创建为草稿 PR(布尔值,可选)
    • maintainer_can_modify:允许维护者编辑(布尔值,可选)
仓库
  • create_or_update_file - 在仓库中创建或更新单个文件

    • owner:仓库所有者(字符串,必填)
    • repo:仓库名称(字符串,必填)
    • path:文件路径(字符串,必填)
    • message:提交消息(字符串,必填)
    • content:文件内容(字符串,必填)
    • branch:分支名称(字符串,可选)
    • sha:更新文件时使用的文件 SHA(字符串,可选)
  • 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:每页结果数(数字,可选)
搜索
  • 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:文件或目录路径(字符串,可选)

许可证

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

评论

支持 Markdown

第一次接触 MCP?

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

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