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
Conecte seu assistente de IA ao GitLab para que ele possa revisar merge requests, fazer triagem de pipelines, gerenciar issues e redigir releases — em linguagem natural. Um único binário estático (ou um container), 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 memorizar.
"Revise o merge request !15 — é seguro fazer merge?" · "Por que o último pipeline falhou?" · "Liste issues abertas atribuídas a mim" · "Gere notas de release da v1.0 para a v2.0"
🤖 Usando um assistente de IA? Dê a ele a URL deste repositório e peça para instalar o servidor para o seu cliente. Tudo o que um modelo precisa para fazer isso de forma autônoma — a configuração declarativa por cliente, os one-liners de
claude mcp adde os padrões — está emllms.txt(nenhum assistente interativo necessário).
Instale em 60 segundos
Escolha uma opção. Cada caminho termina com você digitando um prompt para o seu assistente.
Instalação com um clique
Cada botão registra o servidor baseado em Docker (baixa a imagem automaticamente na primeira execução; você precisa ter o Docker instalado). A linha do Claude Desktop baixa uma extensão de desktop .mcpb nativa (macOS universal + Windows, sem Docker) — abra com o Claude Desktop e preencha as configurações. Precisa de um token? Crie um Personal Access Token com o escopo api. GitLab auto-gerenciado? Adicione a 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 --http=false
Ou instale o binário nativo primeiro e depois registre-o:
# 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
GitLab auto-gerenciado? Adicione --env GITLAB_URL=https://gitlab.example.com (e --env GITLAB_SKIP_TLS_VERIFY=true para certificados autoassinados).
Configuração guiada (qualquer cliente, sem flags para memorizar)
O binário inclui um assistente de configuração que coleta seu token do GitLab e configura seu cliente MCP para você — ideal se você preferir não editar JSON:
gitlab-mcp-server --setup
Ele detecta automaticamente VS Code, Claude Desktop, Claude Code, Cursor e Windsurf e grava a configuração correta. No Windows, clique duas vezes em .exe para iniciá-lo.
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", "--http=false"]
Cline (VS Code) — abra a barra lateral do Cline → ícone de servidores MCP → Edit Global MCP, 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 duração em vez de stdio por usuário, consulte HTTP Server Mode.
Experimente sem instalar nada (endpoint hospedado)
Uma instância pública roda em https://mcp.jmrp.io/gitlab — nada para instalar, nenhuma conta além do seu próprio token do GitLab. Aponte qualquer cliente MCP com suporte a HTTP para ela:
{
"mcpServers": {
"gitlab": {
"type": "http",
"url": "https://mcp.jmrp.io/gitlab",
"headers": { "PRIVATE-TOKEN": "glpat-xxxxxxxxxxxx" }
}
}
}
PRIVATE-TOKEN é obrigatório e viaja por requisição — nunca é armazenado no servidor. GITLAB-URL é opcional e o padrão é https://gitlab.com; defina-o para alcançar outra instância (ela deve estar acessível pela internet pública).
É a forma mais rápida de experimentar o servidor, e a maneira correta de continuar usando-o é ainda localmente (qualquer opção acima) ou por meio do Smithery — por um motivo concreto, 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 sem estado na superfície padrão dynamic: POST é o transporte, GET nele responde a 405 por design, e https://mcp.jmrp.io/gitlab/health responde a ok. É 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.
Então é só perguntar: abra seu cliente de IA e tente "Liste meus projetos do GitLab." Consulte o guia de Introdução 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 merge?" nas chamadas de API corretas. Você não toca em endpoints, IDs ou JSON.
- 🧰 A plataforma inteira — mais de 1000 ferramentas. Ampla cobertura do GitLab REST v4 + GraphQL: projetos, branches, tags, releases, merge requests, issues, pipelines, jobs, grupos, usuários, wikis, ambientes, deployments, pacotes, container registry, runners, feature flags, variáveis de CI/CD, segurança, admin, tokens e muito 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 o catálogo completo — então cabe na janela de contexto de qualquer cliente. (Pegada de tokens →) - ✅ Comprovado com modelos reais. Um avaliador automatizado executa Anthropic, Google, OpenAI e Qwen contra instâncias reais do GitLab: 99,5% de sucesso agregado em milhares de operações. (Resultados →)
- 🔒 Seguro por design. Modo somente leitura, modo seguro (pré-visualização dry-run de cada 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 container; 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://toolsciente da superfície e guias de melhores práticas de fluxo de trabalho). - 37 prompts MCP (revisão de código, status de pipeline, avaliação de risco, notas de release, standup, analytics, auditoria e mais).
- 4 assistentes de elicitação (criação interativa de issue/MR/release/projeto).
- 3 capacidades MCP (completions, progress, elicitation) e 50 ícones SVG de ferramentas para identificação visual em clientes MCP.
- Paginação em cada endpoint de listagem com metadados completos.
Superfícies de ferramentas
O servidor pode apresentar o GitLab em três formatos, controlados por TOOL_SURFACE. O padrão não precisa de configuração.
| Superfície | Ferramentas visíveis | Melhor 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) | 32 base / 49 Ultimate / 50 GitLab.com Ultimate | Despachantes agrupados por domínio com um parâmetro action. |
Individual (individual) | ~847 Free/CE · ~999 Premium · 1065–1071 Ultimate | Uma ferramenta MCP por operação do GitLab; precisa de uma janela de contexto grande. |
As contagens de ferramentas escalam com sua edição do GitLab (GITLAB_TIER); níveis mais altos expõem mais ações. Consulte 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 em que os recursos dominam o contexto, defina CAPABILITY_SURFACE=minimal.
Pegada de tokens
Medido com go run ./cmd/audit_tokens/ -footprint em relação ao catálogo atual. Os totais estimam o contexto de inicialização visível para 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 META_PARAM_SCHEMA), consulte Token Footprint Reference.
Configuração padrão: com TOOL_SURFACE não definido ou TOOL_SURFACE=dynamic, CAPABILITY_SURFACE=full, META_TOOLS não definidos, META_PARAM_SCHEMA=opaque e GITLAB_TIER não definido (detectado, fallback free), o servidor usa a superfície dinâmica find/execute. Use TOOL_SURFACE=meta apenas quando você quiser explicitamente meta-ferramentas de domínio; use TOOL_SURFACE=individual apenas quando seu cliente puder lidar com o catálogo completo de ferramentas.
Configuration (TOOL_SURFACE / CAPABILITY_SURFACE) | Nível | Ferramentas visíveis | Ações alcançáveis | META_PARAM_SCHEMA | Tokens de esquema de ferramentas | Tokens compartilhados | Total de tokens |
|---|---|---|---|---|---|---|---|
dynamic / full (padrão) | Free/CE | 2 | 851 | n/a | 2,204 | 31,758 | 33,962 |
dynamic / minimal | Free/CE | 2 | 851 | n/a | 2,204 | 1,088 | 3,292 |
dynamic / full (padrão) | Premium | 2 | 1,003 | n/a | 2,204 | 31,758 | 33,962 |
dynamic / minimal | Premium | 2 | 1,003 | n/a | 2,204 | 1,088 | 3,292 |
dynamic / full (padrão) | Ultimate | 2 | 1,069 | n/a | 2,204 | 31,758 | 33,962 |
dynamic / minimal | Ultimate | 2 | 1,069 | n/a | 2,204 | 1,088 | 3,292 |
As linhas usam o catálogo base da Community Edition, exceto quando a coluna Nível indica o contrário. GITLAB_TIER controla quais ações estão disponíveis; níveis superiores expõem mais ferramentas e, portanto, mais ações alcançáveis.
Compatibilidade
| Recurso MCP | Suporte |
|---|---|
| Ferramentas | Até 1071 individuais / 32–50 meta |
| Recursos | 45 (estáticos + modelos) |
| Prompts | 37 modelos |
| Completions | Projeto, usuário, grupo, branch, tag |
| Registro de log | Estruturado (texto/JSON) para stderr |
| Progresso | Relatório de progresso da execução de ferramentas |
| Elicitação | 4 assistentes interativos de criação |
Testado com: VS Code + GitHub Copilot, Claude Desktop, Claude Code, Cursor, Windsurf, JetBrains IDEs, Zed, Kiro, Cline. Consulte a Matriz de Compatibilidade completa.
Avaliação do Uso de Ferramentas por Modelos de IA
O projeto inclui um avaliador automatizado para a qualidade do MCP voltada aos modelos. Ele executa verificações somente de esquema no catálogo de ferramentas ou executa chamadas de ferramentas validadas pelo modelo por meio do MCP contra instâncias Docker GitLab CE ou Enterprise licenciadas com fixtures. Ele avalia se cada modelo escolhe a ação correta, envia parâmetros válidos, se recupera de erros acionáveis do GitLab e respeita as proteções de ações destrutivas — abrangendo Anthropic, Google, OpenAI e Qwen.
Resultado publicado atual: Docker CE dinâmico 20260627-232303.
| Provedor | Modelo | Compatibilidade | Precisão de ferramentas | Recuperação | Status ao vivo do Docker |
|---|---|---|---|---|---|
| Anthropic | claude-haiku-4-5-20251001 | OK | 100,0% | 100,0% (2/2) | 100,0% final em 555 operações |
gemini-flash-latest | OK | 100,0% | 100,0% (4/4) | 100,0% final em 555 operações | |
| OpenAI | gpt-5.4-nano | Revisão | 99,3% | 84,6% (11/13) | 98,0% final em 555 operações |
| Qwen | qwen3.6-flash | OK | 100,0% | 100,0% (5/5) | 100,0% final em 555 operações |
O conjunto publicado de avaliação de modelos cobre 596 tentativas de tarefas e 2220 operações MCP esperadas. Nos relatórios selecionados, os modelos emitiram 2265 chamadas de ferramentas em 2265 solicitações de modelos, com 99,5% de sucesso final agregado. Consulte Resultados da Avaliação de Modelos de IA para a matriz atual detalhada.
Enterprise meta e resultados de avaliação dinâmica
Resultado publicado atual: Docker Enterprise meta 20260527.
| Provedor | Modelo | Compatibilidade | Precisão de ferramentas | Recuperação | Status ao vivo do Docker |
|---|---|---|---|---|---|
| Anthropic | claude-haiku-4-5-20251001 | OK | 100,0% | 100,0% (1/1) | 100,0% final em 84 operações |
gemini-flash-latest | Revisão | 78,2% | 100,0% (7/7) | 100,0% final em 84 operações | |
| OpenAI | gpt-5.4-nano | Revisão | 100,0% | 100,0% (4/4) | 100,0% final em 84 operações |
| Qwen | qwen3.6-flash | OK | 100,0% | 100,0% (1/1) | 100,0% final em 84 operações |
O conjunto publicado de avaliação de modelos cobre 92 tentativas de tarefas e 336 operações MCP esperadas. Nos relatórios selecionados, os modelos emitiram 345 chamadas de ferramentas em 350 solicitações de modelos, com 100,0% de sucesso final agregado. Consulte Resultados da Avaliação de Modelos de IA para a matriz atual detalhada.
Resultado publicado atual: Docker Enterprise dinâmico 20260628-015421.
| Provedor | Modelo | Compatibilidade | Precisão de ferramentas | Recuperação | Status ao vivo do Docker |
|---|---|---|---|---|---|
| Anthropic | claude-haiku-4-5-20251001 | OK | 100,0% | 100,0% (1/1) | 100,0% final em 202 operações |
gemini-flash-latest | OK | 100,0% | 100,0% (2/2) | 100,0% final em 202 operações | |
| OpenAI | gpt-5.4-nano | OK | 100,0% | Sem reparos | 100,0% final em 202 operações |
| Qwen | qwen3.6-flash | OK | 100,0% | 100,0% (1/1) | 100,0% final em 202 operações |
O conjunto publicado de avaliação de modelos cobre 124 tentativas de tarefas e 808 operações MCP esperadas. Nos relatórios selecionados, os modelos emitiram 817 chamadas de ferramentas em 817 solicitações de modelos, com 100,0% de sucesso final agregado. Consulte Resultados da Avaliação de Modelos de IA para a matriz atual detalhada.
Documentação
A documentação completa está em jmrplens.github.io/gitlab-mcp-server. Use este mapa para a referência de fonte da verdade em uma área específica:
| Documento | Descrição |
|---|---|
| Introdução | Download, assistente de configuração, configuração por cliente |
| Configuração de IDE | Exemplos de stdio, HTTP legado e HTTP OAuth por cliente |
| Configuração | Variáveis de ambiente, modos de transporte, TLS |
| Variáveis de Ambiente | Tabela exaustiva de variáveis de ambiente com padrões e exemplos |
| Referência da CLI | Todas as flags de linha de comando, códigos de saída e exemplos em tempo de execução |
| Modo de Servidor HTTP | Implantações HTTP compartilhadas, autenticação, isolamento do pool de servidores |
| Referência de Ferramentas | Todas as ferramentas individuais com esquemas de entrada/saída, incluindo o Orbit exclusivo do GitLab.com |
| Meta-Ferramentas | 32/48/49 meta-ferramentas de domínio com despacho de ações |
| Conjunto Dinâmico de Ferramentas | Modo de baixo token com 2 ferramentas, catálogo canônico de ações, modelo de segurança e exemplos |
| Recursos | Todos os 45 recursos com modelos de URI |
| Prompts | Todos os 37 prompts com argumentos e formato de saída |
| Atualização Automática | Mecanismo de auto-atualização, modos e formato de lançamento |
| Testes | Testes unitários, E2E, avaliação de modelos por esquema, avaliação de modelos Docker e resultados selecionados de modelos |
| Segurança | Modelo de segurança, escopos de token, validação de entrada |
| Arquitetura | Arquitetura do sistema, design de componentes, fluxo de dados |
| Guia de Desenvolvimento | Compilação, testes, CI/CD, contribuição |
| Solução de Problemas | Problemas 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 via GITLAB_SKIP_TLS_VERIFY=true.
Meus dados estão seguros?
O servidor é executado localmente na sua máquina (modo stdio) ou na sua própria infraestrutura (modo HTTP). Nenhum dado é enviado a terceiros — todas as chamadas de API vão diretamente para a sua instância do GitLab. Consulte SECURITY.md para detalhes.
Posso usá-lo em modo somente leitura?
Sim. Defina GITLAB_READ_ONLY=true para desabilitar todas as ferramentas de mutação (criar, atualizar, excluir). Apenas operações de leitura estarão disponíveis.
Como alternativa, defina GITLAB_SAFE_MODE=true para um modo de execução simulada: 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_TIER=premium ou GITLAB_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 (fallback free). No modo HTTP, --tier pode forçar o nível; caso contrário, ele é detectado por entrada do pool de token+URL a partir da licença.
Como ele lida com a limitação 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 (passíveis de nova tentativa) 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, JetBrains IDEs, Zed, Kiro e outros. O assistente de configuração integrado pode configurar automaticamente a maioria dos clientes.
Compilação 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 cross-compilation, Docker Compose e diretrizes de contribuição.
| Componente | Tecnologia |
|---|---|
| Linguagem | Go 1.26+ |
| SDK MCP | github.com/modelcontextprotocol/go-sdk v1.7.0 |
| Cliente GitLab | gitlab.com/gitlab-org/api/client-go/v2 v2.57.0 |
| Transporte | stdio (padrão), HTTP (Streamable HTTP) |
Política de Privacidade
O servidor é executado inteiramente na sua máquina e não possui telemetria, análises ou backend próprios — os dados fluem apenas entre o seu cliente MCP e a instância do GitLab que você configura (além de uma verificação opcional de atualização de binário assinado contra o GitHub Releases). O seu token é usado apenas para autenticar solicitações ao GitLab e nunca é registrado em logs. Detalhes completos: PRIVACY.md.
Contribuição e Segurança
- Contribuição: consulte CONTRIBUTING.md para diretrizes de desenvolvimento, nomenclatura de branches, convenções de commit e o processo de PR.
- Segurança: consulte SECURITY.md para a política de segurança e relato de vulnerabilidades.
- Código de Conduta: consulte CODE_OF_CONDUCT.md (Contributor Covenant v2.1).
Espelho do repositório: o GitHub é o repositório canônico. Um espelho somente leitura está disponível no GitLab.com para fins de descoberta; por favor, abra contribuições no GitHub.
Estatísticas desnecessárias — números que ninguém pediu
Contagem de arquivos
| Categoria | Arquivos | Linhas |
|---|---|---|
Código-fonte (.go, não-teste) | 975 | 195.304 |
Testes unitários (_test.go) | 527 | 301.738 |
| Testes ponta a ponta | 171 | 44.448 |
| Total | 1.673 | 541.490 |
Funções
| Categoria | Contagem |
|---|---|
| Funções de código-fonte | 7.485 |
| — exportadas (públicas) | 2.629 |
| — não exportadas (privadas) | 4.856 |
Funções de teste unitário (TestXxx) | 11.651 |
Subtestes (t.Run(...)) | 2.922 |
| Funções de teste ponta a ponta | 379 |
Proporções relevantes
| Observação | Valor |
|---|---|
| Linhas de teste vs linhas de código | 1,54× mais testes que código |
| Tamanho médio de arquivo de código-fonte | ~200 linhas |
| Tamanho médio de arquivo de teste | ~572 linhas |
| Linhas de comentário no código-fonte | 21.636 (~11,1% do código-fonte) |
| Funções de teste por função de código-fonte | 1,6× |
Padrões de código
| Padrão | Contagem |
|---|---|
Verificações de if err != nil | 6.724 |
Declarações defer | 854 |
Tipos struct definidos | 2.729 |
Supressões de //nolint | 224 |
Comentários de TODO / FIXME / HACK | 3 |
Projeto
| Métrica | Valor |
|---|---|
| Pacotes Go | 230 |
Dependências diretas (go.mod) | 13 |
| Dependências indiretas | 50 |
Hall da fama
| Recorde | Arquivo |
|---|---|
| Maior arquivo de código-fonte | internal/tools/projects/projects.go — 3.846 linhas |
| Maior arquivo de teste | internal/tools/projects/projects_test.go — 8.186 linhas |
Por que não
| Fato | Valor |
|---|---|
| Código-fonte impresso a 55 linhas/página | ~3.550 páginas de A4 |
Linhas de código mencionando "gitlab" | 12.560 (impossível evitar) |
| Maior nome de função no código-fonte | assertDynamicCompatibilityPolicyOwnedByActionCompat (51 caracteres) |
| Maior nome de função de teste | TestRequiredMissingAndUnknownParamNames_SchemaValidation_ReturnsSortedMissingAndUnknown (87 caracteres) |