Gitlab MCP Server

Servidor do Protocolo de Contexto de Modelo (MCP) para GitLab — expõe 1006 operações das APIs REST e GraphQL do GitLab como ferramentas MCP (28 meta-ferramentas / 43 empresariais), 24 recursos, 38 prompts e 17 tipos de conclusão para assistentes de IA. Escrito em Go, binário estático único, transporte stdio e HTTP.

Documentação

GitLab MCP Server — GitLab for your AI assistant: one action catalog, three MCP tool surfaces

GitLab MCP Server

GitHub Release npm PyPI NuGet License: MIT Platform

CI Quality Gate Coverage Go Reference

Glama MCP Score

MCP Badge MCP Toplist Cursor Directory Hosted endpoint

Conecte seu assistente de IA ao GitLab para que ele possa revisar merge requests, fazer triagem de pipelines, gerenciar issues e elaborar releases — em linguagem natural. Um único binário estático (ou um contêiner), mais de 1000 ferramentas GitLab sobre a API REST + GraphQL completa, funcionando com Claude, Cursor, VS Code e qualquer cliente MCP.

Você conversa com seu assistente de IA; ele faz o trabalho no GitLab. Sem IDs de projeto, endpoints de API ou JSON para decorar.

10.359 tokens de contexto de inicialização por padrão, o mesmo em todos os níveis do GitLab (1.694 com GITLAB_MCP_CAPABILITY_SURFACE=minimal). Duas ferramentas alcançam todo o catálogo; medido com o tokenizador cl100k_base e verificado em CI a cada commit. Como é medido

"Revise o merge request !15 — é seguro mesclar?" · "Por que o último pipeline falhou?" · "Liste issues abertas atribuídas a mim" · "Gere notas de versão de v1.0 a v2.0"


🤖 Usando um assistente de IA? Dê a ele o URL deste repositório e peça para instalar o servidor para o seu cliente. Tudo o que um modelo precisa para fazer isso sem interação — a configuração declarativa por cliente, one-liners de claude mcp add e padrões — está em llms.txt (sem necessidade de assistente interativo).

Instale em 60 segundos

Escolha uma opção. Cada caminho termina com você digitando um prompt para seu assistente. Cada canal tem um guia completo: Instalação.

Quer ver antes de instalar? O inspetor de navegador faz login com OAuth e chama o endpoint hospedado somente leitura a partir de uma aba do navegador — nada é baixado. Executá-lo você mesmo ainda é a melhor forma de continuar usando.

Instalação com um clique

ClienteBotão de um cliqueEtapa do token
VS CodeInstall in VS Codesolicita que você (mascarado)
VS Code InsidersInstall in VS Code Insiderssolicita que você (mascarado)
CursorInstall in Cursoredite YOUR_GITLAB_TOKEN
LM StudioAdd to LM Studioedite YOUR_GITLAB_TOKEN
KiroAdd to Kiroedite YOUR_GITLAB_TOKEN
Claude DesktopDownload .mcpb extensioninterface de configurações

Cada botão registra o servidor baseado em Docker (baixa automaticamente a imagem na primeira execução; você precisa ter o Docker instalado). A linha do Claude Desktop baixa uma extensão de desktop nativa .mcpb (macOS universal, Windows e Linux amd64 e arm64; sem Docker). Abra com o Claude Desktop, ou no Linux use Extensões > Instalar Extensão..., e preencha as configurações. Precisa de um token? Crie um Personal Access Token com o escopo api. GitLab auto-gerenciado? Adicione uma variável de ambiente GITLAB_URL na configuração MCP do seu cliente após a instalação.

Claude Code (claude mcp add)

Docker (sem instalação — baixa a imagem na primeira execução):

claude mcp add gitlab --env GITLAB_TOKEN=glpat-xxxx --transport stdio \
  -- docker run -i --rm -e GITLAB_TOKEN ghcr.io/jmrplens/gitlab-mcp-server:latest

Ou instale o binário nativo primeiro e depois registre-o:

# Any platform (npm/pnpm) — downloads only your platform's prebuilt binary
npx -y @jmrp.io/gitlab-mcp-server          # zero install; clients launch it directly
npm install -g @jmrp.io/gitlab-mcp-server  # or install globally (npm)
pnpm add -g @jmrp.io/gitlab-mcp-server     # or globally (pnpm)
# Any platform (Python: uv/pipx/pip) — platform wheel carrying the same native binary
uvx jmrplens-gitlab-mcp-server             # zero install; clients launch it directly
pipx install jmrplens-gitlab-mcp-server    # or install globally (pipx)
pip install jmrplens-gitlab-mcp-server     # or into the active environment (pip)
# Linux wheels need glibc; on musl systems such as Alpine use the Docker image instead
# Any platform (.NET 10 SDK) — a .NET tool whose entry point is the same native binary
dnx gitlab-mcp-server                      # zero install; clients launch it directly
dotnet tool install -g gitlab-mcp-server   # or install globally (dotnet tool)
# macOS/Linux (Homebrew)
brew install jmrplens/tap/gitlab-mcp-server
# Linux/macOS (script)
curl -fsSL https://raw.githubusercontent.com/jmrplens/gitlab-mcp-server/main/scripts/install.sh | sh
# Windows (winget)
winget install --id jmrplens.gitlab-mcp-server -e
# Windows (PowerShell)
irm https://raw.githubusercontent.com/jmrplens/gitlab-mcp-server/main/scripts/install.ps1 | iex

claude mcp add gitlab --env GITLAB_TOKEN=glpat-xxxx -- gitlab-mcp-server

Clientes que iniciam servidores com npx, uvx ou dnx não precisam de instalação — basta apontá-los para npx -y @jmrp.io/gitlab-mcp-server, uvx jmrplens-gitlab-mcp-server ou dnx gitlab-mcp-server.

GitLab auto-gerenciado? Adicione --env GITLAB_URL=https://gitlab.example.com (e, para um certificado autoassinado, monte a CA e defina --env SSL_CERT_FILE=/path/to/ca-bundle.crt; GITLAB_MCP_SKIP_TLS_VERIFY=true é a alternativa mais direta, e o modo OAuth a recusa para uma instância não-loopback).

Execute uma vez para verificar a instalação

Iniciado em um terminal, ou clicado duas vezes no Windows, sem GITLAB_TOKEN definido, o binário imprime o que é e o que precisa e aguarda Enter, para que você possa confirmar a instalação antes de configurar qualquer coisa. A configuração em si fica no JSON do seu cliente MCP, abaixo.

JSON manual (Claude Desktop, Cursor, VS Code, …)

Mostrar configuração JSON para binário nativo e Docker

Binário nativo (Claude Desktop mcpServers, Cursor, etc.):

{
  "mcpServers": {
    "gitlab": {
      "command": "/path/to/gitlab-mcp-server",
      "env": { "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx" }
    }
  }
}

VS Code (.vscode/mcp.json, observe servers + type):

{
  "servers": {
    "gitlab": {
      "type": "stdio",
      "command": "/path/to/gitlab-mcp-server",
      "env": { "GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx" }
    }
  }
}

Variante Docker — substitua "command"/"args" por:

"command": "docker",
"args": ["run", "-i", "--rm", "-e", "GITLAB_TOKEN", "ghcr.io/jmrplens/gitlab-mcp-server:latest"]

Cline (VS Code) — abra a barra lateral do Cline → ícone de servidores MCP → Editar MCP Global, ou edite o arquivo de configurações diretamente:

  • macOS: ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
  • Linux: ~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
  • Windows: %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json

O Cline usa o formato mcpServers mostrado acima para o binário nativo.

Para uma implantação HTTP compartilhada e de longa execução em vez de stdio por usuário, veja Modo de Servidor HTTP.

Experimente sem instalar nada (endpoint hospedado)

Uma instância pública roda em https://mcp.jmrp.io/gitlab — nada para instalar, sem conta além do seu próprio token do GitLab. Aponte qualquer cliente MCP com suporte a HTTP para ele:

{
  "mcpServers": {
    "gitlab": {
      "type": "http",
      "url": "https://mcp.jmrp.io/gitlab",
      "headers": { "Authorization": "Bearer glpat-xxxxxxxxxxxx" }
    }
  }
}

O endpoint roda em modo OAuth, então a credencial viaja como Authorization: Bearer — um personal access token do GitLab funciona lá, verificado exatamente como um OAuth, que é o que mantém clientes sem fluxo OAuth (e uso headless) funcionando. Ele viaja por requisição e nunca é armazenado no servidor. Um cliente que fala o fluxo OAuth não precisa de cabeçalho algum: o 401 carrega um desafio RFC 9728 que ele segue para autorizar no navegador. PRIVATE-TOKEN é o cabeçalho do modo legado e não é aceito aqui; a instância é fixada em https://gitlab.com, então GITLAB-URL é ignorado.

Um token read_api é aceito e recebe uma superfície de ferramentas somente leitura — a verificação de escrita é por ação, então uma credencial que não pode quebrar nada é uma forma suportada de usar o endpoint, não uma rejeitada.

Duas páginas facilitam ainda mais. O cartão do servidor lista todo o catálogo sem nenhuma credencial e traz configuração copiável para Claude Code, Cursor e VS Code — incluindo o ID do cliente OAuth que esses clientes precisam. O inspetor de navegador chama o mesmo endpoint somente leitura a partir de uma aba do navegador: faça login com OAuth, escolha uma ferramenta, leia o JSON-RPC bruto que ele retorna — nada instalado.

É a forma mais rápida de experimentar o servidor, e a forma certa de continuar usando é localmente (qualquer opção acima) — por uma razão concreta, não como aviso: seu token e cada requisição passam pela máquina de outra pessoa. Executá-lo localmente significa que suas credenciais e seu tráfego do GitLab nunca saem do seu computador, o que também o torna a única opção sensata para uma instância privada auto-gerenciada.

O endpoint é HTTP streamable stateless na superfície padrão dynamic: POST é o transporte e um GET autenticado responde 405 por design; sem credencial, qualquer método responde 401 carregando o desafio RFC 6750 que um cliente OAuth segue — um curl simples que recebe 401 é o endpoint funcionando, não falhando. https://mcp.jmrp.io/gitlab/health não precisa de credencial e responde 200 com {"status":"ok",…}. Uma implantação HTTP auto-hospedada também pode rodar --auth-mode=oauth --gitlab-url=https://gitlab.com --public-url=https://mcp.example.com/mcp (ambos são necessários: OAuth precisa de uma instância fixa, e --public-url é o identificador de recurso RFC 9728 — passe exatamente o URL com que seus clientes estão configurados, pois um cliente descarta metadados que nomeiam um diferente), onde clientes descobrem o GitLab como servidor de autorização através desses metadados e autorizam no navegador em vez de copiar tokens — veja Configuração do App OAuth. É um dos servidores listados em mcp.jmrp.io, um diretório dos servidores MCP que mantenho, cada um acessível em seu próprio endpoint; https://mcp.jmrp.io/servers.json é a mesma lista para clientes automatizados.

É um serviço pessoal, executado por uma pessoa e oferecido como está: sem SLA, sem canal de suporte e sem promessa de que não mudará na próxima semana. Não adiciona cota própria — cada chamada gasta os limites do próprio GitLab.com, sob seu próprio token. E ele se atualiza sozinho, normalmente para a versão mais recente, então o que serve nunca é uma versão fixada.

Então é só perguntar: abra seu cliente de IA e tente "Liste meus projetos do GitLab." Veja o guia Começando para detalhes por cliente e mais exemplos de prompts.


Por que este servidor

  • GitLab em linguagem natural. A IA traduz "o MR !15 é seguro para mesclar?" nas chamadas de API corretas. Você não toca em endpoints, IDs ou JSON.
  • A plataforma inteira — mais de 1000 ferramentas. Cobertura ampla do GitLab REST v4 + GraphQL: projetos, branches, tags, releases, merge requests, issues, pipelines, jobs, grupos, usuários, wikis, ambientes, deployments, pacotes, registro de contêineres, runners, feature flags, variáveis de CI/CD, segurança, admin, tokens e mais.
  • Baixo consumo de tokens por padrão. A superfície dinâmica padrão expõe apenas 2 ferramentas (find + execute) enquanto alcança todo o catálogo — então cabe na janela de contexto de qualquer cliente. (Pegada de tokens →)
  • Seguro por design. Modo somente leitura, modo seguro (pré-visualização dry-run de toda mutação), opções de TLS para GitLab auto-hospedado e portões contínuos de qualidade/segurança do SonarCloud.
  • Roda em qualquer lugar. Um único binário estático ou contêiner; Windows, Linux e macOS; amd64 e arm64; stdio (desktop) e HTTP (remoto).
Mais: recursos, prompts e capacidades - **45 recursos MCP** (dados somente leitura: projetos, issues, pipelines, MRs, branches, membros, o manifesto `gitlab://tools` ciente de superfície e guias de melhores práticas de fluxo de trabalho). 26 tipos de recursos, objetos únicos além de três listas de pai único, também são [assináveis](docs/reference/capabilities/subscriptions.md). - **37 prompts MCP** (revisão de código, status de pipeline, avaliação de risco, notas de versão, standup, análises, auditoria e mais). - **4 assistentes de elicitação** (criação interativa de issue/MR/versão/projeto). - **4 capacidades MCP** (compleções, progresso, elicitação e [assinaturas de recursos](docs/reference/capabilities/subscriptions.md) — notificações `resources/updated` ao vivo, honradas por polling) e **51 ícones de ferramentas** (50 ícones de domínio mais a marca do projeto) para identificação visual em clientes MCP. - **Paginação** em todo endpoint de lista com metadados completos.

Superfícies de ferramentas

O servidor pode apresentar o GitLab em três formatos, controlados por GITLAB_MCP_TOOL_SURFACE. O padrão não requer configuração.

SuperfícieFerramentas visíveisMelhor para
Dinâmica (padrão)2 (gitlab_find_action, gitlab_execute_action)Menor custo de tokens; alcança o catálogo completo via find/execute.
Meta-ferramentas (meta)34 base / 51 Ultimate / 52 GitLab.com UltimateDespachadores agrupados por domínio com um parâmetro action.
Individual (individual)~868 Free/CE · ~1022 Premium · 1088–1094 UltimateUma ferramenta MCP por operação do GitLab; precisa de um contexto amplo.

As contagens de ferramentas escalam com sua edição do GitLab (GITLAB_MCP_TIER); níveis superiores expõem mais ações. Veja Dynamic Toolset e Meta-Tools Reference para o modelo de classificação, proteções de segurança e catálogos completos. Para execuções dinâmicas onde recursos dominam o contexto, defina GITLAB_MCP_CAPABILITY_SURFACE=minimal.

Pegada de tokens

Medido com go run ./cmd/audit_tokens/ -footprint contra o catálogo atual. Os totais estimam o contexto de inicialização visível a um cliente MCP: esquemas de ferramentas visíveis mais recursos e prompts compartilhados, usando o tokenizador cl100k_base (codificação GPT-4/GPT-3.5). Para a matriz completa (superfícies meta e individual, todos os modos GITLAB_MCP_META_PARAM_SCHEMA), veja Token Footprint Reference.

Configuração padrão: com GITLAB_MCP_TOOL_SURFACE não definido ou GITLAB_MCP_TOOL_SURFACE=dynamic, GITLAB_MCP_CAPABILITY_SURFACE=full, GITLAB_MCP_META_PARAM_SCHEMA=opaque e GITLAB_MCP_TIER não definidos (detectado, fallback free), o servidor usa a superfície dinâmica find/execute. Use GITLAB_MCP_TOOL_SURFACE=meta apenas quando você explicitamente quiser meta-ferramentas de domínio; use GITLAB_MCP_TOOL_SURFACE=individual apenas quando seu cliente puder lidar com o catálogo completo de ferramentas.

Configuração (GITLAB_MCP_TOOL_SURFACE / GITLAB_MCP_CAPABILITY_SURFACE)NívelFerramentas visíveisAções alcançáveisGITLAB_MCP_META_PARAM_SCHEMATokens de esquema de ferramentaTokens compartilhadosTotal de tokens
dynamic / full (padrão)Free/CE2872n/a1,5248,83510,359
dynamic / minimalFree/CE2872n/a1,5241701,694
dynamic / full (padrão)Premium21,026n/a1,5248,83510,359
dynamic / minimalPremium21,026n/a1,5241701,694
dynamic / full (padrão)Ultimate21,092n/a1,5248,83510,359
dynamic / minimalUltimate21,092n/a1,5241701,694

As linhas usam o catálogo base da Community Edition, a menos que a coluna Nível diga o contrário. GITLAB_MCP_TIER controla quais ações estão disponíveis; níveis superiores expõem mais ferramentas e, portanto, mais ações alcançáveis.

Compatibilidade

Capacidade MCPSuporte
FerramentasAté 1094 individuais / 34–52 meta
Recursos45 (estáticos + modelos)
Prompts37 modelos
Compleções18 nomes de argumentos, entre eles projetos, grupos, usuários, branches, tags, MRs, issues, pipelines, jobs, labels, milestones e SHAs
Logs do servidorEstruturados (texto/JSON) para stderr — não a capacidade MCP logging, que está obsoleta (SEP-2577) e deliberadamente não anunciada
ProgressoRelatório de progresso de execução de ferramentas
Elicitação4 assistentes interativos de criação
Assinaturasresources/updated por polling, 26 tipos de recursos

Testado com: VS Code + GitHub Copilot, Claude Desktop, Claude Code, Cursor, Windsurf, IDEs JetBrains, Zed, Kiro, Cline. Veja a Compatibility Matrix completa.

Avaliação de uso de ferramentas por modelos de IA

O projeto inclui um avaliador automatizado para qualidade MCP voltada a modelos, e atualmente não publica nenhum resultado. Cada figura que esta seção costumava conter foi retirada, incluindo o sucesso agregado de 99,5% com o qual este README liderava.

Eles foram retirados porque a medição não media o que afirmava. Um struct alimentava o estímulo dado ao modelo, o ambiente em que ele agia, o avaliador que o classificava e o relatório ao mesmo tempo, então partes do corpus colocavam a chamada esperada no prompt que o avaliador depois verificava, correções eram feitas a partir de uma chave de respostas fornecida pelo harness, e o avaliador comparava nomes de parâmetros em vez de seus valores. Uma execução não poderia falhar pelas razões que deveria capturar. As tabelas como estavam por último podem ser lidas no commit 4587cbfb3; o relato do que estava errado com elas é mantido em AI Model Evaluation Results.

O substituto está sendo construído como um pacote marcado sob test/e2e/ no harness de ponta a ponta, que já mantém o estímulo, o ambiente e o registro separados. Os números retornam aqui quando esse harness os produzir.

Retirado. A tabela dinâmica CE publicada aqui, atualizada pela última vez a partir de uma execução Docker datada de 20260627-232303, é legível no commit 4587cbfb3 e não é reproduzida porque a medição por trás dela era insustentável.

Resultados de avaliação de meta-ferramentas e Enterprise

Retirado. Nenhuma tabela de meta-ferramentas CE foi publicada aqui, e nenhuma será até que o harness reconstruído produza uma.

Retirado. A tabela meta Enterprise publicada aqui, atualizada pela última vez a partir de uma execução Docker datada de 20260527, é legível no commit 4587cbfb3 e não é reproduzida porque a medição por trás dela era insustentável.

Retirado. A tabela dinâmica Enterprise publicada aqui, atualizada pela última vez a partir de uma execução Docker datada de 20260628-015421, é legível no commit 4587cbfb3 e não é reproduzida porque a medição por trás dela era insustentável.

Documentação

A documentação completa está em jmrp.io/docs/gitlab-mcp-server. Use este mapa para a referência de fonte da verdade em uma área específica:

DocumentDescrição
IntroduçãoCaminhos de instalação, primeira consulta, configuração por cliente
InstalaçãoTodos os canais de instalação (binário, Homebrew, winget, Docker, npm, PyPI, NuGet, .mcpb, Plugins de Agente, hospedado), verificação, atualização e desinstalação
Configuração de IDEExemplos por cliente de stdio, HTTP legado e HTTP OAuth
ConfiguraçãoVariáveis de ambiente, modos de transporte, TLS
Variáveis de AmbienteTabela exaustiva de variáveis de ambiente com padrões e exemplos
Referência de CLITodas as flags de linha de comando, códigos de saída e exemplos de execução
Modo de Servidor HTTPImplantações HTTP compartilhadas, autenticação, isolamento de pool de servidores
Configuração de App OAuthAplicativo OAuth do GitLab, escopos, URIs de redirecionamento e quais clientes podem concluir um fluxo
CI/CDExecutando o servidor dentro de pipelines do GitLab CI e GitHub Actions
Formato de SaídaO contrato de resposta que toda ferramenta segue: blocos de conteúdo, paginação, próximos passos
Tratamento de ErrosClassificação de erros, extração de mensagens do GitLab e as dicas que as ferramentas retornam
Referência de FerramentasTodas as ferramentas individuais com esquemas de entrada/saída, incluindo o Orbit exclusivo do GitLab.com
Meta-FerramentasMeta-ferramentas de domínio 34/51/52 com despacho de ações
Conjunto de Ferramentas DinâmicoModo de baixo token com 2 ferramentas, catálogo canônico de ações, modelo de segurança e exemplos
RecursosTodos os 45 recursos com modelos de URI
PromptsTodos os 37 prompts com argumentos e formato de saída
TestesTestes unitários, E2E, avaliação de modelo de esquema, avaliação de modelo Docker e resultados de modelo selecionados
SegurançaModelo de segurança, escopos de token, validação de entrada
ArquiteturaArquitetura do sistema, design de componentes, fluxo de dados
Guia de DesenvolvimentoCompilação, testes, CI/CD, contribuição
Solução de ProblemasProblemas comuns de inicialização, token, TLS, transporte e descoberta de ferramentas

FAQ

Funciona com GitLab auto-hospedado?

Sim. Defina GITLAB_URL para a URL da sua instância. Quando GITLAB_URL é omitido, o modo stdio usa https://gitlab.com. Certificados TLS autoassinados são suportados instalando a CA no armazenamento de confiança do sistema ou apontando SSL_CERT_FILE para um pacote; GITLAB_MCP_SKIP_TLS_VERIFY=true pula a verificação, e --auth-mode=oauth recusa para uma instância não loopback.

Meus dados estão seguros?

Quando você mesmo o executa, localmente via stdio ou em sua própria infraestrutura via HTTP, cada requisição vai para sua instância do GitLab e para nenhum outro lugar. Não há verificação de atualização, verificação de licença nem telemetria: sua instância é o único host que este servidor contata.

A exceção é o endpoint hospedado: usar https://mcp.jmrp.io/gitlab significa que seu token e cada requisição passam por aquela máquina. Nada é armazenado lá, mas é um servidor de terceiros, e é por isso que a seção hospedada diz para continuar usando localmente.

Consulte PRIVACY.md para a declaração completa do fluxo de dados, e SECURITY.md para o modelo de segurança.

Posso usá-lo em modo somente leitura?

Sim. Defina GITLAB_MCP_READ_ONLY=true para desabilitar todas as ferramentas de mutação (criar, atualizar, excluir). Apenas operações de leitura estarão disponíveis.

Alternativamente, defina GITLAB_MCP_SAFE_MODE=true para um modo de simulação (dry-run): as ferramentas de mutação permanecem visíveis, mas retornam uma prévia JSON estruturada em vez de executar. Útil para auditoria, treinamento ou revisão do que um assistente de IA faria.

Quais edições do GitLab são suportadas?

Tanto a Community Edition (CE) quanto a Enterprise Edition (EE). Defina GITLAB_MCP_TIER=premium ou GITLAB_MCP_TIER=ultimate no modo stdio para habilitar ferramentas adicionais para recursos Premium/Ultimate (métricas DORA, vulnerabilidades, conformidade, etc.); deixe sem definir para detectar o nível a partir da licença da instância (padrão free). No modo HTTP, --tier pode forçar o nível; caso contrário, ele é detectado por entrada de pool de token+URL a partir da licença.

Como ele lida com limite de taxa?

O servidor inclui lógica de nova tentativa com backoff para limites de taxa da API do GitLab. Erros são classificados como transitórios (repetíveis) ou permanentes, com dicas acionáveis nas mensagens de erro.

Quais clientes de IA são suportados?

Qualquer cliente compatível com MCP: VS Code + GitHub Copilot, Claude Desktop, Cursor, Claude Code, Windsurf, IDEs JetBrains, Zed, Kiro e outros. O trecho de configuração de cada um está em Introdução, e os botões de um clique acima cobrem os mais comuns.

Compilando a partir do Código-Fonte

git clone https://github.com/jmrplens/gitlab-mcp-server.git
cd gitlab-mcp-server
make build

A imagem de contêiner publicada é ghcr.io/jmrplens/gitlab-mcp-server:latest. Consulte o Guia de Desenvolvimento para compilação cruzada, Docker Compose e diretrizes de contribuição.

ComponenteTecnologia
LinguagemGo 1.27+
SDK MCPgithub.com/modelcontextprotocol/go-sdk v1.8.0
Cliente GitLabgitlab.com/gitlab-org/api/client-go/v3 v3.14.0
Transportestdio (padrão), HTTP (Streamable HTTP)

Política de Privacidade

O servidor é executado inteiramente na sua máquina e não possui telemetria, análise ou backend próprio — os dados fluem apenas entre seu cliente MCP e a instância do GitLab que você configura (mais uma verificação opcional de atualização de binário assinado contra GitHub Releases). Seu token é usado somente para autenticar requisições do GitLab e nunca é registrado. Detalhes completos: PRIVACY.md.

Contribuições upstream

Este servidor é construído sobre as APIs REST e GraphQL do GitLab, sobre client-go e sobre o MCP Go SDK. Quando a compilação revela uma lacuna em um deles, a correção vai para o upstream em vez de permanecer como uma solução alternativa aqui, para que todos os outros usuários desses projetos também se beneficiem:

  • client-go: campos de resposta que o GitLab envia e que as structs do SDK não modelavam, encontrados ao comparar cada struct com o que um GitLab em execução realmente envia, e correções como um panic ao decodificar uma issue sem id (merge requests).
  • GitLab: documentação da API e anotações de resposta corrigidas onde divergiam do que a API envia, uma correção para que uma identidade GPG revogada não verifique mais commits, e adições propostas como cancelar um merge automático (merge requests).
  • MCP Go SDK: correções de conformidade de protocolo em torno de cancelamento, negociação de versão de protocolo e o handshake de inicialização (pull requests).

Cada lacuna é rastreada em docs/development/upstream-bugs.md: a issue ou merge request upstream, se já foi mesclada e em qual versão, e a solução alternativa que este servidor carrega até que seja lançada.

Contribuição e Segurança

Espelho do repositório: GitHub é o repositório canônico. Um espelho somente leitura está disponível em GitLab.com para descoberta; por favor, abra contribuições no GitHub.

Estatísticas desnecessárias — números que ninguém pediu

Contagens de arquivos

Contados sobre cada arquivo .go rastreado pelo git, o que inclui as árvores de fixtures sob cmd/audit_e2e_coverage/testdata que existem para serem lidas pela auditoria de cobertura em vez de serem executadas. docs/development/testing/testing.md conta os pacotes que go list retorna, então seus números de testes unitários são menores. Ambas são respostas corretas para perguntas diferentes.

CategoriaArquivosLinhas
Código-fonte (.go, não teste)1.373316.176
Testes unitários (_test.go)946628.464
Testes de ponta a ponta502106.434
Total2.8211.051.074

Funções

CategoriaContagem
Funções de código-fonte10.874
. Exportadas (públicas)3.282
. Não exportadas (privadas)7.592
Funções de teste unitário (TestXxx)18.512
Subtestes (t.Run(...))6.746
Funções de teste de ponta a ponta1.379

Proporções que valem a pena notar

ObservaçãoValor
Linhas de teste vs linhas de código-fonte1,99× mais testes do que código
Tamanho médio de arquivo-fonte~230 linhas
Tamanho médio de arquivo de teste~664 linhas
Linhas de comentário no código-fonte76.325 (~24,1% do código-fonte)
Funções de teste por função-fonte1,7×

Padrões de código

PadrãoContagem
Verificações if err != nil9.773
Instruções defer1.244
Tipos definidos struct3.512
Supressões //nolint241
Comentários TODO / FIXME / HACK2

Projeto

MétricaValor
Pacotes Go300
Dependências diretas (go.mod)34
Dependências indiretas37

Hall da fama

RegistroArquivo
Arquivo-fonte mais longocmd/server/main.go. 4.865 linhas
Arquivo de teste mais longocmd/server/main_test.go. 15.118 linhas

Porque não

FatoValor
Código-fonte impresso a 55 linhas/página~5.748 páginas de A4
Linhas de código-fonte mencionando "gitlab"14.801 (impossível evitar)
Nome de função mais longo no código-fonteassertDynamicCompatibilityPolicyOwnedByActionCompat (51 caracteres)
Nome de função de teste mais longoTestDomainCoverageFor_GitLabClientRegisterToolsOnAUtilitySurface_NamesNoMissingConstructor (90 caracteres)

Mantido por José M. Requena Plens · Página do projeto · Instância hospedada: mcp.jmrp.io/gitlab