GitLab
Gerencie projetos, repositórios, issues, arquivos e milestones do GitLab usando a API do GitLab.
Documentação
GitLab MCP Server
Servidor MCP para a API do GitLab, permitindo gerenciamento de projetos, operações de arquivos e muito mais. Bifurcado de https://github.com/modelcontextprotocol
Sumário
- Instalação
- Recursos
- Marcos de Grupo vs Marcos de Projeto
- Exemplos de Marcos de Grupo
- Fluxo de Trabalho Prático: Encontrando Grupos e Criando Marcos
- Ferramentas
- Configuração
- Variáveis de Ambiente
- Desenvolvimento
- Licença
Instalação
NPX (Recomendado)
npx @therealchristhomas/gitlab-mcp-server
Instalação Global
npm install -g @therealchristhomas/gitlab-mcp-server
gitlab-mcp
Recursos
- Criação Automática de Branch: Ao criar/atualizar arquivos ou enviar alterações, branches são criados automaticamente se não existirem
- Tratamento Abrangente de Erros: Mensagens de erro claras para problemas comuns
- Preservação do Histórico do Git: As operações mantêm o histórico adequado do Git sem push forçado
- Operações em Lote: Suporte para operações de arquivo único e múltiplos arquivos
- Gerenciamento de Fluxo de Trabalho do Projeto: Gerenciamento de labels e marcos para melhor organização do projeto
- Gerenciamento de Repositório: Pesquisar, criar e bifurcar projetos do GitLab
- Operações de Arquivos: Criar, atualizar e recuperar conteúdos de arquivos
- Gerenciamento de Branches: Criar branches e gerenciar a estrutura do repositório
- Gerenciamento de Issues: Criar, listar, atualizar, pesquisar e comentar em issues
- Gerenciamento de Merge Requests: Listar, atualizar, mesclar e comentar em merge requests
- Gerenciamento de Labels: Criar, atualizar e excluir labels do projeto
- Marcos de Projeto: Criar, atualizar e excluir marcos em nível de projeto
- Marcos de Grupo: Criar, atualizar e excluir marcos em nível de grupo que abrangem vários projetos
Marcos de Grupo vs Marcos de Projeto
Este servidor suporta tanto marcos de projeto quanto marcos de grupo:
Marcos de Projeto
- Escopados a um único projeto
- Use as ferramentas:
list_milestones,create_milestone,update_milestone,delete_milestone - Exemplo: Acompanhar recursos para o projeto
my-webapp
Marcos de Grupo
- Abrangem vários projetos dentro de um grupo
- Use as ferramentas:
list_group_milestones,create_group_milestone,update_group_milestone,delete_group_milestone - Suportam filtragem avançada com
include_ancestors,include_descendants - Exemplo: Acompanhar um lançamento em
my-webapp,my-apiemy-admin
Exemplos de Marcos de Grupo
Listar Marcos de Grupo
{
"group_id": "my-organization",
"state": "active",
"include_descendants": true
}
Criar Marco de Grupo
{
"group_id": "my-organization",
"title": "Q1 2025 Release",
"description": "Major feature release including new tools and performance improvements",
"due_date": "2025-03-31",
"start_date": "2025-01-01"
}
Pesquisa Avançada de Marcos de Grupo
{
"group_id": "my-organization/core",
"search": "release",
"include_ancestors": true,
"updated_after": "2024-01-01T00:00:00Z"
}
Com base na API de Marcos de Grupo do GitLab, os marcos de grupo são ideais para coordenar lançamentos e recursos em vários projetos da sua organização.
Fluxo de Trabalho Prático: Encontrando Grupos e Criando Marcos
Aqui está um fluxo de trabalho típico para trabalhar com marcos de grupo:
1. Pesquisar por Grupos
Primeiro, encontre o grupo com o qual deseja trabalhar:
{
"search": "my-organization",
"owned": true
}
2. Listar Marcos de Grupo Existentes
Verifique quais marcos já existem:
{
"group_id": "my-organization",
"state": "active"
}
3. Criar um Marco de Grupo
Crie um marco que abranja vários projetos:
{
"group_id": "my-organization",
"title": "Q1 2025 Release",
"description": "Cross-project release including webapp, API, and admin features",
"due_date": "2025-03-31"
}
Este fluxo de trabalho é especialmente útil para grandes organizações com vários projetos relacionados sob o mesmo grupo.
Ferramentas
Operações de Arquivos
-
create_or_update_file- Criar ou atualizar um único arquivo em um projeto
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLfile_path(string): Caminho onde criar/atualizar o arquivocontent(string): Conteúdo do arquivocommit_message(string): Mensagem de commitbranch(string): Branch onde criar/atualizar o arquivoprevious_path(string opcional): Caminho do arquivo para mover/renomear
- Retorna: Conteúdo do arquivo e detalhes do commit
-
push_files- Enviar vários arquivos em um único commit
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLbranch(string): Branch para enviarfiles(array): Arquivos para enviar, cada um comfile_pathecontentcommit_message(string): Mensagem de commit
- Retorna: Referência da branch atualizada
-
get_file_contents- Obter o conteúdo de um arquivo ou diretório
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLfile_path(string): Caminho para arquivo/diretórioref(string opcional): Branch/tag/commit de onde obter o conteúdo
- Retorna: Conteúdo do arquivo/diretório
Gerenciamento de Repositório
-
search_repositories- Pesquisar projetos do GitLab
- Entradas:
search(string): Consulta de pesquisapage(número opcional): Número da página para paginaçãoper_page(número opcional): Resultados por página (padrão 20)
- Retorna: Resultados da pesquisa de projetos
-
create_repository- Criar um novo projeto do GitLab
- Entradas:
name(string): Nome do projetodescription(string opcional): Descrição do projetovisibility(string opcional): 'private', 'internal' ou 'public'initialize_with_readme(booleano opcional): Inicializar com README
- Retorna: Detalhes do projeto criado
-
fork_repository- Bifurcar um projeto
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLnamespace(string opcional): Namespace para onde bifurcar
- Retorna: Detalhes do projeto bifurcado
-
create_branch- Criar uma nova branch
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLbranch(string): Nome para a nova branchref(string opcional): Branch/commit de origem para a nova branch
- Retorna: Referência da branch criada
Operações de Grupo
-
search_groups- Pesquisar grupos do GitLab
- Entradas:
search(string): Consulta de pesquisa para grupospage(número opcional): Número da página para paginaçãoper_page(número opcional): Resultados por página (padrão 20)owned(booleano opcional): Limitar por grupos pertencentes ao usuário atualmin_access_level(número opcional): Nível mínimo de acesso (10=Convidado, 20=Reporter, 30=Desenvolvedor, 40=Mantenedor, 50=Proprietário)
- Retorna: Resultados da pesquisa de grupos
Gerenciamento de Issues
-
create_issue- Criar uma nova issue
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLtitle(string): Título da issuedescription(string opcional): Descrição da issueassignee_ids(número[] opcional): IDs de usuários para atribuirlabels(string[] opcional): Labels para adicionarmilestone_id(número opcional): ID do marco
- Retorna: Detalhes da issue criada
-
list_issues- Listar todas as issues em um projeto do GitLab
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLstate(string opcional): 'opened', 'closed' ou 'all'labels(string opcional): Lista de nomes de labels separados por vírgulamilestone(string opcional): Título do marcoassignee_id(número opcional): ID do usuário responsávelauthor_id(número opcional): ID do usuário autorsearch(string opcional): Pesquisar no título e na descriçãocreated_after(string opcional): Retornar issues criadas após a data (ISO 8601)created_before(string opcional): Retornar issues criadas antes da data (ISO 8601)updated_after(string opcional): Retornar issues atualizadas após a data (ISO 8601)updated_before(string opcional): Retornar issues atualizadas antes da data (ISO 8601)sort(string opcional): Ordenar issues por vários critériosorder_by(string opcional): 'asc' ou 'desc'page(número opcional): Número da página para paginaçãoper_page(número opcional): Resultados por página (padrão 20)with_labels_details(booleano opcional): Se verdadeiro, retorna mais detalhes para cada label. O padrão é falso.
- Retorna: Array de objetos de issue
-
update_issue- Atualizar uma issue existente em um projeto do GitLab
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLissue_iid(número): ID interno da issuetitle(string opcional): Novo título da issuedescription(string opcional): Nova descrição da issuestate_event(string opcional): 'close' ou 'reopen'labels(string[] opcional): Array de nomes de labelsassignee_ids(número[] opcional): Array de IDs de usuários para atribuirmilestone_id(número opcional): ID do marco para atribuir
- Retorna: Detalhes da issue atualizada
-
search_issues- Pesquisar issues em um projeto do GitLab
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLsearch(string): Termo de pesquisa para título e descriçãostate(string opcional): 'opened', 'closed' ou 'all'labels(string opcional): Lista de nomes de labels separados por vírgulapage(número opcional): Número da página para paginaçãoper_page(número opcional): Resultados por página (padrão 20)
- Retorna: Array de objetos de issue correspondentes
-
add_issue_comment- Adicionar um comentário a uma issue em um projeto do GitLab
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLissue_iid(número): ID interno da issuebody(string): Conteúdo do comentário
- Retorna: Detalhes do comentário criado
Gerenciamento de Merge Requests
create_merge_request
- Criar um novo merge request
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLtitle(string): Título do MRdescription(string opcional): Descrição do MRsource_branch(string): Branch contendo as alteraçõestarget_branch(string): Branch para mesclardraft(booleano opcional): Criar como MR de rascunhoallow_collaboration(booleano opcional): Permitir commits de membros upstream
- Retorna: Detalhes do merge request criado
list_merge_requests
- Listar todas as merge requests em um projeto GitLab
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLstate(string opcional): 'opened', 'closed', 'locked', 'merged' ou 'all'target_branch(string opcional): Filtrar por branch de destinosource_branch(string opcional): Filtrar por branch de origemlabels(string opcional): Lista de nomes de labels separados por vírgulamilestone(string opcional): Título do milestoneassignee_id(number opcional): ID do usuário designado (assignee)author_id(number opcional): ID do usuário autorsearch(string opcional): Pesquisar no título e na descriçãocreated_after(string opcional): Retornar MRs criadas após a data (ISO 8601)created_before(string opcional): Retornar MRs criadas antes da data (ISO 8601)updated_after(string opcional): Retornar MRs atualizadas após a data (ISO 8601)updated_before(string opcional): Retornar MRs atualizadas antes da data (ISO 8601)sort(string opcional): Ordenar merge requestsorder_by(string opcional): 'asc' ou 'desc'page(number opcional): Número da página para paginaçãoper_page(number opcional): Resultados por página (padrão 20)
- Retorna: Array de objetos de merge request
-
update_merge_request- Atualizar uma merge request existente em um projeto GitLab
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLmerge_request_iid(number): ID interno da merge requesttitle(string opcional): Novo título da merge requestdescription(string opcional): Nova descrição da merge requeststate_event(string opcional): 'close' ou 'reopen'target_branch(string opcional): Nova branch de destinolabels(string[] opcional): Array de nomes de labelsassignee_ids(number[] opcional): Array de IDs de usuários para atribuirmilestone_id(number opcional): ID do milestone para atribuirremove_source_branch(boolean opcional): Remover branch de origem ao mesclar
- Retorna: Detalhes da merge request atualizada
-
merge_merge_request- Mesclar uma merge request em um projeto GitLab
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLmerge_request_iid(number): ID interno da merge requestmerge_commit_message(string opcional): Mensagem personalizada de commit de mergeshould_remove_source_branch(boolean opcional): Remover branch de origem após o mergemerge_when_pipeline_succeeds(boolean opcional): Mesclar quando o pipeline for bem-sucedidosha(string opcional): SHA que deve corresponder ao HEAD da branch de origem
- Retorna: Detalhes da merge request mesclada
-
add_merge_request_comment- Adicionar um comentário a uma merge request em um projeto GitLab
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLmerge_request_iid(number): ID interno da merge requestbody(string): Conteúdo do comentário
- Retorna: Detalhes do comentário criado
Gerenciamento de Labels
-
list_labels- Listar todos os labels em um projeto
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLpage(number opcional): Número da página para paginaçãoper_page(number opcional): Resultados por página (padrão 20)
- Retorna: Array de objetos de label
-
create_label- Criar um novo label
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLname(string): Nome do labelcolor(string): Cor do label (código hex)description(string opcional): Descrição do labelpriority(number opcional): Prioridade do label
- Retorna: Detalhes do label criado
-
update_label- Atualizar um label existente
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLname(string): Nome atual do labelnew_name(string opcional): Novo nome do labelcolor(string opcional): Nova cor do labeldescription(string opcional): Nova descrição do labelpriority(number opcional): Nova prioridade do label
- Retorna: Detalhes do label atualizado
-
delete_label- Excluir um label
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLname(string): Nome do label a excluir
- Retorna: Confirmação de sucesso
Gerenciamento de Milestones
-
list_milestones- Listar todos os milestones em um projeto
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLstate(string opcional): 'active' ou 'closed'page(number opcional): Número da página para paginaçãoper_page(number opcional): Resultados por página (padrão 20)
- Retorna: Array de objetos de milestone
-
create_milestone- Criar um novo milestone
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLtitle(string): Título do milestonedescription(string opcional): Descrição do milestonedue_date(string opcional): Data de vencimento (AAAA-MM-DD)start_date(string opcional): Data de início (AAAA-MM-DD)
- Retorna: Detalhes do milestone criado
-
update_milestone- Atualizar um milestone existente
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLmilestone_id(number): ID do milestonetitle(string opcional): Novo títulodescription(string opcional): Nova descriçãodue_date(string opcional): Nova data de vencimentostart_date(string opcional): Nova data de iníciostate_event(string opcional): 'close' ou 'activate'
- Retorna: Detalhes do milestone atualizado
-
delete_milestone- Excluir um milestone
- Entradas:
project_id(string): ID do projeto ou caminho codificado em URLmilestone_id(number): ID do milestone a excluir
- Retorna: Confirmação de sucesso
-
list_group_milestones- Listar todos os milestones em um grupo GitLab
- Entradas:
group_id(string): ID do grupo ou caminho codificado em URLstate(string opcional): 'active' ou 'closed'title(string opcional): Filtrar por título do milestone (sensível a maiúsculas/minúsculas)search(string opcional): Pesquisar no título ou na descriçãosearch_title(string opcional): Pesquisar apenas no títuloinclude_ancestors(boolean opcional): Incluir milestones do grupo paiinclude_descendants(boolean opcional): Incluir milestones de subgruposupdated_before(string opcional): Filtrar por data de atualização (ISO 8601)updated_after(string opcional): Filtrar por data de atualização (ISO 8601)containing_date(string opcional): Milestones que contêm a data fornecidastart_date(string opcional): Filtrar onde due_date >= start_dateend_date(string opcional): Filtrar onde start_date <= end_datepage(number opcional): Número da página para paginaçãoper_page(number opcional): Resultados por página (padrão 20)
- Retorna: Array de objetos de milestone do grupo
-
create_group_milestone- Criar um novo milestone em um grupo GitLab
- Entradas:
group_id(string): ID do grupo ou caminho codificado em URLtitle(string): Título do milestonedescription(string opcional): Descrição do milestonedue_date(string opcional): Data de vencimento (AAAA-MM-DD)start_date(string opcional): Data de início (AAAA-MM-DD)
- Retorna: Detalhes do milestone do grupo criado
-
update_group_milestone- Atualizar um milestone existente em um grupo GitLab
- Entradas:
group_id(string): ID do grupo ou caminho codificado em URLmilestone_id(number): ID do milestonetitle(string opcional): Novo títulodescription(string opcional): Nova descriçãodue_date(string opcional): Nova data de vencimentostart_date(string opcional): Nova data de iníciostate_event(string opcional): 'close' ou 'activate'
- Retorna: Detalhes do milestone do grupo atualizado
-
delete_group_milestone- Excluir um milestone de um grupo GitLab
- Entradas:
group_id(string): ID do grupo ou caminho codificado em URLmilestone_id(number): ID do milestone a excluir
- Retorna: Confirmação de sucesso
Configuração
Personal Access Token
Crie um Personal Access Token do GitLab com as permissões adequadas:
- Acesse User Settings > Access Tokens no GitLab
- Selecione os escopos necessários:
apipara acesso completo à APIread_apipara acesso somente leituraread_repositoryewrite_repositorypara operações de repositório
- Crie o token e salve-o com segurança
Uso com Claude Desktop
Adicione o seguinte ao seu claude_desktop_config.json:
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@therealchristhomas/gitlab-mcp-server"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}
Uso com Cursor/VSCode/Winsurf
Adicione o seguinte à sua configuração MCP:
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@therealchristhomas/gitlab-mcp-server"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}
Nota: Substitua <YOUR_TOKEN> pelo seu Personal Access Token real do GitLab. Além disso, substitua pela URL da API do GitLab se você não estiver usando gitlab.com
Variáveis de Ambiente
GITLAB_PERSONAL_ACCESS_TOKEN: Seu personal access token do GitLab (obrigatório)GITLAB_API_URL: URL base para a API do GitLab (opcional, padrão:https://gitlab.com/api/v4)
Para instâncias GitLab auto-hospedadas, atualize o GITLAB_API_URL para apontar para sua instância:
"GITLAB_API_URL": "https://your-gitlab-instance.com/api/v4"
Desenvolvimento
Build
npm run build
Modo de Desenvolvimento
npm run dev
Modo Watch
npm run watch
Licença
Este servidor MCP é licenciado sob a Licença MIT. Isso significa que você é livre para usar, modificar e distribuir o software, sujeito aos termos e condições da Licença MIT. Para mais detalhes, consulte o arquivo LICENSE no repositório do projeto.