GitHub MCP 服务器
GitHub MCP Server 是一个模型上下文协议 (MCP)服务器,可与 GitHub API 无缝集成,为开发人员和工具提供高级自动化和交互功能。
用例
- 自动化 GitHub 工作流程和流程。
- 从 GitHub 存储库提取和分析数据。
- 构建与 GitHub 生态系统交互的 AI 驱动工具和应用程序。
先决条件
- 要在容器中运行服务器,您需要安装Docker 。
- Docker 安装完成后,您还需要确保 Docker 正在运行。该镜像是公开的;如果您在拉取镜像时遇到错误,则可能是您的 token 已过期,需要
docker logout ghcr.io
。 - 最后,您需要创建一个 GitHub 个人访问令牌。MCP 服务器可以使用许多 GitHub API,因此请启用您认为合适的权限来授予您的 AI 工具(要了解有关访问令牌的更多信息,请查看文档)。
安装
与 VS Code 一起使用
如需快速安装,请使用本自述文件顶部的一键安装按钮之一。完成该流程后,切换至代理模式(位于 Copilot 聊天文本输入框旁),服务器将启动。
如需手动安装,请将以下 JSON 块添加到 VS Code 中的“用户设置 (JSON)”文件中。您可以按下Ctrl + Shift + P
并输入Preferences: Open User Settings (JSON)
来执行此操作。
或者,您可以将类似的示例(即不带 mcp 键)添加到工作区中名为.vscode/mcp.json
的文件中。这样您就可以与其他人共享配置。
有关使用 MCP 服务器工具的更多信息,请参阅 VS Code 的代理模式文档。
与 Claude Desktop 一起使用
从源代码构建
如果您没有 Docker,可以使用go build
在cmd/github-mcp-server
目录中构建二进制文件,并使用github-mcp-server stdio
命令,并将GITHUB_PERSONAL_ACCESS_TOKEN
环境变量设置为您的令牌。要指定构建的输出位置,请使用-o
标志。您应该将服务器配置为使用构建的可执行文件作为其command
。例如:
工具配置
GitHub MCP 服务器支持通过--toolsets
标志启用或禁用特定的功能组。这允许您控制哪些 GitHub API 功能可用于您的 AI 工具。仅启用您需要的工具集可以帮助 LLM 进行工具选择并减少上下文大小。
可用工具集
有以下几组工具可用(默认情况下全部启用):
工具集 | 描述 |
---|---|
repos | 与存储库相关的工具(文件操作、分支、提交) |
issues | 问题相关工具(创建、阅读、更新、评论) |
users | 与 GitHub 用户相关的任何内容 |
pull_requests | 拉取请求操作(创建、合并、审查) |
code_security | 代码扫描警报和安全功能 |
experiments | 实验性功能(不稳定) |
指定工具集
要指定想要提供给 LLM 的工具集,您可以通过两种方式传递允许列表:
- 使用命令行参数:
- 使用环境变量:
如果同时提供环境变量GITHUB_TOOLSETS
则环境变量优先于命令行参数。
使用 Docker 工具集
使用 Docker 时,您可以将工具集作为环境变量传递:
“全部”工具集
可以提供特殊工具all
来启用所有可用的工具集,而不管任何其他配置如何:
或者使用环境变量:
动态工具发现
注意:此功能目前处于测试阶段,可能并非在所有环境中都可用。请先进行测试,如果遇到任何问题请告知我们。
您可以启用动态工具集发现功能,而无需一开始就启用所有工具。动态工具集允许 MCP 主机根据用户提示列出并启用工具集。这有助于避免模型因可用工具数量过多而感到困惑的情况。
使用动态工具发现
使用二进制文件时,您可以传递--dynamic-toolsets
标志。
使用 Docker 时,您可以将工具集作为环境变量传递:
GitHub 企业服务器
可以使用--gh-host
标志和环境变量GITHUB_HOST
设置 GitHub Enterprise Server 主机名。请在主机名前添加https://
URI 格式前缀,否则默认为http://
而 GitHub Enterprise Server 不支持该格式。
i18n / 覆盖描述
可以通过在与二进制文件相同的目录中创建github-mcp-server-config.json
文件来覆盖工具的描述。
该文件应包含一个 JSON 对象,其中工具名称为键,新描述为值。例如:
您可以通过运行带有--export-translations
标志的二进制文件来创建当前翻译的导出。
此标志将保留您所做的任何翻译/覆盖,同时添加自上次导出以来添加到二进制文件的任何新翻译。
您还可以使用环境变量来覆盖描述。环境变量名称与 JSON 文件中的键相同,以GITHUB_MCP_
为前缀,且全部大写。
例如,要覆盖TOOL_ADD_ISSUE_COMMENT_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
:分配给此问题的用户名(string [],可选)labels
:应用于此问题的标签(string [],可选)
- add_issue_comment - 向问题添加评论
owner
:存储库所有者(字符串,必需)repo
:存储库名称(字符串,必需)issue_number
:发行编号(数字,必填)body
:评论文本(字符串,必需)
- list_issues - 列出并过滤存储库问题
owner
:存储库所有者(字符串,必需)repo
:存储库名称(字符串,必需)state
:按状态过滤(“打开”,“关闭”,“全部”)(字符串,可选)labels
:要过滤的标签(string [],可选)sort
:按(“创建”,“更新”,“评论”)排序(字符串,可选)direction
:排序方向('asc','desc')(字符串,可选)since
:按日期过滤(ISO 8601 时间戳)(字符串,可选)page
:页码(数字,可选)perPage
:每页结果数(数字,可选)
- update_issue - 更新 GitHub 存储库中的现有问题
owner
:存储库所有者(字符串,必需)repo
:存储库名称(字符串,必需)issue_number
:要更新的问题编号(数字,必填)title
:新标题(字符串,可选)body
:新描述(字符串,可选)state
:新状态(“打开”或“关闭”)(字符串,可选)labels
:新标签(string [],可选)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 ref 的预期 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
:注释适用的拉取请求差异中的 blob 行(数字,可选)side
:需要评论的差异的一侧(左或右)(字符串,可选)start_line
:对于多行注释,范围的第一行(数字,可选)start_side
:对于多行注释,差异的起始侧(左或右)(字符串,可选)subject_type
:评论的目标级别(行或文件)(字符串,可选)in_reply_to
:需要回复的评论 ID(数字,可选)。指定后,仅需填写正文,其他参数将被忽略。
- update_pull_request - 更新 GitHub 存储库中现有的拉取请求
owner
:存储库所有者(字符串,必需)repo
:存储库名称(字符串,必需)pullNumber
:要更新的拉取请求编号(数字,必填)title
:新标题(字符串,可选)body
:新描述(字符串,可选)state
:新状态(“打开”或“关闭”)(字符串,可选)base
:新的基础分支名称(字符串,可选)maintainer_can_modify
:允许维护者编辑(布尔值,可选)
- request_copilot_review - 请求 GitHub Copilot 审核拉取请求(实验性;取决于 GitHub API 支持)
owner
:存储库所有者(字符串,必需)repo
:存储库名称(字符串,必需)pullNumber
:拉取请求编号(数字,必填)- 注意:目前,此工具仅适用于 github.com
存储库
- 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 用户
q
:搜索查询(字符串,必需)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_scanning_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 目前应被视为不稳定,且可能存在重大变更。未来我们可能会提供稳定性;如果您发现有用例需要此 API,请提交问题。
执照
本项目遵循 MIT 开源许可证。请参阅MIT了解完整条款。
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
马瑞玉
Related MCP Servers
- PythonMIT License
- PythonGPL 3.0
- GoMIT License
- JavaScriptMIT License