GitHub MCP服务器
GitHub MCP服务器是一个 模型上下文协议(MCP) 服务器,提供与GitHub API的无缝集成,实现高级 开发人员和工具的自动化和交互能力。
](https://insiders.vscode.dev/redirect/mcp/install?name=github&inputs=%5B%7B%22id%22%3A%22github_token%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22GitHub%20Personal%20Access%20Token%22%2C%22password%22%3Atrue%7D%5D&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22GITHUB_PERSONAL_ACCESS_TOKEN%22%2C%22ghcr.io%2Fgithub%2Fgithub-mcp-server%22%5D%2C%22env%22%3A%7B%22GITHUB_PERSONAL_ACCESS_TOKEN%22%3A%22%24%7Binput%3Agithub_token%7D%22%7D%7D) ](https://insiders.vscode.dev/redirect/mcp/install?name=github&inputs=%5B%7B%22id%22%3A%22github_token%22%2C%22type%22%3A%22promptString%22%2C%22description%22%3A%22GitHub%20Personal%20Access%20Token%22%2C%22password%22%3Atrue%7D%5D&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22GITHUB_PERSONAL_ACCESS_TOKEN%22%2C%22ghcr.io%2Fgithub%2Fgithub-mcp-server%22%5D%2C%22env%22%3A%7B%22GITHUB_PERSONAL_ACCESS_TOKEN%22%3A%22%24%7Binput%3Agithub_token%7D%22%7D%7D&quality=insiders)
用例
- 自动化GitHub工作流和流程。
- 从GitHub存储库中提取和分析数据。
- 构建与GitHub生态系统交互的AI驱动工具和应用程序。
先决条件
- 要在容器中运行服务器,您需要 码头工人 安装。
- 安装Docker后,您还需要确保Docker正在运行。
- 最后,你需要 .
MCP服务器可以使用许多GitHub API,因此请启用您认为授予AI工具的权限(要了解有关访问令牌的更多信息,请查看 文档).
安装
使用VS代码
为了快速安装,请使用此README顶部的一键安装按钮之一。完成该流程后,切换代理模式(位于副驾驶聊天文本输入处),服务器将启动。
对于手动安装,请将以下JSON块添加到VS Code中的用户设置(JSON)文件中。您可以按 Ctrl + Shift + P 和打字 Preferences: Open User Settings (JSON).
您可以选择将其添加到名为的文件中 .vscode/mcp.json 在您的工作空间中。这将允许您与他人共享配置。
请注意mcp中不需要密钥.vscode/mcp.json文件。
{
"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服务器工具的信息 代理模式文档.
使用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": ""
}
}
}
}从源代码构建
如果你没有Docker,你可以使用 go build 在 cmd/github-mcp-server 目录,并使用 github-mcp-server stdio 命令与 GITHUB_PERSONAL_ACCESS_TOKEN 将环境变量设置为您的令牌。要指定生成的输出位置,请使用 -o 旗帜。您应该将服务器配置为使用构建的可执行文件作为其 command例如:
{
"mcp": {
"servers": {
"github": {
"command": "/path/to/github-mcp-server",
"args": ["stdio"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": ""
}
}
}
}
}工具配置
GitHub MCP Server支持通过以下方式启用或禁用特定功能组 --toolsets 旗帜。这允许您控制哪些GitHub API功能可用于您的人工智能工具。仅启用所需的工具集可以帮助LLM进行工具选择并减少上下文大小。
可用工具集
以下工具集可用(默认情况下都处于打开状态):
| 工具集 | 说明 |
|---|---|
repos | 与存储库相关的工具(文件操作、分支、提交) |
issues | 与问题相关的工具(创建、阅读、更新、评论) |
users | 与GitHub用户相关的任何内容 |
pull_requests | 拉取请求操作(创建、合并、审核) |
code_security | 代码扫描警报和安全功能 |
experiments | 实验特征(不稳定) |
指定工具集
要指定LLM可用的工具集,可以通过两种方式传递允许列表:
- 使用命令行参数:
github-mcp-server --toolsets repos,issues,pull_requests,code_security- 使用环境变量:
GITHUB_TOOLSETS="repos,issues,pull_requests,code_security" ./github-mcp-server环境变量 GITHUB_TOOLSETS 如果两者都提供,则优先于命令行参数。
在Docker中使用工具集
使用Docker时,可以将工具集作为环境变量传递:
docker run -i --rm \
-e GITHUB_PERSONAL_ACCESS_TOKEN= \
-e GITHUB_TOOLSETS="repos,issues,pull_requests,code_security,experiments" \
ghcr.io/github/github-mcp-server“全部”工具集
特殊工具集 all 可以提供以启用所有可用的工具集,而不管任何其他配置如何:
./github-mcp-server --toolsets all或者使用环境变量:
GITHUB_TOOLSETS="all" ./github-mcp-server动态工具发现
备注:此功能目前处于测试阶段,可能无法在所有环境中使用。请测试一下,如果您遇到任何问题,请告诉我们。
您可以启用动态工具集发现,而不是从启用所有工具开始。动态工具集允许MCP主机根据用户提示列出并启用工具集。这应该有助于避免模型被可用工具的剪切数量混淆的情况。
使用动态工具发现
使用二进制时,您可以传递 --dynamic-toolsets 旗帜。
./github-mcp-server --dynamic-toolsets使用Docker时,可以将工具集作为环境变量传递:
docker run -i --rm \
-e GITHUB_PERSONAL_ACCESS_TOKEN= \
-e GITHUB_DYNAMIC_TOOLSETS=1 \
ghcr.io/github/github-mcp-serverGitHub企业服务器
国旗 --gh-host 以及环境变量 GITHUB_HOST 可用于设置 GitHub企业服务器主机名。
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 -获取已验证用户的详细信息
- 无需参数
问题
- 获取问题 -获取存储库中问题的内容
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - issue_number:问题编号(编号,必填)
- 获取问题注释 -获取GitHub问题的评论
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - issue_number:问题编号(编号,必填)
- 创建_发行 -在GitHub存储库中创建新问题
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - title:发行标题(字符串,必填) - body:发布正文内容(字符串,可选) - assignees:要分配给此问题的用户名(string\[\],可选) - labels:应用于此问题的标签(string\[\],可选)
- add_issue_comment -向问题添加评论
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - issue_number:问题编号(编号,必填) - body:注释文本(字符串,必填)
- list_issues -列出和筛选存储库问题
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - state:按状态筛选(“打开”、“关闭”、“全部”)(字符串,可选) - labels:要筛选的标签(string\[\],可选) - sort:排序方式(“已创建”、“已更新”、“注释”)(字符串,可选) - direction:排序方向('sc','sec')(字符串,可选) - since:按日期筛选(ISO 8601时间戳)(字符串,可选) - page:页码(数字,可选) - perPage:每页结果(数量,可选)
- update_issue -更新GitHub存储库中的现有问题
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - issue_number:要更新的问题编号(编号,必填) - title:新标题(字符串,可选) - body:新描述(字符串,可选) - state:新状态(“打开”或“关闭”)(字符串,可选) - labels:新标签(string\[\],可选) - assignees:新受让人(string\[\],可选) - milestone:新里程碑编号(编号,可选)
- 搜索问题 -搜索问题并提取请求
- query:搜索查询(字符串,必填) - sort:排序字段(字符串,可选) - order:排序顺序(字符串,可选) - page:页码(数字,可选) - perPage:每页结果(数量,可选)
拉取请求
- get_pull_request -获取特定拉取请求的详细信息
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - pullNumber:拉取请求号(number,必填)
- list_pull_requests -列出和筛选存储库拉取请求
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - state:PR状态(字符串,可选) - sort:排序字段(字符串,可选) - direction:排序方向(字符串,可选) - perPage:每页结果(数量,可选) - page:页码(数字,可选)
- 合并请求 -合并拉取请求
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - pullNumber:拉取请求号(number,必填) - commit_title:合并提交的标题(字符串,可选) - commit_message:合并提交消息(字符串,可选) - merge_method:合并方法(字符串,可选)
- get_pull_request_files -获取拉取请求中更改的文件列表
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - pullNumber:拉取请求号(number,必填)
- get_pull_request_status -获取拉取请求的所有状态检查的组合状态
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - pullNumber:拉取请求号(number,必填)
- update_pull_request_branch -使用基础分支的最新更改更新拉取请求分支
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - pullNumber:拉取请求号(number,必填) - expectedHeadSha:拉取请求的HEAD引用的预期SHA(字符串,可选)
- get_pull_request_comments -获取拉取请求的评论
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - pullNumber:拉取请求号(number,必填)
- get_pull_request_reviews -获取拉取请求的评论
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - pullNumber:拉取请求号(number,必填)
- create_pull_request_review -对拉取请求审核创建审核
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - pullNumber:拉取请求号(number,必填) - body:查看评论文本(字符串,可选) - event:审核操作(“PPROVE”、“REQUEST_CHANGES”、“COMMENT”)(字符串,必填) - commitId:提交审查的SHA(字符串,可选) - comments:特定于行的注释对象数组,用于对拉取请求更改进行注释(数组,可选) - 对于内联注释:提供 path, position (或 line),以及 body - 对于多行评论:提供 path, start_line, line,可选 side/start_side,以及 body
- create_pull_request -创建新的pull请求
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - title:PR标题(字符串,必填) - body:PR描述(字符串,可选) - head:包含更改的分支(字符串,必填) - base:要合并的分支(字符串,必填) - draft:创建为PR草稿(布尔值,可选) - maintainer_can_modify:允许维护者编辑(布尔值,可选)
- add_pull_request_review_comment -向拉取请求添加评论或回复现有评论
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - pull_number:拉取请求号(number,必填) - body:审查意见的文本(字符串,必填) - commit_id:提交评论的SHA(字符串,除非使用in_reply_to,否则为必填项) - path:需要注释的文件的相对路径(字符串,除非使用in_reply_to,否则是必需的) - line:注释应用于的拉取请求差异中blob的行(数字,可选) - side:要评论的差异侧(左或右)(字符串,可选) - start_line:对于多行注释,范围的第一行(数字,可选) - start_side:对于多行注释,diff的起始侧(左或右)(字符串,可选) - subject_type:注释的目标级别(行或文件)(字符串,可选) - in_reply_to:要回复的审核意见的ID(编号,可选)。指定后,只需要body,其他参数将被忽略。
- update_pull_request -更新GitHub存储库中现有的pull请求
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - pullNumber:拉取请求编号进行更新(编号,必填) - title:新标题(字符串,可选) - body:新描述(字符串,可选) - state:新状态(“打开”或“关闭”)(字符串,可选) - base:新的基础分支名称(字符串,可选) - maintainer_can_modify:允许维护者编辑(布尔值,可选)
仓库
- create_or_update_file -在存储库中创建或更新单个文件
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - path:文件路径(字符串,必填) - message:提交消息(字符串,必填) - content:文件内容(字符串,必填) - branch:分支名称(字符串,可选) - sha:更新时文件SHA(字符串,可选)
- list_brances -列出GitHub存储库中的分支
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - page:页码(数字,可选) - perPage:每页结果(数量,可选)
- 推送文件 -在一次提交中推送多个文件
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - branch:要推送的分支(字符串,必填) - files:要推送的文件,每个文件都有路径和内容(数组,必填) - message:提交消息(字符串,必填)
- search_repositories -搜索GitHub存储库
- query:搜索查询(字符串,必填) - sort:排序字段(字符串,可选) - order:排序顺序(字符串,可选) - page:页码(数字,可选) - perPage:每页结果(数量,可选)
- 创建存储库 -创建新的GitHub存储库
- name:存储库名称(字符串,必填) - description:存储库描述(字符串,可选) - private:存储库是否为私有(布尔值,可选) - autoInit:使用README自动初始化(布尔值,可选)
- 获取_文件_内容 -获取文件或目录的内容
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - path:文件路径(字符串,必填) - ref:Git引用(字符串,可选)
- fork存储 -分叉存储库
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - organization:目标组织名称(字符串,可选)
- create_branch -创建新分支
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - branch:新分支名称(字符串,必填) - sha:从SHA创建分支(字符串,必填)
- list_commits -获取存储库中分支的提交列表
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - sha:分支名称、标记或提交SHA(字符串,可选) - path:仅包含此文件路径的提交(字符串,可选) - page:页码(数字,可选) - perPage:每页结果(数量,可选)
- get_提交 -从存储库获取提交的详细信息
- owner:存储库所有者(字符串,必填)
- repo:存储库名称(字符串,必填)
- sha:提交SHA、分支名称或标记名称(字符串,必填)
- page:提交文件的页码(数字,可选)
- perPage:提交文件的每页结果(数量,可选)
- 搜索代码 -在GitHub存储库中搜索代码
- query:搜索查询(字符串,必填)
- sort:排序字段(字符串,可选)
- order:排序顺序(字符串,可选)
- page:页码(数字,可选)
- perPage:每页结果(数量,可选)
用户
- 搜索用户 -搜索GitHub用户
- query:搜索查询(字符串,必填) - sort:排序字段(字符串,可选) - order:排序顺序(字符串,可选) - page:页码(数字,可选) - perPage:每页结果(数量,可选)
代码扫描
- get_code_scanning_alert -获取代码扫描警报
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - alertNumber:警报号码(号码,必填)
- list_code_scanning_alerts -列出存储库的代码扫描警报
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - ref:Git引用(字符串,可选) - state:警报状态(字符串,可选) - severity:警报严重性(字符串,可选) - tool_name:用于代码扫描的工具的名称(字符串,可选)
秘密扫描
- get_secret_scanning_alert -获取秘密扫描警报
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - alertNumber:警报号码(号码,必填)
- list_secret_scaning_alerts -列出存储库的秘密扫描警报
- owner:存储库所有者(字符串,必填) - repo:存储库名称(字符串,必填) - state:警报状态(字符串,可选) - secret_type:在逗号分隔的列表中筛选的秘密类型(字符串,可选) - resolution:解析状态(字符串,可选)
资源
存储库内容
- 获取存储库内容
在特定路径检索存储库的内容。
- 模板: 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当前应被视为不稳定,并可能发生中断更改。未来,我们可能会提供稳定;如果存在有价值的用例,请提交一个问题。
许可证
该项目根据麻省理工学院开源许可证条款获得许可。请参考 麻省理工学院 完整的条款。
