Git MCP Server (Go)
Un servidor MCP para interactuar con y automatizar repositorios Git utilizando modelos de lenguaje grandes.
Documentación
Git MCP Server (Go)
Un servidor de Model Context Protocol (MCP) para la interacción y automatización de repositorios Git, escrito en Go. Este servidor proporciona herramientas para leer, buscar y manipular repositorios Git mediante modelos de lenguaje grandes.
Características
Este servidor MCP proporciona las siguientes operaciones de Git como herramientas:
- git_status: Muestra el estado del árbol de trabajo
- git_diff_unstaged: Muestra los cambios en el directorio de trabajo que aún no están en el área de preparación
- git_diff_staged: Muestra los cambios que están preparados para confirmar
- git_diff: Muestra las diferencias entre ramas o confirmaciones
- git_commit: Registra los cambios en el repositorio
- git_add: Añade el contenido de los archivos al área de preparación
- git_reset: Deshace la preparación de todos los cambios preparados
- git_log: Muestra los registros de confirmación
- git_create_branch: Crea una nueva rama a partir de una rama base opcional
- git_checkout: Cambia de rama
- git_show: Muestra el contenido de una confirmación
- git_init: Inicializa un nuevo repositorio Git
- git_push: Envía las confirmaciones locales a un repositorio remoto (requiere la bandera
--write-access) - git_list_repositories: Lista todos los repositorios Git disponibles
Instalación
Prerrequisitos
- Go 1.18 o superior
- Git instalado en su sistema
Descargar binarios precompilados
Puede descargar binarios precompilados para su plataforma desde la página de GitHub Releases.
Compilar desde el código fuente
# 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 con go install
go install github.com/geropl/git-mcp-go@latest
Uso
Estructura de línea de comandos
El servidor Git MCP utiliza una estructura de línea de comandos con 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>
Soporte para múltiples repositorios
El servidor Git MCP ahora puede monitorear y operar en múltiples repositorios simultáneamente. Puede especificar repositorios de varias maneras:
- Usando la bandera
-r/--repository:- Con rutas separadas por comas:
-r=/path/to/repo1,/path/to/repo2 - Con múltiples instancias de la bandera:
-r=/path/to/repo1 -r=/path/to/repo2
- Con rutas separadas por comas:
- Como argumentos posicionales:
serve /path/to/repo1 /path/to/repo2 - Una combinación de ambos enfoques
Cuando se utilizan múltiples repositorios, el servidor usará el primer repositorio por defecto para operaciones donde no se especifique un repositorio concreto.
Comando serve
El comando serve inicia el 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
La bandera --mode le permite elegir entre dos implementaciones diferentes:
- shell: Utiliza los comandos de la CLI de Git mediante ejecución de shell (por defecto)
- go-git: Utiliza la biblioteca go-git para operaciones de Git cuando sea posible
La bandera --write-access habilita operaciones que modifican el estado remoto (actualmente solo la operación de push). Por defecto, está deshabilitada por seguridad.
Comando setup
El comando setup configura el servidor Git MCP para su uso con un asistente de IA. Se copia a sí mismo a ~/mcp-servers/git-mcp-go y modifica la configuración de herramientas (cline: cline_mcp_settings.json) para usar ese binario.
# 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
La bandera --auto-approve le permite especificar qué herramientas deben aprobarse automáticamente (no requieren aprobación explícita del usuario):
- allow-read-only: Aprueba automáticamente todas las herramientas de solo lectura (git_status, git_diff_unstaged, git_diff_staged, git_log, git_show, git_diff)
- allow-local-only: Aprueba automáticamente todas las herramientas solo locales (incl. git_commit, git_add, git_reset, pero no git_push)
- lista separada por comas: Aprueba automáticamente herramientas específicas (p. ej., git_status,git_log)
Gestión de repositorios
La herramienta git_list_repositories
Esta herramienta lista todos los repositorios Git disponibles que el servidor está monitoreando. Muestra:
- El número total de repositorios
- La ruta a cada repositorio
- El nombre del repositorio (derivado del nombre del directorio)
Ejemplo de salida:
Available repositories (3):
1. repo1 (/path/to/repo1)
2. repo2 (/path/to/repo2)
3. another-project (/path/to/another-project)
Selección de repositorio
Al ejecutar comandos que requieren una ruta de repositorio:
- Si se proporciona un
repo_pathespecífico en el comando, se usará. - Si no se proporciona
repo_pathy hay múltiples repositorios configurados, se usará el primer repositorio como predeterminado. - Cada salida de comando indicará qué repositorio se usó para la operación.
Instalación
Instalación y configuración automática
La forma más fácil de instalar y registrar el servidor Git MCP con Cline es usar el comando de configuración:
# 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
El comando de configuración hará lo siguiente:
- Copiar el ejecutable al directorio MCP de Cline
- Crear un script de registro que configura Cline para usar el servidor Git MCP
Configuración manual
Alternativamente, puede agregar manualmente esto a su 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"]
}
}
Detalles de implementación
Este servidor está implementado usando:
- mcp-go: SDK de Go para el Model Context Protocol
- go-git: Implementación pura de Go de Git (usada para el modo
go-git)
Para operaciones no soportadas por go-git, el servidor recurre al uso de la CLI de Git.
Desarrollo
Pruebas
El servidor incluye pruebas exhaustivas para todas las operaciones de Git. Las pruebas están diseñadas para ejecutarse contra ambos modos de implementación:
# Run all tests
go test ./pkg -v
# Run specific tests
go test ./pkg -v -run TestGitOperations/push
El conjunto de pruebas crea repositorios temporales para cada caso de prueba y verifica que las operaciones funcionen correctamente en ambos modos.
Integración continua
Este proyecto utiliza GitHub Actions para integración continua y despliegue:
- Las pruebas automatizadas se ejecutan en cada pull request a la rama principal
- Se crean versiones cuando se empuja una etiqueta con el formato
v* - Cada versión incluye binarios para múltiples plataformas:
- Linux (amd64, arm64)
- macOS (amd64, arm64)
- Windows (amd64)
Para crear una nueva versión:
# 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
Licencia
Este proyecto está licenciado bajo la Licencia MIT.