返回市场
Git-MCP-Go

Git-MCP-Go

作者:geropl29 星标更新:2025-06-11

项目介绍

Git MCP Server (Go)

一个用于Git仓库交互和自动化的Model Context Protocol (MCP)服务器,用Go编写。此服务器提供了通过大型语言模型读取、搜索和操作Git仓库的工具。

功能

此MCP服务器提供以下Git操作作为工具:

  • git_status: 显示工作树状态
  • git_diff_unstaged: 显示尚未暂存的工作目录中的更改
  • git_diff_staged: 显示已暂存以供提交的更改
  • git_diff: 显示分支或提交之间的差异
  • git_commit: 记录对仓库的更改
  • git_add: 将文件内容添加到暂存区
  • git_reset: 取消暂存所有暂存的更改
  • git_log: 显示提交日志
  • git_create_branch: 从可选的基础分支创建新分支
  • git_checkout: 切换分支
  • git_show: 显示提交的内容
  • git_init: 初始化新的Git仓库
  • git_push: 将本地提交推送到远程仓库(需要--write-access标志)
  • git_list_repositories: 列出所有可用的Git仓库

安装

先决条件

  • Go 1.18 或更高版本
  • 在系统上安装Git

下载预构建二进制文件

你可以从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 现在可以同时监控和操作多个仓库。你可以通过以下几种方式指定仓库:

  1. 使用 -r/--repository 标志:
    • 逗号分隔的路径:-r=/path/to/repo1,/path/to/repo2
    • 多个标志实例:-r=/path/to/repo1 -r=/path/to/repo2
  2. 作为位置参数:serve /path/to/repo1 /path/to/repo2
  3. 结合以上两种方法

当使用多个仓库时,服务器将在未指定特定仓库的操作中默认使用第一个仓库。

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 标志允许你在两种不同的实现之间进行选择:

  • shell: 通过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)以使用该二进制文件。

# 为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 标志允许你指定哪些工具应被自动批准(不需要显式用户批准):

  • allow-read-only: 自动批准所有只读工具(git_status, git_diff_unstaged, git_diff_staged, git_log, git_show, git_diff)
  • allow-local-only: 自动批准所有本地工具(包括 git_commit, git_add, git_reset,但不包括 git_push)
  • 逗号分隔列表: 自动批准特定工具(例如,git_status,git_log)

仓库管理

git_list_repositories 工具

此工具列出服务器正在监控的所有可用Git仓库。它显示:

  • 仓库总数
  • 每个仓库的路径
  • 仓库名称(由目录名称派生)

示例输出:

可用仓库(3):

1. repo1 (/path/to/repo1)
2. repo2 (/path/to/repo2)
3. another-project (/path/to/another-project)

仓库选择

当运行需要仓库路径的命令时:

  1. 如果命令中提供了特定的 repo_path,则使用该路径。
  2. 如果没有提供 repo_path 并且配置了多个仓库,则默认使用第一个仓库。
  3. 每个命令输出都会指示用于操作的仓库。

安装

自动安装和配置

最简单的方法是使用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命令将:

  1. 将可执行文件复制到Cline MCP目录
  2. 创建一个注册脚本,配置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"]
  }
}

实现细节

此服务器使用以下实现:

  • mcp-go: Model Context Protocol 的Go SDK
  • go-git: 纯Go实现的Git(用于 go-git 模式)

对于go-git不支持的操作,服务器将回退到使用Git CLI。

开发

测试

服务器包含了针对所有Git操作的全面测试。这些测试设计为在两种实现模式下运行:

# 运行所有测试
go test ./pkg -v

# 运行特定测试
go test ./pkg -v -run TestGitOperations/push

测试套件为每个测试案例创建临时仓库,并验证两种模式下的操作是否正确。

持续集成

此项目使用GitHub Actions进行持续集成和部署:

  • 每次向主分支提出拉取请求时,都会自动运行测试
  • 当推送带有格式为 v* 的标签时,会创建发布
  • 每个发布都包含多个平台的二进制文件:
    • Linux (amd64, arm64)
    • macOS (amd64, arm64)
    • Windows (amd64)

要创建新发布:

# 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许可证授权。