cerngitlab-mcp

Servidor MCP do GitLab do CERN

Documentação

CERN GitLab MCP Server

Servidor MCP do CERN GitLab

Um servidor MCP que conecta LLMs ao CERN GitLab para descobrir código de HEP, documentação e exemplos de análise.

Recursos

  • 15 ferramentas MCP para pesquisar, navegar e analisar repositórios do CERN GitLab
  • Operação em modo duplo — modos stdio (usuário único) e HTTP (multi-usuário)
  • Ferramenta CLI (cerngitlab-cli) para uso direto via linha de comando
  • Acesso público — funciona sem autenticação para repositórios públicos
  • Modo HTTP multi-usuário — autenticação CERN SSO + GitLab OAuth para implantações centralizadas; o GitLab aplica todas as permissões de acesso nativamente
  • Focado em HEP — análise de dependências para ecossistemas Python e C++, detecção binária para arquivos .root, pesquisa de issues
  • Robusto — limite de taxa, novas tentativas com backoff exponencial, tratamento elegante de erros

Instalação

Requer Python 3.10+.

Início rápido (recomendado)

Nenhuma instalação necessária — basta usar uvx para executar diretamente:

uvx cerngitlab-mcp

Via PyPI

pip install cerngitlab-mcp

A partir do código-fonte

git clone https://github.com/MohamedElashri/cerngitlab-mcp
cd cerngitlab-mcp
uv sync

Configuração

Todas as configurações são definidas por meio de variáveis de ambiente com o prefixo CERNGITLAB_:

VariávelPadrãoDescrição
CERNGITLAB_GITLAB_URLhttps://gitlab.cern.chURL da instância do GitLab
CERNGITLAB_TOKEN(vazio)Token de acesso pessoal (opcional, para modo stdio)
CERNGITLAB_TIMEOUT30Tempo limite de HTTP em segundos
CERNGITLAB_MAX_RETRIES3Máximo de novas tentativas para solicitações com falha
CERNGITLAB_RATE_LIMIT_PER_MINUTE300Limite de taxa da API
CERNGITLAB_LOG_LEVELINFONível de registro (logging)
CERNGITLAB_DEFAULT_REF(vazio)Branch ou tag padrão do Git para pesquisa de código. Vazio usa o comportamento de referência padrão do GitLab.
CERNGITLAB_HTTP_MODE(vazio)Defina qualquer valor para detectar automaticamente o modo HTTP
CERNGITLAB_HOST0.0.0.0Endereço de bind do servidor HTTP
CERNGITLAB_PORT8000Porta de bind do servidor HTTP
CERNGITLAB_CERN_CLIENT_ID(vazio)Modo HTTP — ID do cliente OAuth do CERN SSO
CERNGITLAB_GITLAB_OAUTH_CLIENT_ID(vazio)Modo HTTP — ID do cliente do aplicativo OAuth do GitLab
CERNGITLAB_GITLAB_OAUTH_CLIENT_SECRET(vazio)Modo HTTP — Segredo do cliente do aplicativo OAuth do GitLab
CERNGITLAB_SERVER_BASE_URLhttp://localhost:8000Modo HTTP — URL base pública (usada para o callback do OAuth)
CERNGITLAB_SESSION_STORAGE_PATH/tmp/cerngitlab/sessionsModo HTTP — Diretório para persistir arquivos de sessão OAuth

Autenticação

O servidor funciona em dois modos:

  • Sem token — Acesso a todos os repositórios públicos. Suficiente para a maioria das descobertas de código HEP.
  • Com token — Acesso adicional a projetos internos/privados, pesquisa de código e páginas wiki.

Para criar um token:

  1. Vá para https://gitlab.cern.ch/-/user_settings/personal_access_tokens
  2. Crie um token com o escopo read_api
  3. Defina CERNGITLAB_TOKEN=glpat-xxxxxxxxxxxx

Nota: A pesquisa de código (search_code), pesquisa de issues (search_issues) e wiki (get_wiki_pages) exigem autenticação no CERN GitLab.

Uso

Claude Desktop

Adicione ao seu claude_desktop_config.json:

{
  "mcpServers": {
    "cerngitlab": {
      "command": "uvx",
      "args": ["cerngitlab-mcp"],
      "env": {
        "CERNGITLAB_TOKEN": "glpat-xxxxxxxxxxxx"
      }
    }
  }
}

Nota para usuários de macOS: Se você vir um erro sobre uvx não encontrado, talvez seja necessário fornecer o caminho absoluto. O Claude Desktop não suporta expansão de ~ ou $HOME.

  1. Execute which uvx no seu terminal para encontrar o caminho (por exemplo, /Users/yourusername/.local/bin/uvx).
  2. Use esse caminho absoluto no campo command:
"command": "/Users/seunome/.local/bin/uvx"

Claude Code

Específico do projeto (padrão) — instala na configuração do diretório atual:

claude mcp add cerngitlab-mcp -- uvx cerngitlab-mcp

Global — instala para a sua conta de usuário (funciona em todos os projetos):

claude mcp add --scope user cerngitlab-mcp -- uvx cerngitlab-mcp

Para incluir autenticação, adicione -e CERNGITLAB_TOKEN=glpat-xxxxxxxxxxxx antes do --:

# Example: Global installation with token
claude mcp add --scope user -e CERNGITLAB_TOKEN=glpat-xxxxxxxxxxxx cerngitlab-mcp -- uvx cerngitlab-mcp

Configuração manual — você também pode editar manualmente sua configuração global em ~/.claude.json (no Linux/macOS) ou %APPDATA%\Claude\claude.json (no Windows):

{
  "mcpServers": {
    "cerngitlab": {
      "command": "uvx",
      "args": ["cerngitlab-mcp"],
      "env": {
        "CERNGITLAB_TOKEN": "glpat-xxxxxxxxxxxx"
      }
    }
  }
}

GitHub Copilot

Adicione ao seu settings.json do VS Code:

{
  "mcp": {
    "servers": {
      "cerngitlab": {
        "command": "uvx",
        "args": ["cerngitlab-mcp"],
        "env": {
          "CERNGITLAB_TOKEN": "glpat-xxxxxxxxxxxx"
        }
      }
    }
  }
}

Ou adicione um .vscode/mcp.json ao seu projeto:

{
  "servers": {
    "cerngitlab": {
      "command": "uvx",
      "args": ["cerngitlab-mcp"],
      "env": {
        "CERNGITLAB_TOKEN": "glpat-xxxxxxxxxxxx"
      }
    }
  }
}

Gemini CLI

Adicione ao seu ~/.gemini/settings.json:

{
  "mcpServers": {
    "cerngitlab": {
      "command": "uvx",
      "args": ["cerngitlab-mcp"],
      "env": {
        "CERNGITLAB_TOKEN": "glpat-xxxxxxxxxxxx"
      }
    }
  }
}

Uso direto

Modo Stdio (Usuário Único, Padrão)

# Run with uvx (no install needed)
uvx cerngitlab-mcp

# Or if installed from PyPI
cerngitlab-mcp

# Explicit stdio mode
cerngitlab-mcp --mode stdio

# Or from source
uv run cerngitlab-mcp

# With authentication
CERNGITLAB_TOKEN=glpat-xxx uvx cerngitlab-mcp

Modo HTTP (Multi-Usuário)

# HTTP mode for multi-user deployment
cerngitlab-mcp --mode http --host 0.0.0.0 --port 8080

# Or use environment variables
CERNGITLAB_HTTP_MODE=true CERNGITLAB_HOST=0.0.0.0 CERNGITLAB_PORT=8080 cerngitlab-mcp

# Dedicated HTTP entry point
cerngitlab-mcp-http

Seleção de Modo

  • --mode stdio - Modo de usuário único usando stdin/stdout (padrão)
  • --mode http - Modo multi-usuário usando API HTTP
  • --mode auto - Detecção automática com base em variáveis de ambiente

O servidor detecta automaticamente o modo HTTP se as variáveis de ambiente CERNGITLAB_HTTP_MODE, CERNGITLAB_HOST ou CERNGITLAB_PORT estiverem definidas.

Ferramentas

FerramentaDescriçãoAutenticação necessária
search_projectsPesquisar projetos públicos do CERN GitLab (repositórios) por palavra-chave, tópico ou linguagemNão
get_project_infoObter metadados detalhados do projeto (estrelas, descrição, linguagens, estatísticas)Não
list_branchesListar ou pesquisar branches do projeto e seus metadados de commitNão
list_project_filesListar arquivos e diretórios no repositório de um projetoNão
get_file_contentBuscar o conteúdo de um arquivo específico (inclui detecção binária)Não
get_project_readmeObter o conteúdo do README de um projetoNão
search_codePesquisar código dentro de um projeto específico ou globalmenteSim*
search_lhcb_stackPesquisar código dentro de uma stack de software LHCb (por exemplo, 'sim11'), com resolução automática de referência GitSim*
search_issuesPesquisar issues em um projetoSim
get_wiki_pagesListar páginas wiki de um projetoSim
inspect_projectAnalisar estrutura do projeto, sistema de build, dependências e CI/CDNão
list_releasesListar releases de um projetoNão
get_releaseObter detalhes de um release específicoNão
list_tagsListar tags de um projetoNão
test_connectivityTestar conexão com a instância do GitLabNão

Para documentação detalhada de parâmetros, consulte docs/dev.md.

Exemplos de Prompts

Pesquisar repositórios

"Pesquise no CERN GitLab por repositórios Python relacionados à análise ROOT e mostre-me os mais estrelados"

Entender um projeto

"Obtenha o README e a estrutura de arquivos do projeto lhcb/DaVinci no CERN GitLab"

Explorar uma branch

"Encontre branches contendo 'release' em lhcb/DaVinci e, em seguida, pesquise na branch selecionada pela configuração do Scheduler"

Encontrar exemplos adequados

"Pesquise repositórios no CERN GitLab que usam RooFit e mostre-me exemplos de código de ajuste"

Visualizar código da stack de software LHCb

"Pesquise na stack sim11 do LHCb pelas rotinas de inicialização no projeto Boole"

Analisar a estrutura de um projeto

"Inspecione o projeto lhcb/allen para entender seu sistema de build, dependências e configuração do pipeline de CI"

Encontrar contexto de uso

"Pesquise issues relacionadas a 'falha de segmentação' no projeto atlas/athena para ver se outros encontraram isso"

Acompanhar releases

"Liste os releases recentes de lhcb/DaVinci e mostre-me as notas de release da versão mais recente"

Encontrar configurações de framework

"Pesquise arquivos de configuração do framework Gaudi no CERN GitLab e mostre-me exemplos"

Desenvolvimento

Consulte docs/dev.md para configuração de desenvolvimento, estrutura do projeto, testes e instruções de release.

Implantação HTTP Multi-Usuário

O modo HTTP fornece um servidor centralizado para vários usuários. Ele usa CERN SSO + GitLab OAuth para autenticação; os usuários autenticam com sua identidade CERN existente, e o sistema de permissões do próprio GitLab aplica todos os controles de acesso.

Pré-requisitos

  1. Cliente CERN SSO — Registre um cliente no Serviço de Autorização do CERN. Anote o ID do cliente.
  2. Aplicativo OAuth do GitLab — Crie um em https://gitlab.cern.ch/-/profile/applications.
    • Defina o URI de redirecionamento para https://gitlabmcp.cern.ch/oauth/callback (substitua pela URL real)
    • Habilite os escopos read_api read_repository read_user
    • Anote o ID e o segredo do aplicativo.

Configuração

export CERNGITLAB_CERN_CLIENT_ID=your-cern-sso-client-id
export CERNGITLAB_GITLAB_OAUTH_CLIENT_ID=your-gitlab-oauth-app-id
export CERNGITLAB_GITLAB_OAUTH_CLIENT_SECRET=your-gitlab-oauth-secret
export CERNGITLAB_SERVER_BASE_URL=https://gitlabmcp.cern.ch
export CERNGITLAB_SESSION_STORAGE_PATH=/var/lib/cerngitlab/sessions  # optional

# Start the server
cerngitlab-mcp --mode http --host 0.0.0.0 --port 8000

Consulte examples/oauth_server.py no repositório para um script de referência autônomo.

Fluxo de Autenticação

  1. O cliente envia uma solicitação com o cabeçalho Authorization: Bearer <cern-sso-token>.
  2. O servidor valida o token CERN SSO por meio do endpoint JWKS do CERN.
  3. Se o usuário não tiver uma sessão OAuth ativa do GitLab, o servidor retorna HTTP 202 com um campo authorization_url.
  4. O usuário visita essa URL, autoriza o aplicativo OAuth do GitLab e é redirecionado de volta para /oauth/callback.
  5. As solicitações subsequentes são atendidas usando o token OAuth do GitLab armazenado. As sessões expiram após 2 horas.

Endpoints da API

MétodoCaminhoAutenticaçãoDescrição
GET/—Informações do servidor
GET/health—Verificação de integridade
GET/oauth/authorizeCERN SSOIniciar ou verificar o fluxo de autorização OAuth
GET/oauth/callback—Receber o código OAuth do GitLab (redirecionamento do navegador)
GET/toolsCERN SSOListar ferramentas MCP disponíveis
POST/tools/{tool_name}CERN SSOExecutar uma ferramenta específica
DELETE/sessionCERN SSORevogar a sessão OAuth do usuário atual
GET/admin/sessions—Listar todas as sessões ativas (uso administrativo)

Exemplo de Uso

Supondo que o servidor esteja em execução em https://gitlabmcp.cern.ch e a variável de ambiente CERN_SSO_TOKEN esteja definida com um token CERN SSO válido:

# Step 1 – check authorization status
curl -H "Authorization: Bearer $CERN_SSO_TOKEN" \
     https://gitlabmcp.cern.ch/oauth/authorize
# If 202, visit the returned authorization_url in a browser and authorize.

# Step 2 – list available tools (once authorized)
curl -H "Authorization: Bearer $CERN_SSO_TOKEN" \
     https://gitlabmcp.cern.ch/tools

# Step 3 – execute a tool
curl -X POST -H "Authorization: Bearer $CERN_SSO_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"arguments": {"query": "ROOT"}}' \
     https://gitlabmcp.cern.ch/tools/search_projects

# Revoke session
curl -X DELETE -H "Authorization: Bearer $CERN_SSO_TOKEN" \
     https://gitlabmcp.cern.ch/session

Ferramenta CLI

Uma interface de linha de comando também está disponível para uso direto sem o servidor MCP:

# Install or use with uvx
uvx cerngitlab-cli

# Test connectivity
cerngitlab-cli test-connection

# Search for projects
cerngitlab-cli search-projects --query "ROOT analysis" --language python

# Get project info
cerngitlab-cli get-project-info --project lhcb/DaVinci

# Search code
cerngitlab-cli search-code --search-term "RooFit" --per-page 10

# Inspect project structure
cerngitlab-cli inspect-project --project lhcb/allen

Todos os comandos geram JSON na saída padrão para facilitar o encadeamento e a composição. Consulte cerngitlab-cli --help para a lista completa de comandos.

Arquivo de Skill

Um arquivo de skill detalhado (SKILL.md) está disponível com:

  • Documentação completa de todas as 15 ferramentas
  • Especificações de entrada/saída
  • Exemplos de uso
  • Requisitos de autenticação

Isso pode ser usado por LLMs ou agentes para entender as ferramentas disponíveis e como usá-las.

Licença

Este software é fornecido sob a licença AGPL-3.0.