GitHub MCP服务器
本地模型上下文协议(MCP)服务器,连接到GitHub API,并为Claude Desktop(或任何MCP客户端)公开简单工具。它可以获取GitHub用户信息,递归列出存储库文件,读取文件内容,创建问题和拉取请求。
此服务器可以做什么
暴露的工具
获取GitHub用户简介
- 输入:GitHub用户名
- 输出:用户个人信息字符串(或回退消息)
获取GitHub存储库文件树(递归)
- 输入:所有者、存储库名称、起始路径(例如。
""根) - 输出:表示文件夹和文件的嵌套字典
从存储库获取文件内容
- 输入:所有者、存储库名称、文件路径
- 输出:原始文件内容(文本)
创建分支并打开拉取请求
- 输入:仓库、基础分支、新分支名称、拉取请求标题/正文、可提交的可选文件
- 输出:拉取请求URL或错误
创建GitHub问题
- 输入:存储库、标题、正文、可选标签和受让人
- 输出:问题URL或错误
项目结构
| 文件 | 目的 |
|---|---|
main.py | MCP服务器入口点(此处定义了工具) |
.env / .env.example | 环境变量(令牌) |
pyproject.toml | 紫外线依赖性 |
uv.lock | 锁定文件(由uv生成) |
README.md | 文件 |
需求
- Windows、macOS或Linux
uv安装- GitHub个人访问令牌(PAT)可作为
GITHUB_TOKEN
最小推荐范围:
- 公共存储库:通常可以使用默认权限
- 私有仓库:需要私有仓库访问权限
- 创建问题和拉取请求:需要存储库写入权限
设置
1) 创建并配置GitHub令牌
在GitHub设置中创建GitHub个人访问令牌,然后创建 .env 项目根目录中的文件:
GITHUB_TOKEN=your_token_here2) 使用uv添加依赖项
uv add "mcp[cli]" PyGithub python-dotenv requests
uv syncPyGithub提供from github import Github,python-dotenv负载.env,以及requests被使用get_file_content工具。
在本地运行
uv run --project C:\Users\jaiso\PyProj\github-mcp-server-py mcp run main.pyClaude桌面配置
{
"mcpServers": {
"Github": {
"command": "C:\\Users\\jaiso\\.local\\bin\\uv.EXE",
"args": [
"run",
"--project",
"C:\\Users\\jaiso\\PyProj\\github-mcp-server-py",
"mcp",
"run",
"C:\\Users\\jaiso\\PyProj\\github-mcp-server-py\\main.py"
]
}
}
}重要提示: 不要使用--with mcp[cli]--它不包括PyGithub以及其他依赖关系。
使用示例
获取用户简介
username:JAIS0N
- 返回bio字符串,或返回“No bio available”消息。
从根目录列出存储库文件
owner:JAIS0N
repo:netflix-clone-mern
path:""(空字符串)
- 返回文件夹和文件的嵌套字典。
读取文件
owner:JAIS0N
repo:netflix-clone-mern
path:README.md
- 返回原始文本内容。
创建问题
repo_name:JAIS0N/netflix-clone-merntitle:Bug: Login page crashesbody:复制步骤。..- 返回问题URL。
创建分支并拉取请求
repo_name:JAIS0N/netflix-clone-mernbase_branch:mainnew_branch:feature/readme-updatepr_title:Update READMEfiles_to_commit:可选词典{ "README.md": "new content" }- 返回拉取请求URL。
注意事项和限制
文件读取中的默认分支假设
get_file_content 当前使用以下方式获取文件:
https://raw.githubusercontent.com/{owner}/{repo}/main/{path}这假设默认分支为 main.使用的存储库 master 否则另一个分支将返回错误。
建议改进: 通过GitHub API获取存储库默认分支,并动态构建原始URL。
大型存储库
递归文件列表对于大型存储库来说可能很慢,并且可能会达到GitHub API的速率限制。
建议改进:
- 添加可选深度限制
- 添加分页和缓存
- 使用GitHub Git Tree API以加快上市速度
故障排除
| 问题 | 原因 | 修复 |
|---|---|---|
| Claude Desktop中的“服务器已断开连接” | 缺少依赖项,缺少 GITHUB_TOKEN中的权限不足或运行时错误 main.py | 使用 uv run --project ...;检查日志并从终端运行以进行全面追溯 |
| “没有名为github的模块” | PyGithub 未安装在活动环境中 | 运行 uv add PyGithub && uv sync;确保Claude配置使用 --project |
| “获取文件时出错:404” | 原始URL分支错误、文件路径错误或文件不存在 | 确认文件路径;更新 get_file_content 使用存储库的默认分支 |
安全
- 永不承诺
.env源代码控制。 - 使用
.env.example出于记录目的。 - 对待
GITHUB_TOKEN就像密码一样。
