Jenkins

Um servidor para integração com Jenkins CI/CD para gerenciar e acionar builds.

Documentação

@grec0/mcp-jenkins

Servidor MCP para operar Jenkins a partir de clientes compatíveis com Model Context Protocol, como VS Code, Claude Desktop ou outros agentes. Permite consultar jobs, lançar builds, aguardar que terminem, revisar logs, inspecionar stages de pipelines, gerenciar approvals, consultar artifacts/cobertura e administrar jobs sem entrar na UI do Jenkins.

O Que Você Pode Fazer

  • Listar jobs, multibranch projects e ramos.
  • Consultar estado, configuração e último build de um job.
  • Lançar builds com ou sem parâmetros.
  • Aguardar de forma bloqueante até que um build termine.
  • Ver histórico de builds, logs, stages, nós e ações pendentes.
  • Parar builds com confirmação explícita.
  • Fazer rebuild/replay se o Jenkins tiver os endpoints/plugins necessários.
  • Criar, atualizar, habilitar, desabilitar ou excluir jobs usando confirmações de segurança.
  • Consultar relatórios de cobertura quando o job os publicar.

Quick Start

Requisitos

  • Node.js 18 ou superior.
  • URL do Jenkins acessível a partir da máquina onde o cliente MCP é executado.
  • Usuário do Jenkins com permissões suficientes.
  • API token ou senha do Jenkins.

Use API tokens quando possível. Não guarde credenciais reais em repositórios nem compartilhe configurações com segredos.

Configuração Recomendada Com npx

{
  "servers": {
    "jenkins": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "--package", "@grec0/mcp-jenkins@latest", "mcp-jenkins"],
      "env": {
        "JENKINS_URL": "https://tu-jenkins.com/jenkins",
        "JENKINS_USERNAME": "tu-usuario",
        "JENKINS_PASSWORD": "tu-api-token"
      }
    }
  }
}

Para fixar uma versão concreta, troque @latest por uma versão publicada:

"args": ["-y", "--package", "@grec0/mcp-jenkins@0.2.2", "mcp-jenkins"]

Instalação Global Opcional

npm install -g @grec0/mcp-jenkins

Configuração usando o binário global:

{
  "servers": {
    "jenkins": {
      "type": "stdio",
      "command": "mcp-jenkins",
      "env": {
        "JENKINS_URL": "https://tu-jenkins.com/jenkins",
        "JENKINS_USERNAME": "tu-usuario",
        "JENKINS_PASSWORD": "tu-api-token"
      }
    }
  }
}

Conceitos Básicos

fullName

A maioria das ferramentas novas usa fullName, que é o caminho lógico do job no Jenkins.

Exemplos:

Grec0AI_backend_sb
Grec0AI_backend_sb/main
folder/backend/main

Em um multibranch project, normalmente o primeiro nível é o projeto e o segundo nível é o ramo. Por exemplo, se o Jenkins mostrar:

Grec0AI_backend_sb / main

o fullName geralmente é:

Grec0AI_backend_sb/main

app e branch

As tools antigas usam app e branch. Continuam disponíveis por compatibilidade, mas para uso novo recomenda-se usar os managers baseados em fullName.

Managers vs Tools Simples

  • Use jenkins_job_manager para jobs e pipelines.
  • Use jenkins_build_manager para execuções/builds.
  • Use jenkins_wait_for_build quando um agente precisar aguardar o Jenkins antes de continuar.
  • Use jenkins_pipeline_monitor para stages, nós e inputs pendentes.
  • Use as tools jenkins_get_*, jenkins_start_job e jenkins_stop_job se você já tiver prompts antigos baseados em app e branch.

Fluxos Recomendados

Descobrir Jobs

{
  "action": "list",
  "limit": 20
}

Tool: jenkins_job_manager

Listar Ramos De Um Multibranch Project

{
  "action": "list",
  "folder": "Grec0AI_backend_sb",
  "limit": 20
}

Tool: jenkins_job_manager

Lançar Um Build E Aguardar Que Termine

  1. Inicie o build.
{
  "action": "start",
  "fullName": "Grec0AI_backend_sb/main"
}

Tool: jenkins_build_manager

  1. Liste builds para identificar o número iniciado.
{
  "action": "list",
  "fullName": "Grec0AI_backend_sb/main",
  "limit": 5
}

Tool: jenkins_build_manager

  1. Aguarde até que o Jenkins termine.
{
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 298,
  "pollIntervalSeconds": 10,
  "timeoutSeconds": 1800,
  "includeStages": true
}

Tool: jenkins_wait_for_build

  1. Somente depois de receber completed: true, revise logs, stages ou execute validações dependentes do build.

Revisar Uma Falha

{
  "action": "console",
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 298,
  "limit": 8000
}

Tool: jenkins_build_manager

{
  "action": "steps",
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 298
}

Tool: jenkins_pipeline_monitor

Aprovar Ou Rejeitar Um Input Pendente

  1. Consulte inputs pendentes.
{
  "action": "pending_inputs",
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 298
}

Tool: jenkins_pipeline_monitor

  1. Envie a decisão usando a proceedUrl ou abortUrl devolvida pelo Jenkins.
{
  "action": "submit_input",
  "decisionUrl": "https://tu-jenkins.com/jenkins/job/.../proceedEmpty"
}

Tool: jenkins_pipeline_monitor

Tools

jenkins_job_manager

Gerencia jobs e pipelines usando caminhos fullName.

Ações:

AçãoDescrição
listLista jobs do root ou de um folder/multibranch project.
getObtém detalhe de um job.
get_configDevolve o config.xml de um job.
create_pipelineCria um job/pipeline a partir de XML.
update_configAtualiza config.xml; requer confirmName.
deleteExclui um job; requer confirmName.
enableHabilita um job; requer confirmName.
disableDesabilita um job; requer confirmName.
get_branchesLista ramos usando o fluxo legacy baseado em app.

Parâmetros:

ParâmetroUso
actionAção a executar.
fullNameCaminho do job, por exemplo folder/job/main.
folderFolder ou multibranch project a partir do qual listar.
queryFiltro por texto para list.
limitMáximo de resultados para list.
configXmlXML completo para criar ou atualizar jobs.
confirmNameConfirmação exata para ações protegidas.
appNome de aplicação para get_branches.

Exemplos:

{
  "action": "list",
  "query": "backend",
  "limit": 20
}
{
  "action": "get",
  "fullName": "Grec0AI_backend_sb/main"
}
{
  "action": "get_config",
  "fullName": "Grec0AI_backend_sb/main"
}
{
  "action": "update_config",
  "fullName": "sandbox/test-pipeline",
  "configXml": "<flow-definition>...</flow-definition>",
  "confirmName": "sandbox/test-pipeline"
}
{
  "action": "delete",
  "fullName": "sandbox/test-pipeline",
  "confirmName": "sandbox/test-pipeline"
}

jenkins_build_manager

Gerencia execuções do Jenkins.

Ações:

AçãoDescrição
listLista builds recentes de um job.
getObtém detalhe de um build.
startInicia um build, opcionalmente com parâmetros.
waitAguarda até que um build termine ou atinja timeout.
stopPara um build; requer confirmBuild.
rebuildSolicita reconstrução se o Jenkins expuser o endpoint.
replaySolicita replay se o Jenkins expuser o endpoint.
consoleDevolve logs de console.
artifactsLista artifacts arquivados com URLs.

Parâmetros:

ParâmetroUso
actionAção a executar.
fullNameCaminho do job.
buildNumberNúmero de build para ações sobre uma execução.
parametersParâmetros para buildWithParameters.
pollIntervalSecondsIntervalo entre consultas para wait.
timeoutSecondsTempo máximo de espera para wait.
includeStagesInclui stages ao terminar o build.
limitQuantidade de builds ou caracteres de log.
startOffset para logs progressivos.
confirmBuildConfirmação exata para stop.

Exemplos:

{
  "action": "list",
  "fullName": "Grec0AI_backend_sb/main",
  "limit": 10
}
{
  "action": "start",
  "fullName": "Grec0AI_backend_sb/main",
  "parameters": {
    "DEPLOY_ENV": "dev"
  }
}
{
  "action": "wait",
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 298,
  "pollIntervalSeconds": 10,
  "timeoutSeconds": 1800,
  "includeStages": true
}
{
  "action": "console",
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 298,
  "limit": 12000
}
{
  "action": "stop",
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 298,
  "confirmBuild": 298
}

jenkins_wait_for_build

Tool dedicada para agentes que precisam bloquear o fluxo até que o Jenkins termine um build. A chamada responde quando o build finaliza, quando o timeout é atingido ou quando o Jenkins entra em uma pausa manual (input) que requer aprovação.

Parâmetros:

ParâmetroDefaultDescrição
fullNameObrigatórioCaminho do job.
buildNumberObrigatórioNúmero de build a aguardar.
pollIntervalSeconds10Segundos entre consultas. Mínimo efetivo: 2. Máximo efetivo: 120.
timeoutSeconds1800Timeout total. Máximo efetivo: 86400.
includeStagestrueInclui stages ao terminar se o job expuser Pipeline REST API.

Exemplo:

{
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 298,
  "pollIntervalSeconds": 10,
  "timeoutSeconds": 1800,
  "includeStages": true
}

Resposta esperada:

{
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 298,
  "completed": true,
  "timedOut": false,
  "waitedSeconds": 120,
  "pollCount": 13,
  "result": "SUCCESS",
  "build": { "number": 298 },
  "stages": []
}

Se o Jenkins ficar pausado aguardando aprovação manual, a tool devolve waitingForInput: true, o objeto pendingInput com proceedUrl/abortUrl e um nextStep com a chamada exata a jenkins_submit_input_action.

Se timedOut for true, o build ainda estava rodando quando o timeout foi atingido.

jenkins_pipeline_monitor

Inspeciona detalhes específicos de pipelines.

Ações:

AçãoDescrição
stepsDevolve stages do build.
nodeDevolve detalhe de um nó/stage por nodeId.
pending_inputsDevolve input actions pendentes.
submit_inputEnvia uma decisão usando decisionUrl.

Exemplos:

{
  "action": "steps",
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 296
}
{
  "action": "node",
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 296,
  "nodeId": "20"
}
{
  "action": "pending_inputs",
  "fullName": "Grec0AI_backend_sb/main",
  "buildNumber": 298
}
{
  "action": "submit_input",
  "decisionUrl": "https://tu-jenkins.com/jenkins/job/.../proceedEmpty"
}

Tools Simples E Compatibilidade

Estas tools continuam disponíveis para prompts antigos ou fluxos simples baseados em app e branch.

ToolUso
jenkins_get_job_statusEstado de um job por app e branch.
jenkins_start_jobInicia um job com um ramo.
jenkins_stop_jobPara um build por app, branch e buildNumber.
jenkins_get_build_stepsStages de um build.
jenkins_get_node_statusEstado de um nó de pipeline.
jenkins_get_pending_actionsInput actions pendentes.
jenkins_submit_input_actionEnvia approval/reject usando uma URL do Jenkins.
jenkins_get_coverage_reportResumo de cobertura.
jenkins_get_coverage_linesCobertura de um arquivo.
jenkins_get_coverage_pathsPaths com cobertura disponível.
jenkins_get_git_branchesRamos Git disponíveis para um job legacy.

Exemplo legacy:

{
  "app": "mi-app",
  "branch": "main"
}

Operações Protegidas

Algumas ações podem alterar ou destruir configuração no Jenkins. O MCP exige confirmação explícita.

AçãoConfirmação
jenkins_job_manager.update_configconfirmName deve ser igual a fullName.
jenkins_job_manager.deleteconfirmName deve ser igual a fullName.
jenkins_job_manager.enableconfirmName deve ser igual a fullName.
jenkins_job_manager.disableconfirmName deve ser igual a fullName.
jenkins_build_manager.stopconfirmBuild deve ser igual a buildNumber.

Recomendação: teste primeiro create_pipeline, update_config e delete em um job temporário.

Requisitos Do Jenkins

Funcionalidade disponível com Jenkins core:

  • Listar jobs.
  • Consultar job/build.
  • Iniciar builds.
  • Parar builds.
  • Ler logs.
  • Ler e atualizar config.xml se o usuário tiver permissões.
  • Listar artifacts arquivados.

Plugins recomendados para funcionalidade completa:

PluginPara Que Serve
pipeline-rest-apiStages, nós e input actions de pipelines.
git-parameterListagem de ramos em tools legacy.
jacocoCobertura backend Java.
Cobertura frontend/IstanbulCobertura frontend se o job publicar o ZIP esperado.

Consulte JENKINS_REQUIREMENTS.md para detalhes de plugins, endpoints e erros comuns.

Respostas E Limites

  • As tools devolvem JSON serializado como conteúdo de texto MCP.
  • console pode limitar logs com limit para evitar respostas enormes.
  • artifacts devolve metadata e URLs; não baixa binários por padrão.
  • coverage depende muito de como o job publica seus relatórios.
  • jenkins_wait_for_build mantém a chamada aberta até fim de build, timeout ou pausa manual com input pendente; ajuste timeoutSeconds para builds longos.

Troubleshooting

ERR_MODULE_NOT_FOUND com zod-to-json-schema

Se você vir um erro parecido com:

Cannot find module '.../zod-to-json-schema/dist/esm/parsers/record.js'

use uma versão recente do pacote e preferencialmente inicie com --package:

"args": ["-y", "--package", "@grec0/mcp-jenkins@latest", "mcp-jenkins"]

Se npx ficou com uma instalação temporária contaminada, exclua a pasta _npx que aparece no stacktrace ou limpe o cache do npm.

401 O 403

Revise JENKINS_USERNAME, JENKINS_PASSWORD, API token e permissões do usuário no Jenkins.

404 Em /wfapi/describe

O job pode não ser Pipeline ou pode faltar o plugin pipeline-rest-api.

Não Encontro O fullName

Primeiro liste jobs a partir do root:

{
  "action": "list",
  "limit": 50
}

Depois liste dentro do multibranch project:

{
  "action": "list",
  "folder": "nombre-del-proyecto",
  "limit": 50
}

jenkins_wait_for_build Esgota Timeout

O build ainda estava rodando. Aumente timeoutSeconds, revise logs com console ou consulte o build com jenkins_build_manager get. Se a resposta incluir waitingForInput: true, aprove ou aborte com jenkins_submit_input_action usando a decisionUrl devolvida.

Desenvolvimento Local

Esta seção é apenas para quem quiser modificar o pacote.

npm install
npm run build
npm test
npm run prerelease

Não publique uma versão nova sem executar npm run prerelease.

Licença

MIT