如何在 Claude Code 中安装 GitHub MCP(远程或本地)
如何在 Claude Code 中安装 GitHub MCP:用 PAT 接入官方远程服务器,或用 Docker OAuth 在本地运行,选择工具集和只读模式,并解决常见报错。
简短回答
要在 Claude Code 中安装 GitHub MCP,先创建一个 GitHub 个人访问令牌(PAT),然后运行 claude mcp add --transport http github https://api.githubcopilot.com/mcp/ --header "Authorization: Bearer $GITHUB_PAT",启动 claude,在 /mcp 中确认 github 带有对勾。这样连接的是 GitHub 官方托管的服务器,无需安装,也不用自己更新。
如果不想管理令牌,也可以用 Docker 在本地运行服务器:首次使用时它会在浏览器中打开 GitHub 登录页,并且只在内存中保存令牌。两种方式使用的都是来自 github/github-mcp-server 的官方 GitHub MCP 服务器。
远程还是本地?
| 远程(GitHub 托管) | 本地(Docker 或二进制) | |
|---|---|---|
| 端点 | https://api.githubcopilot.com/mcp/ | 在你的机器上通过 stdio 运行 |
| Claude Code 中的认证 | Authorization 头中的 PAT | 内置 OAuth 登录或 PAT |
| 需要 Docker | 否 | Docker,或者发布版二进制 |
| 更新 | 自动 | 自己拉取镜像或二进制 |
| 额外工具 | 远程专属工具集,例如 copilot_spaces | 核心工具集 |
| 选择工具的方式 | URL 路径或 X-MCP-* 请求头 | GITHUB_TOOLSETS、--toolsets |
| GitHub Enterprise Server | 本文不涉及 | 通过本地服务器支持 |
大多数人应该从远程开始。如果你想用 OAuth 代替长期有效的令牌、需要 GitHub Enterprise Server,或者必须让流量留在本机,就选本地。
前置条件
- 已安装 Claude Code。按 GitHub 官方指南的建议,在项目目录中打开它,让配置作用范围更清晰。
- 远程服务器或基于 PAT 的本地配置需要一个 GitHub 个人访问令牌。在 github.com/settings/personal-access-tokens/new 创建。
- 如果选本地 Docker 方案,需要安装并运行 Docker。
创建令牌
只授予需要的权限。GitHub README 列出了以下经典权限范围作为基础:
| 权限范围 | 用途 |
|---|---|
repo | 仓库、Issue 和 Pull Request 操作 |
read:org | 组织和团队访问 |
read:packages | Docker 镜像访问 |
如果使用细粒度令牌,选择具体的仓库,以及与你打算启用的工具集相匹配的权限。你的组织也可能限制 PAT 或要求审批。每个项目用不同的令牌,定期轮换,绝不提交到仓库。
把令牌放进环境变量或被 gitignore 的 .env 文件中,避免留在 shell 历史里:
export GITHUB_PAT="your_token_here" # placeholder, not a real token
方案 1:远程服务器(推荐)
第 1 步:添加服务器
Claude Code MCP 文档中的写法:
claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
--header "Authorization: Bearer $GITHUB_PAT"
GitHub 的 Claude 安装指南对 Claude Code 2.1.1 及更新版本使用 add-json:
claude mcp add-json github \
'{"type":"http","url":"https://api.githubcopilot.com/mcp","headers":{"Authorization":"Bearer '"$GITHUB_PAT"'"}}'
两者保存的内容相同。shell 会在 Claude Code 读取之前把 $GITHUB_PAT 替换成真实值,所以 Claude Code 配置里保存的是令牌本身,而不是变量名。
第 2 步:选择作用域
| 作用域 | 参数 | 保存位置 | 适用场景 |
|---|---|---|---|
| local(默认) | 无 | ~/.claude.json,仅当前项目 | 一个仓库,只有你用 |
| user | --scope user | ~/.claude.json,所有项目 | 希望在所有项目中使用 GitHub(最常见) |
| project | --scope project | 仓库中的 .mcp.json | 整个团队都要用 |
使用 project 作用域时,绝不要把令牌写进 .mcp.json。Claude Code 会展开这个文件中的环境变量,所以提交下面的内容,让每个成员自己设置 GITHUB_PAT:
{
"mcpServers": {
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "Bearer ${GITHUB_PAT}"
}
}
}
}
远程服务器能用 OAuth 吗?
GitHub README 指出,远程服务器的 OAuth 要求每个宿主应用都注册了 GitHub App 或 OAuth App,而任何支持远程服务器的宿主都可以使用 PAT 认证。因此 GitHub 的 Claude 指南使用的是 PAT。如果你想用浏览器登录代替令牌,下面的本地服务器内置了 OAuth。
方案 2:用 Docker 运行本地服务器
OAuth 登录(无需令牌)
官方镜像内置了 GitHub 的 OAuth 应用凭据,所以在 github.com 上你什么都不用提供。只需把固定的回调端口发布到回环地址:
claude mcp add github -e GITHUB_OAUTH_CALLBACK_PORT=8085 -- \
docker run -i --rm -p 127.0.0.1:8085:8085 \
-e GITHUB_OAUTH_CALLBACK_PORT ghcr.io/github/github-mcp-server
首次调用工具时,服务器会打开 GitHub 的授权页面。令牌只保存在内存中,所以服务器重启后需要重新登录。
使用 PAT
PAT 的优先级高于 OAuth:
claude mcp add github -e GITHUB_PERSONAL_ACCESS_TOKEN=$GITHUB_PAT -- \
docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server
注意 -e 出现了两次:一次在 -- 之前(由 Claude Code 设置变量),一次在 docker run 命令里(由 Docker 传入容器)。
不用 Docker:发布版二进制
从发布页面下载二进制并加入 PATH。使用官方构建时,OAuth 不需要任何参数,会随机选择一个回环端口:
claude mcp add github -- github-mcp-server stdio
或者按 GitHub 指南使用 PAT:
claude mcp add-json github \
'{"command":"github-mcp-server","args":["stdio"],"env":{"GITHUB_PERSONAL_ACCESS_TOKEN":"YOUR_GITHUB_PAT"}}'
工具集、只读模式和 Lockdown
服务器默认启用 context、repos、issues、pull_requests 和 users 这几个工具集。只启用需要的工具集,可以帮助 Claude 选对工具,也能减少上下文占用。其他工具集包括 actions、code_security、dependabot、discussions、gists、notifications、orgs、projects、labels 等;all 会启用全部。
| 设置 | 远程服务器 | 本地服务器 |
|---|---|---|
| 选择工具集 | 请求头 X-MCP-Toolsets: repos,issues,或类似 https://api.githubcopilot.com/mcp/x/issues 的工具集 URL | GITHUB_TOOLSETS="repos,issues" 或 --toolsets |
| 选择单个工具 | X-MCP-Tools 请求头 | GITHUB_TOOLS 或 --tools |
| 只读 | X-MCP-Readonly: true,或在 URL 末尾加 /readonly | GITHUB_READ_ONLY=1 或 --read-only |
| Lockdown | X-MCP-Lockdown: true | GITHUB_LOCKDOWN_MODE=1 或 --lockdown-mode |
| 抢先体验功能 | /insiders URL 或 X-MCP-Insiders: true | GITHUB_INSIDERS=true 或 --insiders |
一个只读、限定在 repos、issues 和 pull requests 的远程配置,写成 .mcp.json 条目如下:
{
"mcpServers": {
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "Bearer ${GITHUB_PAT}",
"X-MCP-Toolsets": "repos,issues,pull_requests",
"X-MCP-Readonly": "true"
}
}
}
}
Lockdown 模式会在公开仓库中隐藏没有推送权限的作者所发布的内容。它是防御来自不可信 Issue 和评论的提示词注入的尽力而为的过滤器,并非安全边界,但当 Claude 读取公开仓库时值得开启。参见 MCP 安全最佳实践。
验证连接
claude mcp list
claude mcp get github
在会话中,/mcp 应显示 github 带有对勾。claude mcp add 不会校验凭据,所以错误的令牌在添加时也会被接受,只会在这里失败,并在失败详情中显示 401。
示例提示词
- 「列出这个仓库中所有打开的 Pull Request,并总结每个改了什么。」
- 「读一下 Issue 123,找到它提到的代码,并给出修复方案。」
- 「main 分支上最近一次 GitHub Actions 运行为什么失败?给我看失败的步骤。」
- 「创建一个分支,提交我们刚才的修改,并开一个关联 Issue 123 的草稿 PR。」
- 「审查 PR 45,对看起来有风险的地方留下评论。」
- 「这个仓库里有没有未处理的 Dependabot 或代码扫描告警?」
最后两个需要启用 actions、dependabot 或 code_security 工具集,并且令牌有对应权限。
故障排查
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
/mcp 中显示 ✘ 且带 401 | 令牌缺失、过期或错误 | 新建 PAT,然后 claude mcp remove github 并重新添加 |
| 部分仓库或组织返回 403 | 令牌权限不足,或组织限制 PAT | 补充权限或仓库;请组织所有者审批令牌 |
add-json 返回 Invalid input(Windows) | 已知的引号问题 | 改用 claude mcp add --transport http 写法 |
PowerShell 报 missing required argument 'name' | 参数顺序问题 | 把 github 紧跟在 claude mcp add 之后 |
| Docker 服务器启动失败 | Docker 未运行,或镜像未拉取 | 启动 Docker Desktop;运行 docker pull ghcr.io/github/github-mcp-server |
| 找不到预期的工具 | 工具集未启用,或开启了只读 | 通过请求头、URL 或 GITHUB_TOOLSETS 添加工具集 |
| 大 diff 出现输出过大警告 | 工具输出太长 | 一次只请求一个文件,或调高 MAX_MCP_OUTPUT_TOKENS |
已经在用 gh CLI 了?Claude Code 可以通过 shell 调用它,很多任务不需要 MCP 也能完成。当你需要结构化的工具、工具集限制、只读模式和 Lockdown,而不是开放 shell 权限时,MCP 服务器才真正体现价值。
下一步
连上 GitHub 之后,可以再加一些为它提供工作的服务器:用 Playwright MCP 在开 PR 之前先在浏览器里验证修复,或用 Supabase MCP 处理数据库变更。更多开发工具可以在 MCP 服务器目录中浏览,作用域、OAuth 和服务器管理请看 Claude Code MCP 指南。
常见问题
如何把 GitHub MCP 服务器添加到 Claude Code?
- 先创建 GitHub 个人访问令牌,然后运行 'claude mcp add --transport http github https://api.githubcopilot.com/mcp/ --header',并传入包含令牌的 'Authorization: Bearer' 值。启动 Claude Code,在 /mcp 中确认 github 带有对勾。
在 Claude Code 中使用 GitHub MCP 服务器可以不用个人访问令牌吗?
- 可以,用 Docker 或发布版二进制运行本地服务器即可。官方构建内置 OAuth,首次使用时会在浏览器中打开 GitHub 登录页,令牌只保存在内存中。
GitHub MCP 服务器需要哪些令牌权限?
- GitHub 建议:仓库、Issue 和 PR 操作用 repo,组织访问用 read:org,镜像访问用 read:packages。只授予所启用工具集需要的权限,并优先使用限定具体仓库的细粒度令牌。
如何让 GitHub MCP 服务器只读?
- 远程服务器可以发送值为 true 的 X-MCP-Readonly 请求头,或在 URL 末尾加上 /readonly。本地服务器可以设置 GITHUB_READ_ONLY=1 或传入 --read-only。