Skip to main content
Glama

Jenkins MCP

一个基于 Jenkins REST API 的 MCP Server,目标是兼容 Jenkins 2.332.2、2.356 以及后续版本。

它不安装 Jenkins 插件,因此不会受到官方 mcp-server 插件最低 Jenkins 核心版本的限制。一个 MCP Server 可以在配置中同时管理多个 Jenkins 实例,并通过 jenkins_name 选择目标实例。

已实现能力

  • 查询 Jenkins 版本和兼容能力

  • 查询当前认证用户

  • 查询根目录或 Folder 下的 Job

  • 查询 Job 和 Build

  • 获取构建日志,并限制返回行数

  • 查询 Queue、Queue Item 和节点

  • 触发构建、停止构建、取消排队构建

  • 用户名 + API Token 认证

  • 自动获取和重试 Jenkins CSRF Crumb

  • 默认只读,写操作需要显式设置 read_only: false

Related MCP server: Jenkins MCP Server

安装

建议使用 Python 3.10 或更高版本:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'

多 Jenkins 配置

创建 jenkins-mcp.json:

{
  "instances": [
    {
      "name": "jenkins-233",
      "base_url": "https://jenkins-233.example.com",
      "username": "mcp-user",
      "api_token": "replace-me",
      "read_only": true,
      "verify_ssl": true,
      "timeout_seconds": 30,
      "max_log_lines": 2000
    },
    {
      "name": "jenkins-356",
      "base_url": "https://jenkins-356.example.com/jenkins",
      "username": "mcp-user",
      "api_token": "replace-me",
      "read_only": false
    }
  ],
  "server": {
    "transport": "stdio",
    "log_level": "INFO"
  }
}

启动:

jenkins-mcp --config jenkins-mcp.json

也可以使用配置目录,每个 JSON 文件配置一个 Jenkins:

jenkins-mcp.d/
├── jenkins-233.json
└── jenkins-356.json

文件内容使用单个实例格式:

{
  "name": "jenkins-233",
  "base_url": "https://jenkins-233.example.com",
  "username": "mcp-user",
  "api_token": "replace-me",
  "read_only": true
}

启动:

jenkins-mcp --config-dir jenkins-mcp.d

运行中的服务会在每次 MCP 工具调用前检查配置文件变化。新增、修改或删除目录中的 *.json 文件后,下一次调用即可生效,不需要重启服务。配置文件格式错误或实例名称 重复时,服务会保留上一份有效配置。

生产环境建议通过环境变量或密钥管理系统注入配置,不要把 API Token 提交到 Git。

配置文件放置建议

程序不会自动创建或猜测配置目录,必须通过 --config、--config-dir 或对应环境变量 明确指定配置位置。建议将程序文件和敏感配置分开:

Windows:

C:\Tools\jenkins-mcp\           # 程序和虚拟环境
C:\ProgramData\jenkins-mcp\     # 运行配置
└── instances\
    ├── jenkins-233.json
    └── jenkins-356.json

Linux:

/opt/jenkins-mcp/                # 程序和虚拟环境
/etc/jenkins-mcp/                # 运行配置
└── instances/
    ├── jenkins-233.json
    └── jenkins-356.json

以上是部署建议,不是固定默认路径。开发时也可以直接使用仓库下的 config/jenkins-mcp.d/,但不要将真实 Token 提交到 Git。

目录模式中,只有配置目录顶层的 *.json 文件会被扫描;文件名可以自定义,实际实例名 由 JSON 中的 name 字段决定。单文件模式使用包含 instances 数组的总配置文件,不能把 这个总配置文件放入目录模式中。

Windows 启动

在 PowerShell 中从仓库目录执行:

Set-Location D:\imax\i-mcp\jenkins-mcp
py -3 -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install .

使用配置目录启动:

.\.venv\Scripts\jenkins-mcp.exe `
  --config-dir C:\ProgramData\jenkins-mcp\instances

也可以使用仓库源码入口:

.\.venv\Scripts\python.exe -m jenkins_mcp `
  --config-dir C:\ProgramData\jenkins-mcp\instances

使用总配置文件启动:

.\.venv\Scripts\jenkins-mcp.exe `
  --config C:\ProgramData\jenkins-mcp\jenkins-mcp.json

不想在命令行写路径时,可以设置环境变量:

$env:JENKINS_CONFIG_DIR = "C:\ProgramData\jenkins-mcp\instances"
\.venv\Scripts\jenkins-mcp.exe

配置文件建议使用 Windows ACL 限制访问权限,至少不要让普通用户读取包含 Token 的文件。

Linux 启动

cd /opt/jenkins-mcp
python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip
.venv/bin/python -m pip install .
sudo install -d -m 700 /etc/jenkins-mcp/instances
sudo chmod 600 /etc/jenkins-mcp/instances/*.json

如果使用下面的 systemd 示例,请先确保 jenkins-mcp 系统用户存在,并将配置目录和 文件授权给该用户读取,例如:

sudo useradd --system --home-dir /opt/jenkins-mcp --shell /usr/sbin/nologin jenkins-mcp
sudo chown -R jenkins-mcp:jenkins-mcp /opt/jenkins-mcp
sudo chown -R root:jenkins-mcp /etc/jenkins-mcp
sudo chmod 750 /etc/jenkins-mcp/instances
sudo chmod 640 /etc/jenkins-mcp/instances/*.json

前台启动:

/opt/jenkins-mcp/.venv/bin/jenkins-mcp \
  --config-dir /etc/jenkins-mcp/instances

Linux 服务器上使用 HTTP 传输时,可以通过配置文件的 server 节指定监听参数:

{
  "instances": [
    {
      "name": "jenkins-233",
      "base_url": "https://jenkins.example.com",
      "username": "mcp-user",
      "api_token": "replace-me",
      "read_only": true
    }
  ],
  "server": {
    "transport": "streamable-http",
    "host": "127.0.0.1",
    "port": 8000,
    "log_level": "INFO"
  }
}

然后执行:

/opt/jenkins-mcp/.venv/bin/jenkins-mcp \
  --config /etc/jenkins-mcp/jenkins-mcp.json

stdio 模式通常由 MCP 客户端自动拉起,不需要 systemd。HTTP 模式作为常驻服务时,可使用 systemd,例如 /etc/systemd/system/jenkins-mcp.service:

[Unit]
Description=Jenkins MCP Server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=jenkins-mcp
WorkingDirectory=/opt/jenkins-mcp
ExecStart=/opt/jenkins-mcp/.venv/bin/jenkins-mcp --config-dir /etc/jenkins-mcp/instances
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable --now jenkins-mcp
sudo systemctl status jenkins-mcp

Windows 上如果需要 HTTP 常驻服务,可以使用 Windows 服务包装器(例如 NSSM)托管 .venv\Scripts\jenkins-mcp.exe:

nssm install JenkinsMcp C:\Tools\jenkins-mcp\.venv\Scripts\jenkins-mcp.exe
nssm set JenkinsMcp AppDirectory C:\Tools\jenkins-mcp
nssm set JenkinsMcp AppParameters "--config-dir C:\ProgramData\jenkins-mcp\instances"
nssm start JenkinsMcp

stdio 模式仍建议由 MCP 客户端直接启动。

MCP 客户端连接

stdio 模式下,Windows 客户端配置示例:

{
  "mcpServers": {
    "jenkins": {
      "command": "C:\\Tools\\jenkins-mcp\\.venv\\Scripts\\python.exe",
      "args": [
        "-m",
        "jenkins_mcp",
        "--config-dir",
        "C:\\ProgramData\\jenkins-mcp\\instances"
      ]
    }
  }
}

Linux 客户端配置示例:

{
  "mcpServers": {
    "jenkins": {
      "command": "/opt/jenkins-mcp/.venv/bin/python",
      "args": [
        "-m",
        "jenkins_mcp",
        "--config-dir",
        "/etc/jenkins-mcp/instances"
      ]
    }
  }
}

启动后,先调用 list_jenkins_instances 确认实例名称,再在其他工具中使用对应的 jenkins_name。

例如:

list_jobs(jenkins_name="jenkins-233")
get_build_log(jenkins_name="jenkins-356", job_name="team/app", build_number=123)

打包与分发

这是纯 Python 项目,推荐打包成 wheel,再在目标操作系统创建各自的虚拟环境。不要直接 复制 Windows 的 .venv 到 Linux,或反向复制。

在仓库根目录执行:

python -m pip install --upgrade build
python -m build

Windows 使用 py -3 -m build,Linux 使用 python3 -m build。产物位于 dist/:

dist/
├── jenkins_mcp-0.1.0-py3-none-any.whl
└── jenkins_mcp-0.1.0.tar.gz

在 Windows 安装 wheel:

py -3 -m venv C:\Tools\jenkins-mcp\.venv
C:\Tools\jenkins-mcp\.venv\Scripts\python.exe -m pip install `
  .\dist\jenkins_mcp-0.1.0-py3-none-any.whl

在 Linux 安装 wheel:

python3 -m venv /opt/jenkins-mcp/.venv
/opt/jenkins-mcp/.venv/bin/python -m pip install \
  ./dist/jenkins_mcp-0.1.0-py3-none-any.whl

wheel 本身是跨平台的,但依赖需要在目标系统中安装。离线部署时,应分别在 Windows 和 Linux 目标环境准备对应的依赖包目录,然后执行:

python -m pip install --no-index --find-links wheelhouse \
  jenkins_mcp-0.1.0-py3-none-any.whl

动态配置生效规则

  • 使用 --config-dir 或 JENKINS_CONFIG_DIR 时,新增、修改、删除顶层 *.json 后,下一次 MCP 调用生效,不需要重启;

  • 使用 --config 或 JENKINS_CONFIG_FILE 时,修改总配置文件中的 instances 后,下一次 MCP 调用同样生效;

  • JENKINS_INSTANCES_JSON、JENKINS_URL 等纯环境变量模式只在进程启动时读取;

  • 配置文件格式错误、实例名称重复或目录没有有效 JSON 时,继续使用上一份有效配置;

  • 修改或删除实例时,正在执行的请求完成后才释放旧 HTTP 连接;

  • 配置目录与总配置文件不能同时指定。

HTTP 模式当前不提供独立的 MCP 用户认证。生产环境建议只监听 127.0.0.1,或在反向 代理层配置 TLS、访问控制和认证后再对外提供服务。

单 Jenkins 环境变量配置

也可以使用以下变量:

export JENKINS_URL='https://jenkins.example.com'
export JENKINS_USERNAME='mcp-user'
export JENKINS_API_TOKEN='replace-me'
export JENKINS_READ_ONLY='true'
jenkins-mcp

多实例也可以把 JSON 数组放入 JENKINS_INSTANCES_JSON。--config、--config-dir 分别覆盖对应的环境变量;单文件和目录模式不能同时配置。

版本兼容策略

服务通过 Jenkins 的 X-Jenkins 响应头检测版本。2.332.2 是当前最低兼容基线,2.356 使用相同的基础 REST API 能力。版本相关差异放在 versioning.py 的能力模型中,MCP 工具层不直接写版本判断。

基础 REST API 比 Jenkins 插件 API 更适合跨版本使用,但插件特有功能、Pipeline 高级信息和凭据管理不作为当前跨版本保证的一部分。

开发

pytest
ruff check .

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables managing Jenkins operations like listing jobs, triggering builds, and checking build statuses through a configurable MCP server.
    3
    10
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for interacting with a Jenkins CI/CD server. Allows you to trigger jobs, check build statuses, and manage your Jenkins instance through MCP.
    30 npm
    14
    Apache 2.0