一个基于 Model Context Protocol (MCP) 的 GitHub API 服务器,提供完整的 GitHub 仓库管理、分支管理、提交管理和搜索功能。
- 获取文件内容
- 创建、更新、删除文件
- 获取 README 文件
- 列出用户仓库
- 创建、更新、删除仓库
- 获取仓库信息
- 列出分支
- 获取分支信息
- 重命名分支
- 列出提交记录
- 比较提交差异
- 获取提交详情
- 搜索代码
- 搜索仓库
- 搜索用户
- 获取认证用户信息
- 获取 Git 树结构
- Go 1.24 或更高版本
- Docker (可选)
- GitHub Personal Access Token
- 克隆项目
git clone <repository-url>
cd github-mcp- 安装依赖
go mod download- 运行服务器
# stdio 模式
go run main.go --mode stdio
# SSE 模式
go run main.go --mode sse --port 8080
# Streamable HTTP 模式(默认)
go run main.go --mode streamable-http --port 8080- 构建镜像
docker build -t github-mcp:latest .- 运行容器
docker run -p 8080:8080 \
-e SERVER_PORT=8080 \
-e SERVER_MODE=streamable-http \
github-mcp:latest| 变量名 | 默认值 | 说明 |
|---|---|---|
SERVER_PORT |
8080 |
服务器监听端口 |
SERVER_MODE |
streamable-http |
服务器模式:stdio、sse 或 streamable-http |
--mode string 服务器模式 (默认: streamable-http)
--port string 服务器端口 (默认: 8080)标准输入/输出模式,适用于命令行工具集成。
./github-mcp --mode stdioServer-Sent Events 模式,适用于实时事件推送。
./github-mcp --mode sse --port 8080支持流式响应的 HTTP 服务器,适用于生产环境。
./github-mcp --mode streamable-http --port 8080访问端点:http://localhost:8080/mcp
所有 API 请求需要在 HTTP Header 中携带 GitHub Token:
Authorization: Bearer <your-github-token>
- 访问 GitHub Settings - Personal Access Tokens
- 点击 "Generate new token (classic)"
- 选择所需权限(建议权限):
repo- 完整的仓库访问权限user- 用户信息读取read:public_key- 读取公钥write:public_key- 写入公钥admin:public_key- 管理公钥read:ssh_signing_key- 读取 SSH 签名密钥write:ssh_signing_key- 写入 SSH 签名密钥admin:ssh_signing_key- 管理 SSH 签名密钥
# 获取用户信息
curl -X POST http://localhost:8080/mcp \
-H "Authorization: Bearer <your-token>" \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {
"name": "get_authenticated_user"
}
}'
# 列出仓库
curl -X POST http://localhost:8080/mcp \
-H "Authorization: Bearer <your-token>" \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {
"name": "list_repos_for_authenticated_user",
"arguments": {
"per_page": 10
}
}
}'github-mcp/
├── main.go # 主程序入口
├── dockerfile # Docker 构建文件
├── go.mod # Go 模块定义
├── go.sum # Go 依赖校验
├── README.md # 项目文档
└── tools/ # 工具包目录
├── common.go # 公共工具函数
├── branches/ # 分支管理工具
│ └── branches.go
├── commits/ # 提交管理工具
│ └── commits.go
├── git/ # Git 操作工具
│ └── tree.go
├── repositories/ # 仓库管理工具
│ ├── contents.go
│ └── repositories.go
├── search/ # 搜索工具
│ └── search.go
└── users/ # 用户管理工具
└── users.go
- 在
tools/目录下创建新的包 - 实现工具函数,返回
*mcp.Tool - 在
main.go中使用s.AddTool()注册工具
示例:
package mytools
import "github.com/mark3labs/mcp-go/mcp"
func MyNewTool() *mcp.Tool {
return &mcp.Tool{
Name: "my_new_tool",
Description: "工具描述",
InputSchema: mcp.ToolInputSchema{
Type: "object",
Properties: map[string]interface{}{
// 定义参数
},
},
Handler: func(request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
// 实现工具逻辑
},
}
}# 本地构建
go build -o github-mcp .
# 交叉编译(Linux AMD64)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags="-w -s" -o github-mcp .⚠️ 不要将 GitHub Token 硬编码在代码中- 🔒 使用环境变量或密钥管理系统存储敏感信息
- 🛡️ 为 Token 设置最小必要权限
- 🔄 定期轮换 Token
- 📝 在生产环境中启用访问日志和审计
请根据项目实际情况添加许可证信息。
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请通过以下方式联系:
- 提交 GitHub Issue
- 发送邮件至项目维护者
注意: 本项目基于 MCP (Model Context Protocol) 构建,可与支持 MCP 的 AI 助手和工具集成使用。