一个用于Git仓库交互和自动化的Model Context Protocol (MCP)服务器,用Go编写。此服务器提供了通过大型语言模型读取、搜索和操作Git仓库的工具。
此MCP服务器提供以下Git操作作为工具:
--write-access标志)你可以从GitHub Releases页面下载适用于你的平台的预构建二进制文件。
# 克隆仓库
git clone https://github.com/geropl/git-mcp-go.git
cd git-mcp-go
# 构建服务器
go build -o git-mcp-go .
go install安装go install github.com/geropl/git-mcp-go@latest
Git MCP Server 使用带有子命令的命令行结构:
git-mcp-go
├── serve [flags] [repository-paths...]
│ ├── --repository, -r <paths> # 仓库路径(多种指定方式)
│ ├── --mode <shell|go-git>
│ ├── --write-access
│ └── --verbose, -v
└── setup [flags] [repository-paths...]
├── --repository, -r <paths> # 仓库路径(多种指定方式)
├── --mode <shell|go-git>
├── --write-access
├── --auto-approve <tool-list|allow-read-only|allow-local-only>
└── --tool <cline,roo-code>
Git MCP Server 现在可以同时监控和操作多个仓库。你可以通过以下几种方式指定仓库:
-r/--repository 标志:
-r=/path/to/repo1,/path/to/repo2-r=/path/to/repo1 -r=/path/to/repo2serve /path/to/repo1 /path/to/repo2当使用多个仓库时,服务器将在未指定特定仓库的操作中默认使用第一个仓库。
serve 命令serve 命令启动Git MCP服务器:
# 使用详细日志运行
./git-mcp-go serve -v /path/to/repo1 /path/to/repo2 /path/to/repo3
# 使用 go-git 实现运行
./git-mcp-go serve --mode go-git -r=/path/to/repo1,/path/to/repo2
# 启用远程操作的写入访问
./git-mcp-go serve -r=/path/to/repo1,/path/to/repo2 --write-access
--mode 标志允许你在两种不同的实现之间进行选择:
--write-access 标志启用修改远程状态的操作(目前仅限于推送操作)。默认情况下,为了安全起见,这是禁用的。
setup 命令setup 命令设置Git MCP服务器以便与AI助手一起使用。它会将自身复制到 ~/mcp-servers/git-mcp-go 并修改工具配置(cline: cline_mcp_settings.json)以使用该二进制文件。
# 为Cline设置单个仓库
./git-mcp-go setup -r /path/to/git/repository
# 使用位置参数设置仓库
./git-mcp-go setup /path/to/repo1 /path/to/repo2 /path/to/repo3
# 设置并启用写入访问
./git-mcp-go setup -r=/path/to/repo1,/path/to/repo2 --write-access
# 设置并自动批准只读工具
./git-mcp-go setup -r=/path/to/repo1,/path/to/repo2 --auto-approve=allow-read-only
# 设置并自动批准特定工具
./git-mcp-go setup -r=/path/to/repo1,/path/to/repo2 --auto-approve=git_status,git_log
# 设置并启用写入访问及自动批准只读工具
./git-mcp-go setup -r=/path/to/repo1,/path/to/repo2 --write-access --auto-approve=allow-read-only
--auto-approve 标志允许你指定哪些工具应被自动批准(不需要显式用户批准):
git_list_repositories 工具此工具列出服务器正在监控的所有可用Git仓库。它显示:
示例输出:
可用仓库(3):
1. repo1 (/path/to/repo1)
2. repo2 (/path/to/repo2)
3. another-project (/path/to/another-project)
当运行需要仓库路径的命令时:
repo_path,则使用该路径。repo_path 并且配置了多个仓库,则默认使用第一个仓库。最简单的方法是使用setup命令来安装并注册Git MCP服务器与Cline:
# 下载最新发布的Linux二进制文件
RELEASE="$(curl -s https://api.github.com/repos/geropl/git-mcp-go/releases/latest)"
DOWNLOAD_URL="$(echo $RELEASE | jq -r '.assets[] | select(.name | contains("linux-amd64")) | .browser_download_url')"
curl -L -o ./git-mcp-go $DOWNLOAD_URL
chmod +x ./git-mcp-go
# 使用单个仓库设置mcp服务器
./git-mcp-go setup -r /path/to/git/repository --tool=cline --auto-approve=allow-local-only
# 使用多个仓库设置mcp服务器
./git-mcp-go setup -r=/path/to/repo1,/path/to/repo2 --tool=
cline --auto-approve=allow-local-only
rm -f ./git-mcp-go
setup命令将:
或者,你可以手动将此内容添加到你的 claude_desktop_config.json 中:
"mcpServers": {
"git": {
"command": "/path/to/git-mcp-go",
"args": ["serve", "-r=/path/to/repo1,/path/to/repo2", "--mode", "shell"]
}
}
"mcpServers": {
"git": {
"command": "/path/to/git-mcp-go",
"args": ["serve", "-r", "/path/to/git/repository"]
}
}
此服务器使用以下实现:
对于go-git不支持的操作,服务器将回退到使用Git CLI。
服务器包含了针对所有Git操作的全面测试。这些测试设计为在两种实现模式下运行:
# 运行所有测试
go test ./pkg -v
# 运行特定测试
go test ./pkg -v -run TestGitOperations/push
测试套件为每个测试案例创建临时仓库,并验证两种模式下的操作是否正确。
此项目使用GitHub Actions进行持续集成和部署:
v* 的标签时,会创建发布要创建新发布:
# 1. 更新 pkg/server.go 中的版本(约第26行)
# 编辑 NewGitServer 函数中的版本字符串
# 2. 提交版本变更
git add pkg/server.go
git commit -m "Bump version to v1.3.1"
# 3. 推送提交
git push origin main
# 4. 标记当前提交
git tag v1.3.1
# 5. 将标签推送到GitHub(这将触发发布)
git push origin v1.3.1
此项目根据MIT许可证授权。