Gerrit Code Review
Integra-se ao sistema de revisão de código Gerrit para revisar alterações e detalhes de código.
Documentação
Gerrit Review MCP Server
Este servidor MCP fornece integração com o sistema de revisão de código Gerrit, permitindo que assistentes de IA revisem alterações de código e seus detalhes através de uma interface simples.
Recursos
O servidor fornece um conjunto de ferramentas simplificado para revisão de código:
Buscar Detalhes da Alteração
fetch_gerrit_change(change_id: str, patchset_number: Optional[str] = None)
- Busca informações completas da alteração, incluindo arquivos e conjuntos de patches
- Mostra informações detalhadas de diff para cada arquivo modificado
- Exibe alterações de arquivo, inserções e exclusões
- Suporta revisão de conjuntos de patches específicos
- Retorna detalhes abrangentes da alteração, incluindo:
- Informações de projeto e branch
- Detalhes do autor e revisor
- Comentários e histórico de revisão
- Modificações de arquivo com conteúdo de diff
- Informações do conjunto de patches atual
Comparar Diferenças de Patchset
fetch_patchset_diff(change_id: str, base_patchset: str, target_patchset: str, file_path: Optional[str] = None)
- Compare diferenças entre dois patchsets de uma alteração
- Visualize diferenças de arquivos específicos ou todos os arquivos alterados
- Analise modificações de código entre versões de patchset
- Acompanhe a evolução das alterações ao longo das iterações de revisão
Enviar Feedback de Revisão
submit_gerrit_review(
change_id: str,
message: Optional[str] = None,
patchset_number: Optional[str] = None,
labels: Optional[Dict[str, int]] = None,
comments: Optional[List[Dict[str, Any]]] = None,
notify: str = "OWNER",
)
- Publique feedback resumido, rótulos de votação (por exemplo,
{"Code-Review": 1}) e comentários inline ou em nível de arquivo - Direcione um patchset específico ou use a revisão mais recente por padrão
- Controle o comportamento de notificação do Gerrit (
notify:NONE,OWNER,OWNER_REVIEWERS,ALL) - Os payloads de comentário aceitam dicionários com
path,messagee campos opcionais de comentário do Gerrit (line,side,range, ...)
Exemplo de Uso
Revise uma alteração completa:
# Fetch latest patchset of change 23824
change = fetch_gerrit_change("23824")
Envie feedback de revisão com um voto e comentário inline:
submit_gerrit_review(
change_id="23824",
message="Looks good overall",
labels={"Code-Review": 1},
comments=[{"path": "src/app.py", "line": 42, "message": "Nice refactor."}],
patchset_number="2", # optional: target a specific patchset
notify="OWNER_REVIEWERS", # optional: adjust notification scope
)
Compare patchsets específicos:
# Compare differences between patchsets 1 and 2 for change 23824
diff = fetch_patchset_diff("23824", "1", "2")
Visualize alterações de arquivos específicos:
# Get diff for a specific file between patchsets
file_diff = fetch_patchset_diff("23824", "1", "2", "path/to/file.swift")
Pré-requisitos
- Python 3.10 ou superior (Python 3.11 recomendado)
- Credenciais de acesso HTTP do Gerrit
- Senha HTTP gerada nas configurações do Gerrit
- Acesso ao repositório de pacotes
mcp[cli](pacote privado)
Instalação
Instalando via Smithery
Para instalar o gerrit-code-review-mcp para Claude Desktop automaticamente via Smithery:
npx -y @smithery/cli install @cayirtepeomer/gerrit-code-review-mcp --client claude
Instalação Manual
- Clone este repositório:
git clone <repository-url>
cd gerrit-review-mcp
- Crie e ative um ambiente virtual:
# For macOS/Linux:
python -m venv .venv
source .venv/bin/activate
# For Windows:
python -m venv .venv
.venv\Scripts\activate
- Instale este pacote em modo editável com suas dependências:
pip install -e .
Configuração
- Configure as variáveis de ambiente:
export GERRIT_HOST="gerrit.example.com" # Your Gerrit server hostname (without https://)
export GERRIT_USER="your-username" # Your Gerrit account username
export GERRIT_HTTP_PASSWORD="your-http-password" # Generated HTTP password from Gerrit Settings > HTTP Credentials
export GERRIT_EXCLUDED_PATTERNS="\.pbxproj$,\.xcworkspace$,node_modules/" # Optional: regex patterns for files to exclude from reviews
# Optional TLS configuration for custom or self-signed certificates
export GERRIT_SSL_VERIFY="true" # Set to 'false' to skip TLS verification in constrained environments
export GERRIT_CA_BUNDLE="/path/to/ca.pem" # Optional custom CA bundle path used when verification stays enabled
# Note: If both are set, GERRIT_CA_BUNDLE takes precedence and verification stays enabled using that bundle.
Ou crie um arquivo .env:
GERRIT_HOST=gerrit.example.com
GERRIT_USER=your-username
GERRIT_HTTP_PASSWORD=your-http-password
GERRIT_EXCLUDED_PATTERNS=\.pbxproj$,\.xcworkspace$,node_modules/
GERRIT_SSL_VERIFY=true
GERRIT_CA_BUNDLE=/path/to/ca.pem
# If both are set, the CA bundle wins.
- Gere a senha HTTP:
- Faça login na interface web do Gerrit
- Vá em Configurações > Credenciais HTTP
- Gere uma nova senha
- Copie a senha para o seu ambiente ou arquivo .env
- Configure exclusões de arquivos (opcional):
- Defina
GERRIT_EXCLUDED_PATTERNSpara excluir tipos de arquivos específicos das revisões de alterações - Use padrões regex separados por vírgula (por exemplo,
\.pbxproj$,\.xcworkspace$,node_modules/) - Deixe vazio ou não definido para usar exclusões padrão
- Isso ajuda a evitar loops infinitos com arquivos grandes
Configuração MCP
Para usar este servidor MCP com Cursor ou RooCode, você precisa adicionar sua configuração ao arquivo ~/.cursor/mcp.json ou .roo/mcp.json. Aqui está a configuração necessária:
{
"mcpServers": {
"gerrit-review-mcp": {
"command": "/path/to/your/workspace/gerrit-code-review-mcp/.venv/bin/python",
"args": [
"/path/to/your/workspace/gerrit-code-review-mcp/server.py",
"--transport",
"stdio"
],
"cwd": "/path/to/your/workspace/gerrit-code-review-mcp",
"env": {
"PYTHONPATH": "/path/to/your/workspace/gerrit-code-review-mcp",
"VIRTUAL_ENV": "/path/to/your/workspace/gerrit-code-review-mcp/.venv",
"PATH": "/path/to/your/workspace/gerrit-code-review-mcp/.venv/bin:/usr/local/bin:/usr/bin:/bin"
},
"stdio": true
}
}
}
Substitua /path/to/your/workspace pelo caminho real do seu workspace. Por exemplo, se o seu projeto estiver em /Users/username/projects/gerrit-code-review-mcp, use esse caminho.
Certifique-se de que todos os caminhos na configuração apontem para:
- O interpretador Python do seu ambiente virtual
- O arquivo
server.pydo projeto - O diretório de trabalho correto
- O diretório bin do ambiente virtual no PATH
Detalhes de Implementação
O servidor usa a API REST do Gerrit para interagir com o Gerrit, fornecendo:
- Recuperação rápida e confiável de informações de alterações
- Autenticação segura usando autenticação digest HTTP
- Suporte a vários endpoints REST do Gerrit
- Código limpo e de fácil manutenção
- Criptografia HTTPS para comunicação segura
Solução de Problemas
Se você encontrar problemas de conexão:
- Verifique se sua senha HTTP está configurada corretamente em
GERRIT_HTTP_PASSWORD - Verifique a configuração
GERRIT_HOST(somente hostname, sem https://) - Certifique-se de que o acesso HTTPS esteja habilitado no servidor Gerrit
- Teste a conexão usando curl com o prefixo
/a/para chamadas de API autenticadas:curl -u "your-username:your-http-password" https://your-gerrit-server.com/a/changes/?q=status:open - Verifique as permissões de acesso do Gerrit para sua conta
Problemas de Autenticação com Credenciais HTTP
Se você estiver tendo problemas com autenticação, verifique sua configuração do Gerrit para gitBasicAuthPolicy = HTTP (ou HTTP_LDAP).
Trabalhando com Certificados Autoassinados
GERRIT_SSL_VERIFY=falsedesativa a verificação TLS quando o Gerrit usa um certificado emitido internamente sem as entradas necessárias de Subject Alternative Name (SAN).- Forneça um pacote de certificados personalizado via
GERRIT_CA_BUNDLE=/path/to/ca.pempara manter a verificação habilitada enquanto confia em uma CA privada. - Trate a verificação desativada como uma solução temporária até que um certificado com SANs correspondentes seja emitido para os hostnames do Gerrit que você acessa.
Licença
Este projeto está licenciado sob a Licença MIT.
Testes
Este projeto inclui testes de integração Docker abrangentes usando testcontainers-python para testes confiáveis entre plataformas.
Executando Testes
Para executar a suíte de testes completa:
# Install development dependencies
pip install -e ".[dev]"
# Run all tests
pytest
# Run only integration tests
pytest -m integration
# Run with verbose output
pytest -v
# Run with coverage
pytest --cov=. --cov-report=html
Variáveis de Ambiente de Teste
As seguintes variáveis de ambiente podem ser usadas para configurar o comportamento dos testes:
TEST_STARTUP_TIMEOUT: Tempo limite de inicialização do contêiner em segundos (padrão: 30)TEST_LOGS_SETTLE_DELAY: Atraso antes de verificar os logs em segundos (padrão: 0)DOCKER_HOST: Host do daemon Docker para Docker remoto (opcional)
Exemplo:
# Run tests with custom timeouts
TEST_STARTUP_TIMEOUT=60 TEST_LOGS_SETTLE_DELAY=1 pytest tests/test_docker_integration.py -v
Requisitos do Docker
Os testes de integração Docker exigem:
- Daemon Docker em execução e acessível
- Socket Docker disponível em
/var/run/docker.sock(Linux/macOS) ouDOCKER_HOSTdefinido - Permissões suficientes para construir e executar contêineres
Os testes serão ignorados automaticamente se o Docker não estiver disponível.
Integração CI/CD
Para ambientes CI/CD, certifique-se de:
- O serviço Docker-in-Docker (DinD) esteja disponível
- O socket Docker esteja montado ou
DOCKER_HOSTesteja configurado - Valores de tempo limite suficientes sejam definidos para ambientes mais lentos
Contribuindo
Recebemos contribuições! Por favor:
- Faça um fork do repositório
- Crie um branch de recurso
- Faça suas alterações
- Execute a suíte de testes para garantir que tudo funcione
- Envie um pull request