关于 GitHub MCP Server
GitHub MCP Server 将 MCP 客户端和工具连接到 GitHub API,以执行仓库、Issue 和 Pull Request 操作。开发者可用它进行 GitHub 自动化和数据访问;支持通过 Docker 或 Go 构建的二进制运行,并可配置 GitHub Enterprise Server。
主要功能
- 01读取和管理 Issue
- 02创建并审查 Pull Request
- 03搜索仓库和 Issue
- 04创建或更新仓库文件
- 05配置 GitHub Enterprise Server 主机
- 06覆盖工具描述
适用场景
- 01自动化 Issue 工作流
- 02检查和更新 Pull Request
- 03搜索仓库数据
- 04向仓库提交文件
MCP 相关
它将 GitHub API 操作作为工具提供给 MCP 客户端,包括 Issue、Pull Request 和仓库操作。可配置用于 VS Code、Claude Desktop 和 GitHub Enterprise Server。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-serverGITHUB_PERSONAL_ACCESS_TOKEN密钥本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/github/github-mcp-serverstdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
GitHub MCP 服务
GitHub MCP 服务是一个 Model Context Protocol(MCP)服务,可与 GitHub API 无缝集成,为开发者和工具提供高级自动化和交互能力。
使用场景
- 自动化 GitHub 工作流和流程。
- 从 GitHub 仓库提取和分析数据。
- 构建可与 GitHub 生态系统交互的 AI 工具和应用。
前置条件
- 要在容器中运行服务,需要安装 Docker。
- 安装 Docker 后,还需要确保 Docker 正在运行。
- 最后,需要创建 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。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。