内容
# GitHub MCP Server
GitHub MCP Server 是一个 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) 服务器,提供与 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 驱动工具和应用程序。
## 前提条件
1. 要在容器中运行服务器,您需要安装 [Docker](https://www.docker.com/)。
2. [创建一个 GitHub 个人访问令牌](https://github.com/settings/personal-access-tokens/new)。
MCP 服务器可以使用许多 GitHub API,因此请启用您觉得可以授予 AI 工具的权限(要了解有关访问令牌的更多信息,请查看 [文档](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens))。
## 安装
### 在 VS Code 中的使用
要快速安装,请使用本 README 顶部的其中一个一键安装按钮。
对于手动安装,请将以下 JSON 块添加到 VS Code 的用户设置 (JSON) 文件中。您可以通过按 `Ctrl + Shift + P` 并输入 `Preferences: Open User Settings (JSON)` 来完成此操作。
可选地,您可以将其添加到工作区中的 `.vscode/mcp.json` 文件中。这将允许您与他人共享配置。
> 请注意,在 `.vscode/mcp.json` 文件中不需要 `mcp` 键。
```json
{
"mcp": {
"inputs": [
{
"type": "promptString",
"id": "github_token",
"description": "GitHub 个人访问令牌",
"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 mode documentation](https://code.visualstudio.com/docs/copilot/chat/mcp-servers)。
### 与 Claude Desktop 的使用
```json
{
"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_PERSONAL_ACCESS_TOKEN` 环境变量的 `github-mcp-server stdio` 命令,令其值为您的令牌。
## GitHub Enterprise Server
标志 `--gh-host` 和环境变量 `GH_HOST` 可用于设置 GitHub Enterprise Server 的主机名。
## i18n / 重写描述
工具的描述可以通过在与二进制文件相同的目录中创建一个 `github-mcp-server-config.json` 文件来重写。
该文件应包含一个 JSON 对象,其中工具名称作为键,新描述作为值。例如:
```json
{
"TOOL_ADD_ISSUE_COMMENT_DESCRIPTION": "一个替代描述",
"TOOL_CREATE_BRANCH_DESCRIPTION": "在 GitHub 仓库中创建一个新分支"
}
```
您可以通过使用 `--export-translations` 标志运行二进制文件来创建当前翻译的导出。
此标志将保留您所做的任何翻译/重写,同时添加自上次导出以来已添加到二进制文件中的任何新翻译。
```sh
./github-mcp-server --export-translations
cat github-mcp-server-config.json
```
您还可以使用环境变量来重写描述。环境变量名称与 JSON 文件中的键相同,前缀为 `GITHUB_MCP_`,并且全部为大写。
例如,要重写 `TOOL_ADD_ISSUE_COMMENT_DESCRIPTION` 工具,您可以设置以下环境变量:
```sh
export 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`: 指定给此问题的用户名 (字符串数组,选填)
- `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`: 每页结果数 (数字,选填)
### Pull Requests
- **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`: 允许维护者编辑 (布尔值,选填)
### 仓库
- **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](./LICENSE)。
连接信息
猜你喜欢
暂无推荐服务器