Better GitLab MCP Server
Um servidor MCP GitLab melhorado com correções de bugs e aprimoramentos para acessar recursos do GitLab.
Documentação
Servidor MCP do GitLab
📖 Documentação → Guias de configuração, variáveis de ambiente e a referência completa de ferramentas estão no site de documentação hospedado.
@zereight/mcp-gitlab
GitLab MCP otimizado para fluxos de trabalho de agentes — gerencie projetos, merge requests, issues, pipelines, wiki, releases, tags, marcos e muito mais via stdio, SSE e Streamable HTTP.
Suporta PAT, OAuth, modo somente leitura, URLs de API dinâmicas e autorização remota para VS Code, Claude, Cursor, Copilot e outros clientes MCP.
Por que usar este GitLab MCP?
- 261 ferramentas +
discover_tools— comece com um conjunto pequeno de ferramentas; ative mais em tempo de execução sem agrupamento estilo CQRS - Revisão de MR em 2 etapas —
list_merge_request_changed_files→ diff em loteget_merge_request_file_diff - Agent Skill integrado — orientação de fluxo de trabalho em
skills/gitlab-mcp/ - Autenticação flexível — Personal Access Token, fluxo OAuth2 local no navegador, proxy OAuth MCP e autorização remota por solicitação
- Múltiplos transportes — stdio para clientes locais, SSE para clientes legados e Streamable HTTP para implantações remotas modernas
- Configuração amigável para clientes — exemplos para Claude Code, Codex, Antigravity, OpenCode, Copilot, Cline, Roo Code, Cursor, Kilo Code e Amp Code
- Pronto para self-hosted — funciona com instâncias GitLab personalizadas, configurações de proxy e roteamento dinâmico de URL de API
Como nos comparamos
| @zereight/mcp-gitlab | GitLab MCP A (comunidade estilo CQRS) | |
|---|---|---|
| Melhor para | Fluxos de trabalho de agentes de IA | Empresas multi-instância / ferramentas agrupadas |
| Modelo de ferramentas | ~261 ferramentas granulares + discover_tools | ~50–60 ferramentas agrupadas browse_* / manage_* |
| Revisão de MR | Diff em lote em 2 etapas | Varia |
| Node.js | >=18.17 | Frequentemente >=24 |
| Licença | MIT | Varia |
Início rápido: escolha entre Personal Access Token ou configuração OAuth2 abaixo, instale @zereight/mcp-gitlab e use zereight-mcp-gitlab na configuração do seu cliente MCP.
Guias de Configuração de Clientes
- Guia de Configuração do Claude Code
- Guia de Configuração do VS Code
- Guia de Configuração do GitHub Copilot
- Guia de Configuração do Codex
- Guia de Configuração do Cursor
- Guia de Configuração de Clientes MCP Baseados em JSON - para clientes estilo Factory AI Droid, OpenClaw e OpenCode
- Guia de Configuração de Autenticação OAuth2
- Referência de Variáveis de Ambiente
- Modo Stateless — HPA Multi-Pod
- Configuração de Agentes Personalizados e Múltiplos PATs
Uso
Visão Geral da Configuração
Métodos de Autenticação
O servidor suporta quatro métodos de autenticação:
Para uso local/desktop (mais comum):
- Personal Access Token (
GITLAB_PERSONAL_ACCESS_TOKEN) — configuração mais simples - OAuth2 — Navegador Local (
GITLAB_USE_OAUTH) — recomendado para melhor segurança
Para implantações servidor/remotas:
- OAuth2 — Proxy MCP (
GITLAB_MCP_OAUTH) — para clientes MCP remotos como Claude.ai - Autorização Remota (
REMOTE_AUTHORIZATION) — implantações multi-usuário onde cada chamador fornece seu próprio token
Caminhos de configuração rápida
- Claude Code: veja Guia de Configuração do Claude Code
- VS Code: veja Guia de Configuração do VS Code
- GitHub Copilot: veja Guia de Configuração do GitHub Copilot
- Codex: veja Guia de Configuração do Codex
- Cursor: veja Guia de Configuração do Cursor
- Clientes estilo Factory AI Droid / OpenClaw / OpenCode: veja Guia de Configuração de Clientes MCP Baseados em JSON
- Detalhes do fluxo OAuth no navegador: veja Guia de Configuração de Autenticação OAuth2
- OAuth sem callback localhost (SSO, shell remoto, clientes em segundo plano): execute
zereight-mcp-gitlab auth(fluxo de dispositivo GitLab 17.9+; 17.2–17.8 precisam deoauth2_device_grant_flow) e depois inicie o servidor comGITLAB_USE_OAUTH=true. Veja comando standalone de fluxo de dispositivo.
Para a configuração local mais simples, comece com um Personal Access Token. Para autenticação local baseada em navegador, use OAuth2. Para implantações remotas ou multi-usuário, continue para as seções MCP OAuth e Autorização Remota mais adiante neste README.
Instale o servidor uma vez:
brew tap zereight/gitlab-mcp https://github.com/zereight/gitlab-mcp
brew install zereight/gitlab-mcp/zereight-mcp-gitlab
Ou com npm:
npm install -g @zereight/mcp-gitlab
Ou com Nix, adicionando este flake ao seu próprio:
# flake.nix
inputs.gitlab-mcp.url = "github:zereight/gitlab-mcp";
# wherever you configure your MCP client:
command = lib.getExe inputs.gitlab-mcp.packages.${system}.default;
O caminho da store é fixado pelo seu arquivo de lock; atualize-o com nix flake update gitlab-mcp.
Os exemplos usam zereight-mcp-gitlab, um alias menos propenso a colisões para o binário legado mcp-gitlab. Se o seu cliente MCP não conseguir encontrá-lo, use o caminho absoluto de which zereight-mcp-gitlab.
Sem instalação global? Fixe npx na versão estável anterior (a versão recomendada por estas documentações), por exemplo npx -y @zereight/mcp-gitlab@2.1.60. Se você sempre quiser a versão mais recente, use npx -y @zereight/mcp-gitlab@latest em vez disso. O servidor imprime um aviso no stderr na inicialização quando uma versão mais nova está disponível (desative com GITLAB_DISABLE_VERSION_CHECK=true).
Usando Argumentos de CLI (para clientes com problemas de variáveis de ambiente)
Alguns clientes MCP (como o GitHub Copilot CLI) têm problemas com variáveis de ambiente. Use argumentos de CLI em vez disso:
{
"mcpServers": {
"gitlab": {
"command": "zereight-mcp-gitlab",
"args": ["--token=YOUR_GITLAB_TOKEN", "--api-url=https://gitlab.com/api/v4"],
"tools": ["*"]
}
}
}
Argumentos de CLI disponíveis:
--token- GitLab Personal Access Token (substituiGITLAB_PERSONAL_ACCESS_TOKEN)--api-url- URL da API do GitLab (substituiGITLAB_API_URL)--read-only=true- Ativa o modo somente leitura (substituiGITLAB_READ_ONLY_MODE, obsoleto — prefira--permission-mode=readonly)--permission-mode- Nível de permissão:readonly,modify(sem ferramentas de exclusão) oufull(substituiGITLAB_PERMISSION_MODE, padrãofull)--use-wiki=true- Ativa a API de wiki (substituiUSE_GITLAB_WIKI, legado — prefiraGITLAB_TOOLSETS=wiki)--use-milestone=true- Ativa a API de marcos (substituiUSE_MILESTONE, legado — prefiraGITLAB_TOOLSETS=milestones)--use-pipeline=true- Ativa a API de pipelines (substituiUSE_PIPELINE, legado — prefiraGITLAB_TOOLSETS=pipelines)--disable-version-check=true- Desativa o aviso de nova versão na inicialização (substituiGITLAB_DISABLE_VERSION_CHECK)
Argumentos de CLI têm precedência sobre variáveis de ambiente.
zereight-mcp-gitlab auth é um subcomando (não uma flag do servidor MCP). Ele executa o fluxo de dispositivo do GitLab e sai. Veja Argumentos de CLI.
Filtragem fina de ferramentas: use
GITLAB_PERMISSION_MODE=modifypara permitir create/update enquanto bloqueia toda ferramenta de exclusão (incluindo mutações de exclusão viaexecute_graphqle açõespush_filesdelete/move), ouGITLAB_PERMISSION_MODE=readonlypara acesso somente leitura. Você também pode ativar grupos de ferramentas comGITLAB_TOOLSETS=<group,…>, permitir ferramentas individuais comGITLAB_TOOLS=<tool,…>(por exemplo, grupos somente leitura mais algumas ferramentas de escrita específicas), e negar por padrão comGITLAB_DENIED_TOOLS_REGEX. As flags legadasUSE_GITLAB_WIKI/USE_MILESTONE/USE_PIPELINEsão mantidas apenas para compatibilidade reversa. Veja Referência de Ferramentas e Variáveis de Ambiente.
- sse
docker run -i --rm \
-e HOST=0.0.0.0 \
-e GITLAB_PERSONAL_ACCESS_TOKEN=your_gitlab_token \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_PERMISSION_MODE=readonly \
-e GITLAB_TOOLSETS=wiki,milestones,pipelines \
-e SSE=true \
-e SSE_AUTH_TOKEN=your_mcp_sse_token \
-p 3333:3002 \
zereight050/gitlab-mcp
{
"mcpServers": {
"gitlab": {
"type": "sse",
"url": "http://localhost:3333/sse",
"headers": {
"Authorization": "Bearer your_mcp_sse_token"
}
}
}
}
- streamable-http
docker run -i --rm \
-e HOST=0.0.0.0 \
-e REMOTE_AUTHORIZATION=true \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_PERMISSION_MODE=readonly \
-e GITLAB_TOOLSETS=wiki,milestones,pipelines \
-e STREAMABLE_HTTP=true \
-p 3333:3002 \
zereight050/gitlab-mcp
{
"mcpServers": {
"gitlab": {
"type": "streamable-http",
"url": "http://localhost:3333/mcp",
"headers": {
"Authorization": "Bearer glpat-..."
}
}
}
}
Usando o Proxy OAuth MCP (GITLAB_MCP_OAUTH)
Apenas para implantações servidor/remotas. Este modo requer que o servidor MCP seja implantado com uma URL HTTPS publicamente acessível. Para uso local/desktop, veja
GITLAB_USE_OAUTHacima.
Para clientes MCP remotos que suportam a especificação OAuth MCP (por exemplo, Claude.ai).
O servidor atua como um servidor de autorização OAuth 2.0 completo — solicitações não autenticadas
recebem uma resposta 401 + WWW-Authenticate, que aciona o fluxo OAuth no navegador
automaticamente no lado do cliente.
Clientes MCP remotos como OpenCode, MCPJam e Claude.ai podem enviar sua própria
URL de callback durante a autorização. Se você não puder registrar cada URL de callback
de cliente no GitLab, ative GITLAB_OAUTH_CALLBACK_PROXY=true. Com o modo proxy de
callback, o GitLab só precisa de uma URI de redirecionamento registrada: {MCP_SERVER_URL}/callback.
GITLAB_OAUTH_REDIRECT_URI é apenas para OAuth local (GITLAB_USE_OAUTH). Ele não
substitui URLs de callback de clientes OAuth MCP remotos e não deve ser usado para corrigir
erros remotos de Unregistered redirect_uri.
Esta variável existe porque o fluxo OAuth local inicia um navegador na mesma
máquina que o servidor MCP e escuta o callback em um servidor HTTP local,
por exemplo http://127.0.0.1:8888/callback.
O OAuth MCP remoto é diferente. No modo GITLAB_MCP_OAUTH=true, o cliente MCP
fornece sua própria URL de callback durante /authorize. GITLAB_OAUTH_REDIRECT_URI
não substitui essa URL fornecida pelo cliente.
| Modo | Ativar com | Variável de callback | URI de redirecionamento do GitLab |
|---|---|---|---|
| OAuth local | GITLAB_USE_OAUTH=true | GITLAB_OAUTH_REDIRECT_URI | http://127.0.0.1:8888/callback ou seu callback local |
| OAuth MCP remoto | GITLAB_MCP_OAUTH=true | GITLAB_OAUTH_CALLBACK_PROXY=true | {MCP_SERVER_URL}/callback |
Use GITLAB_OAUTH_REDIRECT_URI apenas quando o próprio servidor MCP for o dono do
callback do navegador local. Use GITLAB_OAUTH_CALLBACK_PROXY=true quando um cliente MCP remoto
for o dono da URL de callback.
Como funciona: Você implanta este servidor MCP em algum lugar com uma URL HTTPS pública. Clientes
MCP se conectam a {MCP_SERVER_URL}/mcp. O servidor lida com o fluxo OAuth 2.0,
trocando credenciais com o GitLab em nome do cliente.
Pré-requisitos:
- Uma URL de servidor HTTPS publicamente acessível (
MCP_SERVER_URL) — use ngrok para testes locais - Um aplicativo OAuth GitLab pré-registrado com escopos
api(ouread_api) — Vá paraAdmin area→Applications, defina a URI de redirecionamento para{MCP_SERVER_URL}/callback
| Variável de Ambiente | Obrigatória | Descrição |
|---|---|---|
GITLAB_MCP_OAUTH | ✅ | Defina como true para ativar |
GITLAB_API_URL | ✅ | URL base da API do GitLab |
GITLAB_OAUTH_APP_ID | ✅ | ID do Aplicativo OAuth do GitLab |
MCP_SERVER_URL | ✅ | URL HTTPS pública deste servidor MCP |
STREAMABLE_HTTP | ✅ | Deve ser true |
GITLAB_OAUTH_CALLBACK_PROXY | opcional | Defina como true para usar a URL fixa /callback do servidor MCP |
GITLAB_OAUTH_SCOPES | opcional | Escopos separados por vírgula (padrão: api,read_api,read_user) |
GITLAB_OAUTH_ALLOWED_GROUPS | opcional | Caminhos completos de grupos separados por vírgula — apenas membros (e membros de subgrupos) podem obter um token (substitui o obsoleto GITLAB_ALLOWED_GROUPS) |
Quando STREAMABLE_HTTP=true, credenciais GitLab do lado do servidor (GITLAB_PERSONAL_ACCESS_TOKEN, GITLAB_JOB_TOKEN, GITLAB_AUTH_COOKIE_PATH ou GITLAB_USE_OAUTH) exigem REMOTE_AUTHORIZATION=true, GITLAB_MCP_OAUTH=true ou STREAMABLE_HTTP_AUTH_TOKEN.
Solução de problemas
Unregistered redirect_uriVerifique o
redirect_urina URL do navegador. Se ele apontar para um callback de cliente comohttp://127.0.0.1:xxxxx/.../callback, habilite:GITLAB_OAUTH_CALLBACK_PROXY=trueNão corrija OAuth remoto do MCP alterando
GITLAB_OAUTH_REDIRECT_URI. Essa variável é apenas para OAuth local (GITLAB_USE_OAUTH).
docker run -i --rm \
-e HOST=0.0.0.0 \
-e GITLAB_MCP_OAUTH=true \
-e GITLAB_OAUTH_CALLBACK_PROXY=true \
-e STREAMABLE_HTTP=true \
-e MCP_SERVER_URL=https://your-server.example.com \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_OAUTH_APP_ID=your_app_id \
-p 3000:3002 \
zereight050/gitlab-mcp
Configuração do cliente MCP:
{
"mcpServers": {
"gitlab": {
"type": "http",
"url": "https://your-server.example.com/mcp"
}
}
}
Usando Autorização Remota (REMOTE_AUTHORIZATION)
Apenas para implantações de servidor/remotas. Cada chamador HTTP fornece seu próprio token do GitLab diretamente nos cabeçalhos da requisição — sem fluxo OAuth envolvido.
Para implantações multiusuário ou multi-tenant onde cada chamador fornece seu próprio token do GitLab no cabeçalho da requisição HTTP. Sem fluxo OAuth — o servidor MCP encaminha o token para o GitLab em nome do chamador.
Prioridade de cabeçalho: Private-Token > JOB-TOKEN > Authorization: Bearer
| Variável de Ambiente | Obrigatória | Descrição |
|---|---|---|
REMOTE_AUTHORIZATION | ✅ | Defina como true para habilitar |
STREAMABLE_HTTP | ✅ | Deve ser true |
ENABLE_DYNAMIC_API_URL | opcional | Permitir URL do GitLab por requisição via cabeçalho X-GitLab-API-URL |
GITLAB_ALLOWED_HOSTS | opcional | Hosts X-GitLab-API-URL permitidos separados por vírgula; hosts GITLAB_API_URL são sempre permitidos |
GITLAB_ALLOW_UNAUTHENTICATED_TOOL_DISCOVERY | opcional | Permitir apenas initialize, notifications/initialized, tools/list e server/discover não autenticados (chamadas de ferramentas ainda exigem autenticação) |
MCP_SERVER_URL / MCP_ALLOWED_HOSTS / MCP_ALLOWED_ORIGINS | opcional | Valores permitidos de host/origem pública /mcp para proteção contra rebinding de DNS |
MCP_TRUST_PROXY | opcional | Confiar nos cabeçalhos Forwarded / X-Forwarded-* atrás de um proxy reverso (URLs de download, req.ip do Express, limites de taxa IP /mcp, limites de taxa OAuth) |
GITLAB_ALLOW_UNAUTHENTICATED_TOOL_DISCOVERY=true é destinado a gateways MCP
ou UIs administrativas que precisam inspecionar metadados de ferramentas antes que um usuário forneça um
token do GitLab. Deixe-o desabilitado, a menos que a lista de ferramentas seja segura para expor na sua implantação.
Quando MCP_SERVER_URL não está definido, URLs de download remoto usam como fallback o endereço
local do servidor. Defina MCP_TRUST_PROXY=true somente se o servidor for acessível através de um
proxy reverso confiável e o acesso direto do cliente ao servidor MCP estiver bloqueado.
Isso habilita o trust proxy do Express para Streamable HTTP e SSE, deriva URLs
de download públicos de Forwarded / X-Forwarded-Proto / X-Forwarded-Host /
X-Forwarded-Prefix, e mantém o limite de taxa do endpoint OAuth funcionando quando
proxies enviam X-Forwarded-For com uma porta de cliente (por exemplo 1.2.3.4:5678).
Implantações existentes de OAuth+proxy devem definir isso explicitamente após o sinalizador ter sido
introduzido.
Exemplo de cabeçalhos de requisição:
Private-Token: glpat-xxxxxxxxxxxxxxxxxxxx
ou usando um token Bearer:
Authorization: Bearer glpat-xxxxxxxxxxxxxxxxxxxx
⚠️
REMOTE_AUTHORIZATIONnão é compatível com transporte SSE.STREAMABLE_HTTP=trueé obrigatório.
Variáveis de Ambiente
Use a referência dedicada para a lista completa de variáveis de ambiente:
A maioria dos usuários só precisa de um destes conjuntos iniciais:
- PAT local:
GITLAB_PERSONAL_ACCESS_TOKEN,GITLAB_API_URL - OAuth local:
GITLAB_USE_OAUTH=true,GITLAB_OAUTH_CLIENT_ID,GITLAB_OAUTH_REDIRECT_URI,GITLAB_API_URL - HTTP remoto multiusuário:
STREAMABLE_HTTP=true,REMOTE_AUTHORIZATION=true(ouGITLAB_MCP_OAUTH=true),MCP_TRUST_PROXY=true(atrás de um proxy reverso),MAX_REQUESTS_PER_MINUTE=300,MCP_SERVER_URLouMCP_ALLOWED_HOSTS,HOST,PORT - Múltiplas implantações lado a lado: defina um
MCP_SERVER_NAMEdistinto por instância (ex.:gitlab-selfhosted-readonly) para que clientes, logs e telemetria possam diferenciá-las - HPA multi-pod (stateless): acima +
OAUTH_STATELESS_MODE=true,OAUTH_STATELESS_SECRET(iguais em todos os pods). Veja Modo Stateless.
Variáveis comumente referenciadas:
GITLAB_API_URLGITLAB_PERSONAL_ACCESS_TOKENGITLAB_USE_OAUTHREMOTE_AUTHORIZATIONMCP_TRUST_PROXYMAX_REQUESTS_PER_MINUTEMAX_SESSIONSMCP_ALLOWED_HOSTSMCP_ALLOWED_ORIGINSGITLAB_MCP_OAUTHGITLAB_OAUTH_CALLBACK_PROXYOAUTH_REGISTER_RATE_LIMIT_PER_HOUROAUTH_STATELESS_MODEOAUTH_STATELESS_SECRET
O documento de referência também cobre:
- variáveis de autenticação e OAuth
- variáveis de proxy OAuth do MCP
- variáveis de filtragem de projetos e ferramentas
- descoberta dinâmica de ferramentas via
discover_tools(ativação de conjunto de ferramentas sob demanda) - variáveis de transporte e sessão
- variáveis de proxy e TLS
Para detalhes do modo proxy de callback, veja Proxy de Callback OAuth do GitLab MCP.
Configuração de Autorização Remota (Suporte Multiusuário)
Ao usar REMOTE_AUTHORIZATION=true, o servidor MCP pode suportar vários usuários, cada um com seu próprio token do GitLab passado via cabeçalhos HTTP. Isso é útil para:
- Instâncias de servidor MCP compartilhadas onde cada usuário precisa do seu próprio acesso ao GitLab
- Integrações de IDE que podem injetar tokens específicos de usuário nas requisições MCP
Exemplo de Configuração:
# Start server with remote authorization
docker run -d \
-e HOST=0.0.0.0 \
-e STREAMABLE_HTTP=true \
-e REMOTE_AUTHORIZATION=true \
-e GITLAB_API_URL="https://gitlab.com/api/v4" \
-e GITLAB_PERMISSION_MODE=readonly \
-e SESSION_TIMEOUT_SECONDS=3600 \
-p 3333:3002 \
zereight050/gitlab-mcp
Configuração do Cliente:
Seu IDE ou cliente MCP deve enviar um destes cabeçalhos com cada requisição:
Authorization: Bearer glpat-xxxxxxxxxxxxxxxxxxxx
ou
Private-Token: glpat-xxxxxxxxxxxxxxxxxxxx
O token é armazenado por sessão (identificada pelo cabeçalho mcp-session-id) e reutilizado para requisições subsequentes na mesma sessão.
Exemplo de Configuração de Cliente de Autorização Remota com Cursor
{
"mcpServers": {
"GitLab": {
"url": "http(s)://<your_mcp_gitlab_server>/mcp",
"headers": {
"Authorization": "Bearer glpat-..."
}
}
}
}
Notas Importantes:
- A autorização remota só funciona com transporte Streamable HTTP
- Cada sessão é isolada — tokens de uma sessão não podem acessar dados de outra sessão Tokens são limpos automaticamente quando as sessões são fechadas
- Tempo limite de sessão: Tokens de autenticação expiram após
SESSION_TIMEOUT_SECONDS(padrão 1 hora) de inatividade. Após o tempo limite, o cliente deve enviar os cabeçalhos de autenticação novamente. A sessão de transporte permanece ativa. - Cada requisição redefine o temporizador de tempo limite para aquela sessão
- Limite de taxa: Requisições
/mcpsão limitadas aMAX_REQUESTS_PER_MINUTEpor IP de cliente, e por sessão MCP ao usar OAuth ou autorização remota (padrão 60). Veja environment-variables.md. - Limite de capacidade: O servidor aceita até
MAX_SESSIONSsessões concorrentes (padrão 1000)
Configuração MCP OAuth (OAuth Nativo do Claude.ai)
Ao usar GITLAB_MCP_OAUTH=true, o servidor atua como um proxy OAuth para sua instância do
GitLab. O Claude.ai (e qualquer cliente compatível com a especificação MCP) lida com todo o fluxo
de autenticação no navegador automaticamente — sem necessidade de gerenciamento manual de Token de Acesso Pessoal.
Pré-requisitos:
Um aplicativo OAuth do GitLab pré-registrado é obrigatório. O GitLab restringe aplicativos
registrados dinamicamente (não verificados) ao escopo mcp, que é insuficiente para chamadas de API
(é necessário api ou read_api).
- Vá para sua instância do GitLab → Área de Administração > Aplicativos (em toda a instância) ou Configurações do Usuário > Aplicativos (pessoal)
- Crie um novo aplicativo com:
- Confidencial: desmarcado
- Escopos:
api,read_api,read_user(ou quaisquer escopos que você pretenda solicitar viaGITLAB_OAUTH_SCOPES)
- Salve e copie o ID do Aplicativo — este é seu
GITLAB_OAUTH_APP_ID
Como funciona:
- O usuário adiciona a URL do seu servidor MCP no Claude.ai
- O Claude.ai descobre os endpoints OAuth via
/.well-known/oauth-authorization-server - O Claude.ai se registra via Registro Dinâmico de Cliente (
POST /register) — tratado localmente pelo servidor MCP (cada cliente recebe um ID de cliente virtual) - O Claude.ai redireciona o navegador do usuário para a página de login do GitLab usando o aplicativo OAuth pré-registrado
- O usuário autentica; o GitLab redireciona de volta para
https://claude.ai/api/mcp/auth_callback - O Claude.ai envia
Authorization: Bearer <token>em cada requisição MCP - O servidor valida o token com o GitLab e o armazena por sessão
Configuração do servidor:
docker run -d \
-e STREAMABLE_HTTP=true \
-e GITLAB_MCP_OAUTH=true \
-e GITLAB_OAUTH_APP_ID="your-gitlab-oauth-app-client-id" \
-e GITLAB_API_URL="https://gitlab.example.com/api/v4" \
-e MCP_SERVER_URL="https://your-mcp-server.example.com" \
-p 3002:3002 \
zereight050/gitlab-mcp
Para desenvolvimento local (HTTP permitido):
MCP_DANGEROUSLY_ALLOW_INSECURE_ISSUER_URL=true \
STREAMABLE_HTTP=true \
GITLAB_MCP_OAUTH=true \
GITLAB_OAUTH_APP_ID=your-gitlab-oauth-app-client-id \
MCP_SERVER_URL=http://localhost:3002 \
GITLAB_API_URL=https://gitlab.com/api/v4 \
node build/index.js
Configuração do Claude.ai:
{
"mcpServers": {
"GitLab": {
"url": "https://your-mcp-server.example.com/mcp"
}
}
}
Nenhum campo headers é necessário — o Claude.ai obtém o token via OAuth automaticamente.
Variáveis de ambiente:
| Variável | Obrigatória | Descrição |
|---|---|---|
GITLAB_MCP_OAUTH | Sim | Defina como true para habilitar |
GITLAB_OAUTH_APP_ID | Sim | ID do cliente do aplicativo OAuth do GitLab pré-registrado |
MCP_SERVER_URL | Sim | URL HTTPS pública do seu servidor MCP; também permitida para verificações de Host/Origem /mcp |
GITLAB_API_URL | Sim | URL da API da sua instância do GitLab (ex.: https://gitlab.com/api/v4) |
STREAMABLE_HTTP | Sim | Deve ser true (SSE não é suportado) |
GITLAB_OAUTH_SCOPES | Não | Escopos do GitLab separados por vírgula para solicitar (ex.: api,read_user). Padrão é api (ou read_api quando GITLAB_READ_ONLY_MODE=true). O aplicativo pré-registrado deve ser configurado com pelo menos esses escopos. |
OAUTH_REGISTER_RATE_LIMIT_PER_HOUR | Não | Limite contínuo por IP para Registro Dinâmico de Cliente (POST /register). Padrão 20/hora; intervalo 1–1000. Aumente quando clientes (ex.: múltiplas janelas de IDE) atingirem a limitação de registro. Não é um limite da API do GitLab. |
MCP_DANGEROUSLY_ALLOW_INSECURE_ISSUER_URL | Não | Defina true apenas para desenvolvimento HTTP local |
Notas Importantes:
- OAuth do MCP funciona apenas com transporte HTTP Streamable (
SSE=trueé incompatível) - Cada sessão de usuário armazena seu próprio token OAuth — as sessões são totalmente isoladas
- Tempo limite de sessão, limitação de taxa e limites de capacidade se aplicam de forma idêntica ao
modo
REMOTE_AUTHORIZATION(SESSION_TIMEOUT_SECONDS,MAX_REQUESTS_PER_MINUTE,MAX_SESSIONS) - Limitação de taxa DCR:
POST /registeré limitado aOAUTH_REGISTER_RATE_LIMIT_PER_HOURpor IP de cliente (padrão 20/hora). Separado dos limites de/mcpe das cotas da API do GitLab. Consulte environment-variables.md. - Fallback de autenticação por cabeçalho: quando os cabeçalhos de requisição
Private-TokenouJOB-TOKENestão presentes, a validação OAuth é ignorada e o token bruto é usado diretamente para essa sessão. Isso permite que PATs e tokens de job de CI sejam usados junto com o fluxo OAuth na mesma instância do servidor.Authorization: Beareré sempre tratado como um token OAuth — usePrivate-Tokenpara autenticação por cabeçalho baseada em PAT.
Arquivos de Habilidades do Agente
Arquivos de habilidades pré-construídos estão disponíveis em skills/gitlab-mcp/ para agentes de IA que suportam carregamento de habilidades/instruções (Claude Code, GitHub Copilot, Cursor, etc.).
- SKILL.md — Guia principal (~800 tokens) com visão geral do conjunto de ferramentas, fluxos de trabalho principais e dicas de parâmetros
- reference/ — Documentação detalhada de fluxos de trabalho para revisão de código, merge requests, issues, pipelines e triagem de vulnerabilidades
Instale com a CLI skills:
npx skills add zereight/gitlab-mcp --skill gitlab-mcp-skill
Registre o diretório de habilidades no seu cliente de IA para obter orientação ideal de uso das ferramentas sem depender apenas da resposta completa do ListTools.
Ferramentas 🛠️
Clique para expandir
merge_merge_request- Mesclar um merge requestapprove_merge_request- Aprovar um merge requestunapprove_merge_request- Desaprovar um merge requestget_merge_request_approval_state- Obter detalhes de aprovação do merge request, incluindo aprovadoresget_merge_request_conflicts- Obter os conflitos de um merge requestlist_merge_request_pipelines- Listar pipelines de um merge request com paginaçãoexecute_graphql- Executar uma consulta GraphQL do GitLabcreate_or_update_file- Criar ou atualizar um arquivo em um projeto GitLabsearch_repositories- Pesquisar projetos GitLabcreate_repository- Criar um novo projeto GitLabcreate_group- Criar novo grupo ou subgrupoget_file_contents- Obter o conteúdo de um arquivo ou diretório de um projeto GitLabpush_files- Enviar vários arquivos em um único commitcreate_issue- Criar uma nova issuecreate_merge_request- Criar um novo merge requestfork_repository- Bifurcar um projeto para sua conta ou namespace especificadocreate_branch- Criar uma nova branchget_branch- Obter detalhes da branch (commit, status de proteção)list_branches- Listar branches no projeto com filtro de pesquisadelete_branch- Excluir branch do projetolist_protected_branches- Listar branches protegidas em um projeto, suporta filtro de pesquisaget_protected_branch- Obter detalhes de uma única branch protegida (níveis de acesso, configurações de push forçado)protect_branch- Proteger uma branch do repositório (definir níveis de acesso de push/merge/desproteção)unprotect_branch- Remover proteção de uma branch anteriormente protegidaupdate_default_branch- Alterar a branch padrão de um projetoget_merge_request- Obter detalhes de um merge request (mergeRequestIid ou branchName obrigatório). Defina include_summaries=true para resumos de deployment/commit/aprovaçãoget_merge_request_diffs- Obter as alterações/diffs de um merge request (mergeRequestIid ou branchName obrigatório)list_merge_request_changed_files- Listar caminhos de arquivos alterados em um merge request sem conteúdo de diff (mergeRequestIid ou branchName obrigatório)list_merge_request_diffs- Listar diffs de merge request com paginação (mergeRequestIid ou branchName obrigatório)get_merge_request_file_diff- Obter diffs de arquivos específicos de um merge request (mergeRequestIid ou branchName obrigatório)list_merge_request_versions- Listar todas as versões de um merge requestget_merge_request_version- Obter uma versão específica de um merge requestget_branch_diffs- Obter diffs entre duas branches ou commitsupdate_merge_request- Atualizar um merge request (mergeRequestIid ou branchName obrigatório)create_note- Criar uma nova nota (comentário) em uma issue ou merge requestcreate_merge_request_thread- Criar uma nova thread em um merge requestresolve_merge_request_thread- Resolver uma thread em um merge requestmr_discussions- Listar itens de discussão de um merge requestdelete_merge_request_discussion_note- Excluir uma nota de discussão em um merge requestupdate_merge_request_discussion_note- Atualizar uma nota de discussão em um merge requestcreate_merge_request_discussion_note- Adicionar uma nova nota de discussão a uma thread existente de merge requestcreate_merge_request_note- Adicionar uma nova nota a um merge requestdelete_merge_request_note- Excluir uma nota existente de merge requestget_merge_request_note- Obter uma nota específica de um merge requestget_merge_request_notes- Listar notas de um merge requestupdate_merge_request_note- Modificar uma nota existente de merge requestget_draft_note- Obter uma única nota de rascunho de um merge requestlist_draft_notes- Listar notas de rascunho de um merge requestcreate_draft_note- Criar uma nota de rascunho para um merge requestupdate_draft_note- Atualizar uma nota de rascunho existentedelete_draft_note- Excluir uma nota de rascunhopublish_draft_note- Publicar uma única nota de rascunhobulk_publish_draft_notes- Publicar todas as notas de rascunho de um merge request. Opcionalmente define reviewer_state e publica uma nota de resumo (GitLab 19.2+). Pode definir reviewer_state mesmo sem rascunhos.list_merge_request_emoji_reactions- Listar todas as reações de emoji em um merge requestlist_merge_request_note_emoji_reactions- Listar todas as reações de emoji em uma nota de merge request. Passe discussion_id para respostas em threads de discussão.create_merge_request_emoji_reaction- Adicionar uma reação de emoji a um merge request (ex.: thumbsup, rocket, eyes)delete_merge_request_emoji_reaction- Remover uma reação de emoji de um merge requestcreate_merge_request_note_emoji_reaction- Adicionar uma reação de emoji a uma nota de merge request. Passe discussion_id para respostas em threads de discussão.delete_merge_request_note_emoji_reaction- Remover uma reação de emoji de uma nota de merge request. Passe discussion_id para respostas em threads de discussão.update_issue_note- Modificar uma nota existente de thread de issuecreate_issue_note- Adicionar uma nota a uma issue, opcionalmente respondendo a uma thread de discussãolist_issue_emoji_reactions- Listar todas as reações de emoji em uma issuelist_issue_note_emoji_reactions- Listar todas as reações de emoji em uma nota de issue. Passe discussion_id para respostas em threads de discussão.create_issue_emoji_reaction- Adicionar uma reação de emoji a uma issue (ex.: thumbsup, rocket, eyes)delete_issue_emoji_reaction- Remover uma reação de emoji de uma issuecreate_issue_note_emoji_reaction- Adicionar uma reação de emoji a uma nota de issue. Passe discussion_id para respostas em threads de discussão.delete_issue_note_emoji_reaction- Remover uma reação de emoji de uma nota de issue. Passe discussion_id para respostas em threads de discussão.list_issues- Listar issues (padrão: criadas pelo usuário atual; use scope='all' para todas)my_issues- Listar issues atribuídas ao usuário autenticadoget_issue- Obter detalhes de uma issue específica. Retorna um milestone resumido por padrão; defina full_response=true para o objeto milestone completoupdate_issue- Atualizar uma issue. Retorna uma confirmação resumida por padrão; defina full_response=true para o objeto completo da issue atualizadaupdate_issue_description_patch- Aplicar um patch (busca/substituição ou diff unificado) à descrição de uma issue. Reduz o uso de tokens ao permitir pequenas alterações sem enviar a descrição completa. Suporta dry_run para pré-visualizar alterações e create_note para resumir atualizações.delete_issue- Excluir uma issuelist_todos- Listar itens de tarefas (to-do) do GitLab para o usuário atualmark_todo_done- Marcar um item de tarefa (to-do) do GitLab como concluídomark_all_todos_done- Marcar todos os itens de tarefa (to-do) pendentes do GitLab como concluídos para o usuário atuallist_issue_links- Listar todos os links de issue para uma issue específicalist_issue_discussions- Listar discussões de uma issueget_issue_link- Obter um link de issue específicocreate_issue_link- Criar um link de issue entre duas issuesdelete_issue_link- Excluir um link de issuelist_namespaces- Listar todos os namespaces (usuários e grupos) disponíveis para o usuário atual. Filtre por kind='group' para apenas grupos.get_namespace- Obter detalhes de um namespace (usuário ou grupo) por ID ou caminho. Grupos são namespaces com kind='group'.verify_namespace- Verificar se um caminho de namespace existe. Use parent_id para limitar a verificação a um namespace pai específico — obrigatório para namespaces aninhados onde o mesmo caminho pode existir sob diferentes pais.get_project- Obter detalhes de um projeto específicolist_projects- Listar projetos acessíveis pelo usuário atualupdate_project- Atualizar configurações do projeto, como descrição, visibilidade, branch padrão e níveis de acesso a recursoslist_project_members- Listar membros de um projeto GitLablist_group_members- Listar membros de um grupo GitLab com pesquisa opcional por nome ou nome de usuáriolist_labels- Listar labels de um projetoget_label- Obter um único label de um projetocreate_label- Criar um novo label em um projetoupdate_label- Atualizar um label existente em um projetodelete_label- Excluir um label de um projetolist_group_projects- Listar projetos em um grupolist_wiki_pages- Listar páginas wiki em um projetoget_wiki_page- Obter detalhes de uma página wiki específicacreate_wiki_page- Criar uma página wiki em um projetoupdate_wiki_page- Atualizar uma página wiki em um projetodelete_wiki_page- Excluir uma página wiki de um projetolist_group_wiki_pages- Listar páginas wiki em um grupoget_group_wiki_page- Obter detalhes de uma página wiki específica de grupocreate_group_wiki_page- Criar uma página wiki em um grupoupdate_group_wiki_page- Atualizar uma página wiki em um grupodelete_group_wiki_page- Excluir uma página wiki de um grupoget_repository_tree- Listar arquivos e diretórios em um repositóriolist_pipelines- Listar pipelines com opções de filtroget_pipeline- Obter detalhes de um pipeline específicoget_pipeline_variables- Obter variáveis configuradas para um pipelineget_pipeline_test_report- Obter relatório de testes do pipelineget_pipeline_test_report_summary- Obter resumo do relatório de testes do pipelinedelete_pipeline- Excluir um pipeline. Requer o papel de Proprietário do projeto, não pode ser desfeito e não exclui automaticamente pipelines filhos.update_pipeline_metadata- Atualizar metadados do pipelinelist_deployments- Listar deployments com opções de filtroget_deployment- Obter detalhes do deployment, incluindo approval_summary, approvals e pending_approval_count quando o GitLab os fornecercreate_deployment- Criar um deploymentupdate_deployment- Atualizar o status de um deploymentdelete_deployment- Excluir um deploymentlist_deployment_merge_requests- Listar merge requests enviados com um deploymentapprove_deployment- Aprovar ou rejeitar um deployment de ambiente protegidolist_environments- Listar ambientes em um projetoget_environment- Obter detalhes de um ambiente específicoupdate_environment- Atualizar um ambientedelete_environment- Excluir um ambiente interrompidostop_environment- Interromper um ambientestop_stale_environments- Interromper ambientes obsoletos elegíveis; ambientes protegidos são excluídos e os ambientes são interrompidos, não excluídosdelete_review_app_environments- Agendar exclusão de ambientes de review-app interrompidos uma semana depois; dry_run padrão é true e o agendamento real requer dry_run=falselist_pipeline_triggers- Listar tokens de trigger de pipeline do projetoget_pipeline_trigger- Obter um trigger de pipeline do projetocreate_pipeline_trigger- Criar um trigger de pipeline do projetoupdate_pipeline_trigger- Atualizar um trigger de pipeline do projetodelete_pipeline_trigger- Excluir um trigger de pipeline do projetotrigger_pipeline- Acionar um pipeline com um token de trigger de pipelinelist_pipeline_jobs- Listar todos os jobs em um pipeline específicolist_pipeline_trigger_jobs- Listar jobs de trigger (bridges) em um pipelineget_pipeline_job- Obter detalhes de um número de job de pipeline do GitLabget_pipeline_job_output- Obter a saída/rastro de um job de pipeline com paginação opcionalvalidate_ci_lint- Validar o conteúdo YAML de CI/CD do GitLab fornecido para um projetovalidate_project_ci_lint- Validar uma configuração .gitlab-ci.yml existente para um projetolist_ci_catalog_resources- Listar recursos/componentes do Catálogo de CI/CD do GitLab visíveis para o usuárioget_ci_catalog_resource- Obter detalhes de um recurso do Catálogo de CI/CD do GitLab, incluindo versões e componentescreate_pipeline- Criar um novo pipeline para uma branch ou tagretry_pipeline- Repetir um pipeline com falha ou canceladocancel_pipeline- Cancelar um pipeline em execuçãolist_pipeline_schedules- Listar agendamentos de pipeline em um projeto, opcionalmente filtrados por ativos ou inativosget_pipeline_schedule- Obter detalhes de um agendamento de pipeline específico, incluindo suas variáveis e último pipelinelist_pipeline_schedule_pipelines- Listar os pipelines que um agendamento de pipeline acionoucreate_pipeline_schedule- Criar um novo agendamento de pipeline para uma branch ou tagupdate_pipeline_schedule- Atualizar um agendamento de pipeline existentedelete_pipeline_schedule- Excluir um agendamento de pipelineplay_pipeline_schedule- Executar um agendamento de pipeline imediatamentetake_ownership_pipeline_schedule- Assumir a propriedade de um agendamento de pipelineget_pipeline_schedule_variable- Obter uma única variável de um agendamento de pipelinecreate_pipeline_schedule_variable- Criar uma variável para um agendamento de pipelineupdate_pipeline_schedule_variable- Atualizar uma variável de um agendamento de pipelinedelete_pipeline_schedule_variable- Excluir uma variável de um agendamento de pipelineplay_pipeline_job- Executar um job de pipeline manualplay_pipeline_jobs- Executar vários jobs de pipeline manual sequencialmenteretry_pipeline_job- Tentar novamente um job de pipeline com falha ou canceladocancel_pipeline_job- Cancelar um job de pipeline em execuçãoerase_pipeline_job- Apagar o log e os artefatos de um job de pipelinewait_for_pipeline- Aguardar um pipeline atingir um status terminalwait_for_job- Aguardar um job atingir um status terminallist_job_artifacts- Listar arquivos de artefatos no arquivo de um jobdownload_job_artifacts- Baixar o arquivo de artefatos do job (zip) e salvar em um caminho localget_job_artifact_file- Obter o conteúdo de um único arquivo dos artefatos de um joblist_merge_requests- Listar merge requests (sem project_id: MRs do usuário; com project_id: MRs do projeto)list_group_merge_requests- Listar merge requests em todos os projetos de um grupo e seus subgruposlist_milestones- Listar marcos com opções de filtroget_milestone- Obter detalhes de um marco específicocreate_milestone- Criar um novo marcoedit_milestone- Editar um marco existentedelete_milestone- Excluir um marcoget_milestone_issue- Obter issues associadas a um marco específicoget_milestone_merge_requests- Obter merge requests associados a um marco específicopromote_milestone- Promover um marco para o próximo estágioget_milestone_burndown_events- Obter eventos de burndown para um marco específicolist_group_milestones- Listar marcos de grupo com opções de filtroget_group_milestone- Obter detalhes de um marco de grupo específicocreate_group_milestone- Criar um novo marco de grupoedit_group_milestone- Editar um marco de grupo existentedelete_group_milestone- Excluir um marco de grupoget_group_milestone_issue- Obter issues associadas a um marco de grupo específicoget_group_milestone_merge_requests- Obter merge requests associados a um marco de grupo específicoget_group_milestone_burndown_events- Obter eventos de burndown para um marco de grupo específicoget_users- Obter detalhes de usuário do GitLab por nomes de usuárioget_user- Obter detalhes de usuário por IDwhoami- Obter detalhes do usuário autenticado atuallist_commits- Listar commits do repositório com opções de filtroget_commit- Obter detalhes de um commit específicoget_commit_diff- Obter alterações/diffs de um commit específicoget_file_blame- Obter git blame para um arquivo em uma ref específica. Cada entrada mapeia um intervalo contíguo de linhas de origem para o commit que as alterou por último (id, author, authored_date, message). Use range_start/range_end para limitar o blame a linhas específicas.list_commit_statuses- Listar status de um commitcreate_commit_status- Criar ou atualizar o status de um commitlist_group_iterations- Listar iterações de grupo com opções de filtroupload_markdown- Enviar um arquivo para uso em conteúdo markdowndownload_attachment- Baixar um arquivo enviado de um projeto (imagens retornadas como base64; use local_path para salvar em disco)health_check- Verificar o status do servidor e a autenticação. Quando autenticado, também informa a versão da instância do GitLab de GET /api/v4/version (version, revision, enterprise). Falhas na consulta de versão não falham a verificação de saúde — esses campos são omitidos.list_events- Listar eventos do usuário autenticado (before/after: AAAA-MM-DD)get_project_events- Listar eventos de um projeto (before/after: AAAA-MM-DD)list_releases- Listar todos os releases de um projetoget_release- Obter um release pelo nome da tagcreate_release- Criar um novo releaseupdate_release- Atualizar um release existentedelete_release- Excluir um release (não exclui a tag)create_release_evidence- Criar evidência de release (Premium/Ultimate)download_release_asset- Baixar um arquivo de asset de release pelo caminho direto do assetlist_tags- Listar tags do repositório de um projetoget_tag- Obter uma tag do repositório pelo nomecreate_tag- Criar uma nova tag no repositóriodelete_tag- Excluir uma tag do repositórioget_tag_signature- Obter a assinatura X.509 de uma tag assinada (404 se não assinada)get_work_item- Obter um work item com detalhes completos, incluindo status, hierarquia, tipo e widgetslist_work_items- Listar work items com filtros (type, state, search, assignees, labels)create_work_item- Criar um work item (issue, task, incident, epic, etc.) com suporte completo de camposupdate_work_item- Atualizar um work item (title, description, labels, assignees, state, parent, custom fields, etc.)convert_work_item_type- Converter um work item para um tipo diferentelist_work_item_statuses- Listar status disponíveis para um tipo de work item (Premium/Ultimate)list_custom_field_definitions- Listar definições de campos personalizados para um tipo de work itemmove_work_item- Mover um work item para um projeto diferentelist_work_item_notes- Listar notas e discussões em um work itemcreate_work_item_note- Adicionar uma nota a um work item (suporta Markdown, notas internas, threads)list_work_item_emoji_reactions- Listar todas as reações de emoji em um work itemlist_work_item_note_emoji_reactions- Listar todas as reações de emoji em uma nota de work item (comentário, thread ou resposta de thread)create_work_item_emoji_reaction- Adicionar uma reação de emoji a um work item (ex.: thumbsup, rocket, eyes)delete_work_item_emoji_reaction- Remover uma reação de emoji de um work itemcreate_work_item_note_emoji_reaction- Adicionar uma reação de emoji a uma nota de work item (comentário, thread ou resposta de thread)delete_work_item_note_emoji_reaction- Remover uma reação de emoji de uma nota de work item (comentário, thread ou resposta de thread)get_timeline_events- Listar eventos de linha do tempo para um incidentecreate_timeline_event- Criar um evento de linha do tempo em um incidentelist_webhooks- Listar webhooks de um projeto ou grupocreate_webhook- Criar um webhook em um projeto ou grupoupdate_webhook- Atualizar um webhook existente de projeto ou grupodelete_webhook- Excluir um webhook de projeto ou grupolist_webhook_events- Listar eventos recentes de webhook (últimos 7 dias)get_webhook_event- Obter detalhes completos de um evento de webhook específicosearch_code- Pesquisar código em todos os projetos (requer pesquisa avançada ou Zoekt)search_project_code- Pesquisar código em um projeto específico (requer pesquisa avançada ou Zoekt)search_group_code- Pesquisar código em um grupo específico (requer pesquisa avançada ou Zoekt)list_project_variables- Listar variáveis de CI/CD de um projetoget_project_variable- Obter uma única variável de CI/CD de um projetocreate_project_variable- Criar uma variável de CI/CD para um projetoupdate_project_variable- Atualizar uma variável de CI/CD existente em um projetodelete_project_variable- Excluir uma variável de CI/CD de um projetolist_group_variables- Listar variáveis de CI/CD de um grupoget_group_variable- Obter uma única variável de CI/CD de um grupocreate_group_variable- Criar uma variável de CI/CD para um grupoupdate_group_variable- Atualizar uma variável de CI/CD existente em um grupodelete_group_variable- Excluir uma variável de CI/CD de um grupoget_dependency_proxy_settings- Obter configurações de proxy de dependência para um grupoupdate_dependency_proxy_settings- Atualizar configurações de proxy de dependência para um grupo (ativar/desativar, credenciais para pulls autenticados do Docker Hub)list_dependency_proxy_blobs- Listar blobs em cache do proxy de dependência para um grupopurge_dependency_proxy_cache- Agendar a limpeza de todos os blobs em cache do proxy de dependência para um grupolist_project_vulnerabilities- Listar vulnerabilidades de um projeto com filtros opcionais de estado, gravidade e tipo de relatório (baseado em GraphQL, paginação por cursor)get_vulnerability- Obter detalhes completos de uma vulnerabilidade específicadismiss_vulnerability- Dispensar uma vulnerabilidade com um motivo (acceptable_risk, false_positive, used_in_tests, mitigating_control, not_applicable) e comentário opcionalconfirm_vulnerability- Confirmar uma vulnerabilidade como um achado real que requer remediaçãoorbit_query- Executar uma consulta de grafo GitLab Orbit sobre o grafo de conhecimento SDLC indexadoorbit_get_schema- Buscar o esquema atual do grafo GitLab Orbit (tipos de nós e arestas)orbit_get_status- Verificar o status de indexação do GitLab Orbit para o escopo habilitadoorbit_list_tools- Listar as definições de ferramentas MCP expostas pelo GitLab Orbitdiscover_tools- Descobrir e ativar categorias adicionais de ferramentas para esta sessão. Categorias disponíveis: merge_requests, issues, repositories, branches, projects, labels, ci, groups, pipelines, milestones, wiki, releases, tags, users, workitems, webhooks, search, variables, dependency_proxy, vulnerabilities, orbit. Categorias já ativas são listadas na resposta.
Títulos de páginas wiki vs. slugs
O GitLab deriva o slug de uma página wiki (sua URL, /-/wikis/<slug>) a partir do título da página. Passar title para update_wiki_page / update_group_wiki_page portanto renomeia a página e altera sua URL — para páginas aninhadas, também pode mover a página para um caminho diferente — o que quebra links existentes.
Para alterar apenas o título exibido mantendo a URL estável, não passe title. Em vez disso, armazene o título exibido no front matter YAML do conteúdo da página e atualize o conteúdo:
---
title: My Custom Display Title
---
Page body…
O GitLab mantém o slug/URL intacto e mostra o título do front matter na interface. Leia-o de volta com get_wiki_page usando render_html: true, que preenche o campo front_matter — o campo simples title sempre reflete o valor derivado do slug.
Testes 🧪
O projeto inclui cobertura de testes abrangente, incluindo autorização remota:
# Run all tests (API validation + remote auth)
npm test
# Run only remote authorization tests
npm run test:remote-auth
# Run all tests including readonly MCP tests
npm run test:all
# Run only API validation
npm run test:integration
Todos os testes de autorização remota usam um servidor GitLab simulado e não exigem credenciais reais do GitLab.
