Skip to main content
Glama
eliangelap

Codex Code Review MCP

by eliangelap

Codex Code Review MCP

Servidor MCP local e interface web para revisar Merge Requests do GitLab e Pull Requests do GitHub. O projeto concentra a coleta de contexto, a preparação de comentários, respostas e correções, e só publica uma alteração remota após uma prévia e confirmação explícita da pessoa usuária.

O que o projeto faz

  • Conecta-se a instâncias GitLab (SaaS ou self-managed) e GitHub (incluindo GitHub Enterprise Server).

  • Restringe o acesso a conexões e repositórios previamente autorizados em uma allowlist.

  • Carrega PRs/MRs abertas, branches, diff, arquivos alterados e discussões.

  • Detecta a stack alterada e exige a skill de revisão correspondente: Laravel/PHP, Node.js ou React.

  • Prepara comentários de review, comentários gerais, respostas a threads e commits de correção.

  • Oferece a mesma operação por MCP (stdin/stdout JSON-RPC) e por uma UI React servida apenas em localhost.

Não é um bot de revisão autônomo: não executa polling, webhooks ou publicação automática.

Related MCP server: Code Review MCP Server

Salvaguardas de publicação

O fluxo de escrita foi desenhado para ser deliberado e verificável:

  1. A conexão precisa existir no arquivo de configuração e o repositório precisa constar na sua allowlist.

  2. Uma prévia cria um actionId temporário, válido por 30 minutos.

  3. A publicação requer confirmedByUser: true; o actionId é consumido uma única vez.

  4. Antes de publicar, o servidor consulta novamente a PR/MR e bloqueia a ação se o SHA da branch de origem mudou.

  5. Respostas e correções só são aceitas para threads ainda abertas. O estado é revalidado imediatamente antes do envio.

  6. Correções e respostas a observações são limitadas a PRs/MRs cujo autor é o usuário autenticado pelo token.

O servidor não realiza merge, aprovação formal, encerramento de discussão ou exclusão automática.

Arquitetura

Componente

Responsabilidade

src/server.mjs

Adaptador MCP JSON-RPC por stdin/stdout; expõe as ferramentas ao Codex.

src/review-service.mjs

Orquestra configuração, carregamento de contexto, validações, prévias e publicação.

src/actions.mjs

Armazena ações pendentes em memória, com expiração e consumo único.

src/github-client.mjs

Integra REST e GraphQL do GitHub para PRs, threads, comentários e commits.

src/gitlab-client.mjs

Integra API v4 do GitLab para MRs, discussões, comentários e commits.

src/http-server.mjs

API HTTP local em 127.0.0.1:9898, reutilizando o mesmo serviço e regras.

src/web-server.mjs e web/

Inicializa a API e Vite; a UI React fica em 127.0.0.1:5599.

test/

Testes nativos do Node para configuração, clientes, API HTTP e regras do fluxo.

As ações pendentes existem somente em memória. Reiniciar o processo invalida prévias que ainda não foram publicadas.

Compatibilidade e requisitos

  • Node.js 20 ou superior.

  • Um token GitLab ou GitHub acessível por variável de ambiente.

  • Acesso de rede à instância configurada.

  • Para uma revisão feita pelo Codex, o repositório deve estar no workspace; se não estiver, a instrução MCP determina cloná-lo antes da análise.

Instale as dependências:

npm install

Configuração de conexões

Copie connections.example.json para um dos locais abaixo:

  • padrão: ~/.config/codex-code-review-mcp/connections.json;

  • personalizado: defina a variável CODE_REVIEW_CONNECTIONS_FILE com o caminho absoluto do arquivo.

O arquivo contém URLs, identificadores, allowlists e o nome da variável de ambiente do token. Nunca inclua tokens nele.

{
  "connections": [
    {
      "id": "gitlab-corporativo",
      "provider": "gitlab",
      "baseUrl": "https://gitlab.example.com",
      "tokenEnv": "CODE_REVIEW_GITLAB_CORPORATIVO_TOKEN",
      "allowedRepositories": ["grupo/api-exemplo"]
    },
    {
      "id": "github",
      "provider": "github",
      "baseUrl": "https://api.github.com",
      "tokenEnv": "CODE_REVIEW_GITHUB_TOKEN",
      "allowedRepositories": ["organization/*"]
    }
  ]
}

allowedRepositories aceita o nome exato do repositório (owner/repository ou grupo/projeto). Apenas no GitHub, owner/* autoriza os repositórios diretamente pertencentes a esse owner; outros curingas são rejeitados ao iniciar.

Para GitLab self-managed, informe a URL raiz da instância; o cliente acrescenta /api/v4 quando necessário. Para GitHub Enterprise Server, informe normalmente a URL da API, como https://github.empresa.com/api/v3.

Exemplos de variáveis de ambiente:

$env:CODE_REVIEW_GITLAB_CORPORATIVO_TOKEN = "glpat-..."
$env:CODE_REVIEW_GITHUB_TOKEN = "github_pat_..."
export CODE_REVIEW_GITLAB_CORPORATIVO_TOKEN='glpat-...'
export CODE_REVIEW_GITHUB_TOKEN='github_pat_...'

Reinicie o processo do MCP após alterar variáveis ou a configuração. Em macOS, aplicações abertas pelo Finder podem não herdar variáveis exportadas pelo shell.

Permissões recomendadas

GitLab

O cliente usa o cabeçalho PRIVATE-TOKEN e a API REST. Prefira Project Access Token para um projeto ou Group Access Token para um conjunto limitado de projetos.

Operação

Escopo

Papel mínimo

Observação

Ler MR, diff, discussões e criar prévia

read_api

Reporter

Não publica.

Publicar comentário ou resposta

api

Reporter

O comentário é atribuído ao dono do token.

Criar commit na branch de origem

api

Developer

Exige permissão de push; em branch protegida, configure a regra apropriada.

Para cobrir todas as operações com um único token, use api e papel Developer. write_repository não é necessário, pois os commits são criados pela API REST, não por Git-over-HTTP.

GitHub

O token deve poder ler repositórios, Pull Requests, arquivos/diffs e comentários. Para publicar, também deve ter permissão de escrever comentários de issue/review; para correções, precisa poder atualizar a branch de origem. Em GitHub Enterprise Server, confirme que a API GraphQL está disponível: ela é consultada para verificar se uma review thread foi resolvida.

Use tokens de menor privilégio, com validade curta e rotação regular.

Registro como MCP no Codex

No macOS/Linux, ajuste o caminho do projeto e execute:

codex mcp add code-review \
  --env CODE_REVIEW_GITLAB_CORPORATIVO_TOKEN="$CODE_REVIEW_GITLAB_CORPORATIVO_TOKEN" \
  --env CODE_REVIEW_GITHUB_TOKEN="$CODE_REVIEW_GITHUB_TOKEN" \
  -- node /caminho/para/codex-code-review-mcp/src/server.mjs

No Windows PowerShell:

codex mcp add code-review `
  --env CODE_REVIEW_GITLAB_CORPORATIVO_TOKEN="$env:CODE_REVIEW_GITLAB_CORPORATIVO_TOKEN" `
  --env CODE_REVIEW_GITHUB_TOKEN="$env:CODE_REVIEW_GITHUB_TOKEN" `
  -- node C:\caminho\para\codex-code-review-mcp\src\server.mjs

Inclua um --env para cada tokenEnv existente no arquivo de conexões. Abra uma nova sessão e use /mcp para confirmar que o servidor está disponível.

Ferramentas MCP

Ferramenta

Tipo

Finalidade

code_review_list_connections

Leitura

Lista conexões sem expor tokens.

code_review_list_repositories

Leitura

Lista repositórios permitidos/visíveis para uma conexão.

code_review_load_context

Leitura

Carrega PR/MR, branches, arquivos, diff e instruções de revisão.

code_review_preview_review

Prévia

Monta comentários inline ou gerais sem publicar.

code_review_preview_response

Prévia

Monta respostas para observações de uma thread aberta.

code_review_preview_correction

Prévia

Mostra commit de correção e respostas antes do envio.

code_review_execute

Escrita

Publica exatamente uma prévia já confirmada.

Uma revisão é bloqueada quando a alteração não corresponde a uma stack suportada. A detecção é feita pelos arquivos modificados:

  • Laravel/PHP: arquivos .php, artisan, composer.* ou diretórios Laravel usuais;

  • React: .jsx, .tsx ou caminhos com @presentation;

  • Node.js: .js, .ts, .mjs, .cjs ou caminhos com @server/@worker.

Comentários de achados no diff precisam ser inline e apontar para uma linha efetivamente modificada, do lado RIGHT (novo) ou LEFT (anterior). Achados fora do diff devem ser comentários gerais.

Fluxo de uso

  1. Carregue o contexto, por exemplo: “Revise o PR 42 em acme/web, na conexão github”.

  2. O Codex identifica a skill exigida, compara a branch de origem com a de destino e monta uma prévia de comentários.

  3. Revise a prévia e confirme explicitamente nesta conversa.

  4. O Codex chama code_review_execute com o actionId e confirmedByUser: true.

Para uma observação existente, primeiro solicite a avaliação técnica. Antes de preparar uma resposta ou correção, o Codex deve apresentar separadamente um plano de correção e um plano de resposta. Quando a observação for válida, a correção é publicada antes da resposta, que recebe o SHA efetivo do commit. Quando for inválida, apenas a justificativa técnica é publicada na mesma thread.

Interface web local

Com os tokens e o arquivo de conexões já configurados:

npm run start:web

O comando inicia conjuntamente:

  • API HTTP: http://localhost:9898;

  • interface React: http://localhost:5599.

A API escuta apenas em 127.0.0.1 e aceita CORS somente das origens locais da interface. A UI nunca recebe o token; ela chama a API local, que preserva allowlist, prévia, expiração e confirmação. Use npm run start:web:client quando a API já estiver ativa e npm run build:web para gerar os arquivos estáticos em dist/.

Endpoints locais disponíveis:

Método

Rota

Finalidade

GET

/api/health

Health check.

GET

/api/connections

Conexões públicas, sem tokens.

GET

/api/repositories?connectionId=...

Repositórios permitidos/visíveis.

GET

/api/change-requests?connectionId=...&repository=...

PRs/MRs abertas.

POST

/api/context

Contexto de uma PR/MR.

POST

/api/preview/review

Prévia de review.

POST

/api/preview/response

Prévia de resposta.

POST

/api/preview/correction

Prévia de correção e resposta.

POST

/api/execute

Executa uma prévia confirmada.

Desenvolvimento e validação

Comando

Descrição

npm start

Inicia o servidor MCP.

npm run start:api

Inicia somente a API HTTP local.

npm run start:web

Inicia API e interface local.

npm run start:web:client

Inicia somente o Vite em 127.0.0.1:5599.

npm run build:web

Gera a interface estática em dist/.

npm test

Executa a suíte de testes com node --test.

Os testes cobrem expiração e confirmação de ações, allowlist, configuração, clientes GitHub/GitLab, detecção de stack, validação de comentários inline, proteção contra atualização remota, estado de threads e API HTTP.

Limitações atuais

  • As prévias pendentes não sobrevivem ao reinício do processo.

  • A interface permite preparar uma entrada por vez; a API e o MCP aceitam lotes de comentários.

  • A listagem de arquivos da PR/MR usa páginas de até 100 itens conforme a API remota; para mudanças maiores, valide se a instância fornece todos os arquivos necessários à análise.

  • Somente Laravel/PHP, Node.js e React são elegíveis para o fluxo de revisão automatizado pelo MCP.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to review GitLab merge requests by fetching changes, analyzing diffs, adding comments, and managing approvals through the GitLab API. Supports complete merge request analysis, file-specific reviews, and version comparisons.
    12
    4
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Connects LLMs to GitHub and GitLab to analyze pull and merge requests for logic, security, and architectural alignment. It provides tools for fetching diffs, file contents, and project metadata, alongside guided prompts for professional code reviews.
    10
    8 npm
    ISC
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables agents to review GitLab merge requests by fetching MR metadata and diff SHAs, reading changed files and raw diffs, and posting inline comments on specific lines of a merge request diff via the GitLab REST API. Works with self-hosted or gitlab.com instances using an environment-provided personal access token.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables an MCP-capable assistant to review GitLab merge requests, GitHub pull requests, and pre-push local branches against ticket requirements, domain rubrics, compiler/lint pre-passes, blast-radius analysis, and SonarQube findings, and to draft inline comments or follow-up tasks in the user's chosen language. Nothing reaches a remote host until a human approves the exact content in an interactive terminal.
    3
    MIT