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

smithery badge

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, message e 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

  1. Clone este repositório:
git clone <repository-url>
cd gerrit-review-mcp
  1. 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
  1. Instale este pacote em modo editável com suas dependências:
pip install -e .

Configuração

  1. 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.
  1. 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
  1. Configure exclusões de arquivos (opcional):
  • Defina GERRIT_EXCLUDED_PATTERNS para 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.py do 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:

  1. Verifique se sua senha HTTP está configurada corretamente em GERRIT_HTTP_PASSWORD
  2. Verifique a configuração GERRIT_HOST (somente hostname, sem https://)
  3. Certifique-se de que o acesso HTTPS esteja habilitado no servidor Gerrit
  4. 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
    
  5. 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=false desativa 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.pem para 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) ou DOCKER_HOST definido
  • 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_HOST esteja configurado
  • Valores de tempo limite suficientes sejam definidos para ambientes mais lentos

Contribuindo

Recebemos contribuições! Por favor:

  1. Faça um fork do repositório
  2. Crie um branch de recurso
  3. Faça suas alterações
  4. Execute a suíte de testes para garantir que tudo funcione
  5. Envie um pull request