Git MCP Server (Go)

Um servidor MCP para interagir e automatizar repositórios Git usando Modelos de Linguagem de Grande Escala.

Documentação

Git MCP Server (Go)

Um servidor Model Context Protocol (MCP) para interação e automação de repositórios Git, escrito em Go. Este servidor fornece ferramentas para ler, pesquisar e manipular repositórios Git por meio de Modelos de Linguagem de Grande Porte.

Recursos

Este servidor MCP fornece as seguintes operações Git como ferramentas:

  • git_status: Mostra o status da árvore de trabalho
  • git_diff_unstaged: Mostra as alterações no diretório de trabalho que ainda não foram preparadas
  • git_diff_staged: Mostra as alterações que foram preparadas para commit
  • git_diff: Mostra as diferenças entre branches ou commits
  • git_commit: Registra alterações no repositório
  • git_add: Adiciona o conteúdo dos arquivos à área de preparação
  • git_reset: Remove todas as alterações preparadas
  • git_log: Mostra os logs de commits
  • git_create_branch: Cria um novo branch a partir de um branch base opcional
  • git_checkout: Alterna entre branches
  • git_show: Mostra o conteúdo de um commit
  • git_init: Inicializa um novo repositório Git
  • git_push: Envia commits locais para um repositório remoto (requer a flag --write-access)
  • git_list_repositories: Lista todos os repositórios Git disponíveis

Instalação

Pré-requisitos

  • Go 1.18 ou superior
  • Git instalado no seu sistema

Baixar Binários Pré-compilados

Você pode baixar binários pré-compilados para sua plataforma na página GitHub Releases.

Compilar a partir do Código Fonte

# 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 .

Instalar com go install

go install github.com/geropl/git-mcp-go@latest

Uso

Estrutura de Linha de Comando

O Git MCP Server usa uma estrutura de linha de comando com subcomandos:

git-mcp-go
├── serve [flags] [repository-paths...]
│   ├── --repository, -r <paths>                  # Repository paths (multiple ways to specify)
│   ├── --mode <shell|go-git>
│   ├── --write-access
│   └── --verbose, -v
└── setup [flags] [repository-paths...]
    ├── --repository, -r <paths>                  # Repository paths (multiple ways to specify)
    ├── --mode <shell|go-git>
    ├── --write-access
    ├── --auto-approve <tool-list|allow-read-only|allow-local-only>
    └── --tool <cline,roo-code>

Suporte a Múltiplos Repositórios

O Git MCP Server agora pode monitorar e operar em vários repositórios simultaneamente. Você pode especificar repositórios de várias maneiras:

  1. Usando a flag -r/--repository:
    • Com caminhos separados por vírgula: -r=/path/to/repo1,/path/to/repo2
    • Com múltiplas instâncias da flag: -r=/path/to/repo1 -r=/path/to/repo2
  2. Como argumentos posicionais: serve /path/to/repo1 /path/to/repo2
  3. Uma combinação de ambas as abordagens

Ao usar múltiplos repositórios, o servidor usará o primeiro repositório como padrão para operações onde um repositório específico não for especificado.

Comando serve

O comando serve inicia o servidor 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

A flag --mode permite que você escolha entre duas implementações diferentes:

  • shell: Usa os comandos da CLI do Git via execução de shell (padrão)
  • go-git: Usa a biblioteca go-git para operações Git quando possível

A flag --write-access habilita operações que modificam o estado remoto (atualmente apenas a operação push). Por padrão, isso está desabilitado por segurança.

Comando setup

O comando setup configura o Git MCP Server para uso com um assistente de IA. Ele se copia para ~/mcp-servers/git-mcp-go e modifica o arquivo de configuração de ferramentas (cline: cline_mcp_settings.json) para usar esse binário.

# 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

A flag --auto-approve permite que você especifique quais ferramentas devem ser aprovadas automaticamente (sem exigir aprovação explícita do usuário):

  • allow-read-only: Aprova automaticamente todas as ferramentas somente leitura (git_status, git_diff_unstaged, git_diff_staged, git_log, git_show, git_diff)
  • allow-local-only: Aprova automaticamente todas as ferramentas somente locais (incluindo git_commit, git_add, git_reset, mas não git_push)
  • lista separada por vírgulas: Aprova automaticamente ferramentas específicas (ex.: git_status,git_log)

Gerenciamento de Repositórios

A Ferramenta git_list_repositories

Esta ferramenta lista todos os repositórios Git disponíveis que o servidor está monitorando. Ela mostra:

  • O número total de repositórios
  • O caminho para cada repositório
  • O nome do repositório (derivado do nome do diretório)

Exemplo de saída:

Available repositories (3):

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

Seleção de Repositório

Ao executar comandos que exigem um caminho de repositório:

  1. Se um repo_path específico for fornecido no comando, ele será usado.
  2. Se nenhum repo_path for fornecido e múltiplos repositórios estiverem configurados, o primeiro repositório será usado como padrão.
  3. Cada saída de comando indicará qual repositório foi usado para a operação.

Instalação

Instalação e Configuração Automática

A maneira mais fácil de instalar e registrar o Git MCP Server com o Cline é usar o comando de configuração:

# 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-go

O comando de configuração irá:

  1. Copiar o executável para o diretório MCP do Cline
  2. Criar um script de registro que configura o Cline para usar o Git MCP Server

Configuração Manual

Alternativamente, você pode adicionar manualmente isso ao seu 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"]
  }
}

Detalhes de Implementação

Este servidor é implementado usando:

  • mcp-go: SDK Go para o Model Context Protocol
  • go-git: Implementação pura em Go do Git (usada para o modo go-git)

Para operações não suportadas pelo go-git, o servidor usa a CLI do Git como fallback.

Desenvolvimento

Testes

O servidor inclui testes abrangentes para todas as operações Git. Os testes são projetados para rodar em ambos os modos de implementação:

# Run all tests
go test ./pkg -v

# Run specific tests
go test ./pkg -v -run TestGitOperations/push

A suíte de testes cria repositórios temporários para cada caso de teste e verifica se as operações funcionam corretamente em ambos os modos.

Integração Contínua

Este projeto usa GitHub Actions para integração contínua e implantação:

  • Testes automatizados rodam em cada pull request para o branch principal
  • Releases são criados quando uma tag com o formato v* é enviada
  • Cada release inclui binários para múltiplas plataformas:
    • Linux (amd64, arm64)
    • macOS (amd64, arm64)
    • Windows (amd64)

Para criar um novo release:

# 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

Licença

Este projeto é licenciado sob a Licença MIT.