Jenkins MCP服务代理

一个本地运行的Jenkins MCP服务代理,无需安装插件即可通过Jenkins REST API提供17种管理工具,适用于无管理员权限的场景。

  • by mister-good-deal
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 mister-good-deal/host-mcp-jenkins

使用说明

主持人mcp詹金斯

Jenkins的本地MCP(模型上下文协议)服务器,用于复制 Jenkins MCP服务器插件 通过HTTP调用Jenkins REST API。

Jenkins实例上不需要安装插件。

为什么?

Jenkins服务器上必须安装官方的Jenkins MCP服务器插件。如果您没有安装插件的管理员权限, host-mcp-jenkins 为您提供了在本地运行的17个相同的MCP工具,使用您的个人API令牌调用Jenkins REST API。

兼容性

Jenkins版本 状态
LTS 2.462.x+ ✅ 完全支持
LTS 2.426.x✅ 完全支持
LTS 2.401.x✅ 完全支持
LTS 2.361.x✅ 完全支持
每周(最新) ✅ 完全支持

最低版本: 詹金斯2.164+。自最早的2.x版本以来,该服务器使用的所有REST API端点都可以在Jenkins核心中使用。这 tree Jenkins 1.464中引入了查询参数(用于响应字段过滤)。

插件依赖关系

大多数工具(17个工具中有11个)只使用Jenkins核心REST API,不需要任何插件。一些工具类别取决于特定的插件:

工具 必需插件 最小插件版本 注释
getJobScm, getBuildScm, findJobsWithScmUrl Git插件 2.0+ 通过Git插件操作暴露SCM数据
getTestResults JUnit插件 1.0+ 自1.577以来与Jenkins捆绑在一起
getFlakyFailures JUnit插件 1.33+ 需要缺陷检测支持

注: Git插件安装在约96%的Jenkins控制器上。JUnit插件的安装率约为97%,自1.577版本以来,默认情况下已与Jenkins捆绑在一起。如果这些插件不存在,相应的工具将返回空结果或404错误。

API端点矩阵

每个工具都映射到一个或多个Jenkins REST API端点。所有JSON端点都支持 tree 字段过滤参数。

工具 方法 REST端点 依赖关系
getJob 得到 /job/{name}/api/json 核心
getJobs 得到 /api/json 核心
getBuild 得到 /job/{name}/{build|lastBuild}/api/json 核心
triggerBuild 职位 /job/{name}/build, /job/{name}/buildWithParameters 核心
updateBuild 职位 /job/{name}/{build}/submitDescription, configSubmit 核心
whoAmI 得到 /me/api/json 核心
getStatus 得到 /api/json, /computer/api/json, /queue/api/json 核心
getQueueItem 得到 /queue/item/{id}/api/json 核心
getBuildLog 得到 /job/{name}/{build}/consoleText 核心
getProgressiveBuildLog 得到 /job/{name}/{build}/logText/progressiveText 核心
searchBuildLog 得到 /job/{name}/{build}/consoleText 核心
getJobScm 得到 /job/{name}/api/json Git插件
getBuildScm 得到 /job/{name}/{build}/api/json Git插件
getBuildChangeSets 得到 /job/{name}/{build}/api/json 核心
findJobsWithScmUrl 得到 /api/json (递归三级树) Git插件
getTestResults 得到 /job/{name}/{build}/testReport/api/json JUnit插件
getFlakyFailures 得到 /job/{name}/{build}/testReport/api/json JUnit插件≥1.33

快速开始

npx @mister-good-deal/host-mcp-jenkins \
  --jenkins-url https://jenkins.example.com \
  --jenkins-user your-username \
  --jenkins-token your-api-token

HTTP传输

要使用Streamable HTTP传输而不是stdio启动服务器,请执行以下操作:

npx @mister-good-deal/host-mcp-jenkins \
  --jenkins-url https://jenkins.example.com \
  --jenkins-user your-username \
  --jenkins-token your-api-token \
  --transport http \
  --port 3000

这暴露了:

  • 健康检查: GET /health → {"status":"ok"}
  • MCP端点: /mcp (流式HTTP)
  • 平滑关闭 上 SIGINT / SIGTERM

配置

所有选项都支持CLI参数和环境变量(CLI优先):

CLI参数 环境变量 必需 默认值 描述
--jenkins-url JENKINS_URL ✅ — Jenkins基本URL
--jenkins-user JENKINS_USER ✅ — Jenkins用户名
--jenkins-token JENKINS_API_TOKEN ✅ — Jenkins API令牌
--insecure JENKINS_INSECURE=true false 跳过TLS证书验证
--log-level LOG_LEVEL info debug
--timeout JENKINS_TIMEOUT 30000 HTTP请求超时(毫秒)
--max-retries JENKINS_MAX_RETRIES 3 瞬时错误的最大重试次数(429/5xx)
--retry-delay JENKINS_RETRY_DELAY 1000 指数退避的基延迟(毫秒)
--transport MCP_TRANSPORT stdio 运输类型(stdio
--port MCP_PORT 3000 HTTP服务器端口(仅限 --transport http)

获取Jenkins API令牌

  1. 登录Jenkins
  2. 点击您的用户名(右上角)→ 配置
  3. 在...之下 API代币,单击 添加新令牌
  4. 命名并单击 生成 --复制令牌值

MCP客户端配置

克劳德桌面

添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "jenkins": {
      "command": "npx",
      "args": ["-y", "@mister-good-deal/host-mcp-jenkins"],
      "env": {
        "JENKINS_URL": "https://jenkins.example.com",
        "JENKINS_USER": "your-username",
        "JENKINS_API_TOKEN": "your-api-token"
      }
    }
  }
}

VS代码

增添 .vscode/mcp.json:

{
  "servers": {
    "jenkins": {
      "command": "npx",
      "args": ["-y", "@mister-good-deal/host-mcp-jenkins"],
      "env": {
        "JENKINS_URL": "https://jenkins.example.com",
        "JENKINS_USER": "your-username",
        "JENKINS_API_TOKEN": "your-api-token"
      }
    }
  }
}

光标

添加到MCP服务器配置中:

{
  "mcpServers": {
    "jenkins": {
      "command": "npx",
      "args": ["-y", "@mister-good-deal/host-mcp-jenkins", "--jenkins-url", "https://jenkins.example.com", "--jenkins-user", "your-username", "--jenkins-token", "your-api-token"]
    }
  }
}

贡献者须知: 如果您在此工作区内运行MCP服务器(其中 package.json 宣布 "packageManager": "pnpm@...")以及 npx 失败与 host-mcp-jenkins: not found,使用 pnpm dlx 相反。这是因为corepack拦截 npx 从pnpm管理的项目运行时。

HTTP传输(远程)

当服务器运行时 --transport http,MCP客户端可以通过HTTP URL连接,而无需启动子进程:

克劳德桌面/VS代码/光标:

{
  "mcpServers": {
    "jenkins": {
      "url": "http://localhost:3000/mcp"
    }
  }
}

Docker使用

HTTP传输使运行在Docker容器内的AI代理能够连接到MCP服务器,而不需要MCP网关。

在主机上运行MCP服务器

在主机上使用HTTP传输启动服务器:

npx @mister-good-deal/host-mcp-jenkins \
  --jenkins-url https://jenkins.example.com \
  --jenkins-user your-username \
  --jenkins-token your-api-token \
  --transport http \
  --port 3000

从Docker容器内部,连接到 http://host.docker.internal:3000/mcp.

Docker编写示例

services:
  ai-agent:
    image: your-ai-agent:latest
    environment:
      MCP_SERVER_URL: "http://host.docker.internal:3000/mcp"
    extra_hosts:
      - "host.docker.internal:host-gateway"

注: 这 extra_hosts 在Linux上需要映射。在macOS和Windows上,Docker桌面解决了 host.docker.internal 自动。

可用工具(17)

与完全对等 Jenkins MCP服务器插件,加上额外功能:

核心(8)

工具 说明
getJob 按完整路径获得Jenkins工作
getJobs 获取按名称排序的Jenkins作业分页列表
getBuild 获取Jenkins作业的特定版本或最后一个版本
triggerBuild 触发Jenkins作业的构建(支持参数)
updateBuild 更新构建显示名称和/或描述
whoAmI 获取当前已验证用户的信息
getStatus 检查Jenkins实例的运行状况和准备状态
getQueueItem 通过其ID获取队列项目详细信息

构建日志(3)

工具 说明
getBuildLog 检索构建的分页日志行
getProgressiveBuildLog 通过Jenkins渐进文本API增量检索构建日志
searchBuildLog 搜索与模式(字符串或正则表达式)匹配的日志行

供应链管理(4)

工具 说明
getJobScm 检索Jenkins作业的SCM配置
getBuildScm 检索Jenkins构建的SCM配置
getBuildChangeSets 检索Jenkins构建的更改日志集
findJobsWithScmUrl 查找使用指定git SCM URL的作业

测试结果(2)

工具 说明
getTestResults 检索构建的测试结果(可选仅失败)
getFlakyFailures 检索构建的片状测试失败

与Jenkins MCP服务器插件的比较

功能 Jenkins插件 主机mcp Jenkins
安装 需要Jenkins管理员 无-在本地运行
传输 SSE、可流式HTTP、无状态 stdio(默认)、可流化HTTP
身份验证 Jenkins内置 基于HTTP Basic的API令牌
工具 16 17(完全奇偶校验+渐进日志)
响应格式 ToolResponse 信封 相同 ToolResponse 信封
tree 参数 通过内部API 转发到REST API

发展

# Install dependencies
pnpm install

# Build
pnpm run build

# Run in development mode
pnpm run dev -- --jenkins-url https://jenkins.example.com --jenkins-user admin --jenkins-token TOKEN

# Lint
pnpm run lint

# Unit tests
pnpm test

# Integration tests (requires Docker)
pnpm run test:integration

许可证

麻省理工学院