Git MCP服务器(Go)
用于Git存储库交互和自动化的模型上下文协议(MCP)服务器,用Go编写。此服务器提供通过大型语言模型读取、搜索和操作Git存储库的工具。
特性
此MCP服务器提供以下Git操作作为工具:
- git_status:显示工作树状态
- git_diff_已安装:显示工作目录中尚未暂存的更改
- git_diff_stated:显示已提交的更改
- 使用 git_diff:显示分支或提交之间的差异
- git_提交:记录对存储库的更改
- git_add:将文件内容添加到暂存区
- git_reset:取消所有分阶段的更改
- git_log:显示提交日志
- git_create_branch:从可选的基分支创建新分支
- git_checkout:切换分支
- git_show:显示提交的内容
- git_init:初始化新的Git存储库
- git_push:将本地提交推送到远程存储库(需要
--write-access旗帜) - git_list_存储库:列出所有可用的Git存储库
安装
先决条件
- 上涨1.18或更高
- Git已安装在您的系统上
下载预构建的二进制文件
您可以从以下网址下载适用于您平台的预构建二进制文件 页面。
从源头构建
# Clone the repository
git clone https://github.com/geropl/git-mcp-go.git
cd git-mcp-go
# Build the server
go build -o git-mcp-go .安装时使用 go install
go install github.com/geropl/git-mcp-go@latest用法
命令行结构
Git MCP服务器使用带有子命令的命令行结构:
git-mcp-go
├── serve [flags] [repository-paths...]
│ ├── --repository, -r
# Repository paths (multiple ways to specify)
│ ├── --mode
│ ├── --write-access
│ └── --verbose, -v
└── setup [flags] [repository-paths...]
├── --repository, -r
# Repository paths (multiple ways to specify)
├── --mode
├── --write-access
├── --auto-approve
└── --tool 多存储库支持
Git MCP服务器现在可以同时监视和操作多个存储库。您可以通过多种方式指定存储库:
- 使用
-r/--repository标志:
- 路径以逗号分隔: -r=/path/to/repo1,/path/to/repo2 - 具有多个标志实例: -r=/path/to/repo1 -r=/path/to/repo2
- 作为立场论据:
serve /path/to/repo1 /path/to/repo2 - 两种方法的结合
当使用多个存储库时,对于未指定特定存储库的操作,服务器将默认使用第一个存储库。
serve 命令
这 serve 命令启动Git MCP服务器:
# Run with verbose logging
./git-mcp-go serve -v /path/to/repo1 /path/to/repo2 /path/to/repo3
# Run with go-git implementation
./git-mcp-go serve --mode go-git -r=/path/to/repo1,/path/to/repo2
# Enable write access for remote operations
./git-mcp-go serve -r=/path/to/repo1,/path/to/repo2 --write-access这 --mode flag允许您在两种不同的实现之间进行选择:
- 外壳:通过shell执行使用Git CLI命令(默认)
- go git:尽可能使用go git库进行git操作
这 --write-access 标志允许修改远程状态的操作(目前只有推送操作)。默认情况下,为了安全起见,此选项被禁用。
setup 命令
这 setup 命令设置Git MCP服务器,以便与AI助手一起使用。它将自己复制到 ~/mcp-servers/git-mcp-go 并修改工具配置(cline: cline_mcp_settings.json)使用该二进制文件。
# Set up for Cline with a single repository
./git-mcp-go setup -r /path/to/git/repository
# Set up with repositories as arguments
./git-mcp-go setup /path/to/repo1 /path/to/repo2 /path/to/repo3
# Set up with write access enabled
./git-mcp-go setup -r=/path/to/repo1,/path/to/repo2 --write-access
# Set up with auto-approval for read-only tools
./git-mcp-go setup -r=/path/to/repo1,/path/to/repo2 --auto-approve=allow-read-only
# Set up with specific tools auto-approved
./git-mcp-go setup -r=/path/to/repo1,/path/to/repo2 --auto-approve=git_status,git_log
# Set up with write access and auto-approval for read-only tools
./git-mcp-go setup -r=/path/to/repo1,/path/to/repo2 --write-access --auto-approve=allow-read-only这 --auto-approve 标志允许您指定哪些工具应自动批准(不需要明确的用户批准):
- 允许只读:自动批准所有只读工具(git_status、git_diff_unstrated、git_diff_staged、git_log、git_show、git_diff)
- 仅允许本地:自动批准所有仅限本地的工具(包括git_comit、git_add、git_reset,但不包括git_push)
- 逗号分隔列表:自动批准特定工具(例如git_status、git_log)
库管理
这 git_list_repositories 工具
此工具列出了服务器正在监视的所有可用Git存储库。它显示:
- 存储库的总数
- 每个存储库的路径
- 存储库名称(从目录名称派生)
输出示例:
Available repositories (3):
1. repo1 (/path/to/repo1)
2. repo2 (/path/to/repo2)
3. another-project (/path/to/another-project)存储库选择
运行需要存储库路径的命令时:
- 如果具体
repo_path如果命令中提供了,则将使用它。 - 如果没有
repo_path如果提供并配置了多个存储库,则第一个存储库将用作默认存储库。 - 每个命令输出将指示哪个存储库用于该操作。
安装
自动安装和配置
在Cline中安装和注册Git MCP服务器的最简单方法是使用setup命令:
# Download linux binary for the latest release
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
# Setup the mcp server with a single repository
./git-mcp-go setup -r /path/to/git/repository --tool=cline --auto-approve=allow-local-only
# Setup the mcp server with multiple repositories
./git-mcp-go setup -r=/path/to/repo1,/path/to/repo2 --tool=cline --auto-approve=allow-local-only
rm -f ./git-mcp-gosetup命令将:
- 将可执行文件复制到Cline MCP目录
- 创建一个注册脚本,配置Cline使用Git MCP服务器
手动配置
或者,您可以手动将其添加到您的 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操作的全面测试。测试旨在针对两种实现模式运行:
# Run all tests
go test ./pkg -v
# Run specific tests
go test ./pkg -v -run TestGitOperations/push测试套件为每个测试用例创建临时存储库,并验证操作在两种模式下是否正常工作。
持续集成
本项目使用GitHub Actions进行持续集成和部署:
- 对主分支的每个拉取请求运行自动测试
- 当标签的格式为
v*被推 - 每个版本都包含多个平台的二进制文件:
- Linux(amd64、arm64) - macOS(amd64、arm64) - Windows(amd64)
要创建新版本,请执行以下操作:
# 1. Update the version in pkg/server.go (line ~26)
# Edit the version string in NewGitServer function
# 2. Commit the version change
git add pkg/server.go
git commit -m "Bump version to v1.3.1"
# 3. Push the commit
git push origin main
# 4. Tag the current commit
git tag v1.3.1
# 5. Push the tag to GitHub (this triggers the release)
git push origin v1.3.1许可证
该项目根据MIT许可证获得许可。
