Jenkins MCP
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.jsonLinux:
/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/instancesLinux 服务器上使用 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.jsonstdio 模式通常由 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-mcpWindows 上如果需要 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 JenkinsMcpstdio 模式仍建议由 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 buildWindows 使用 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.whlwheel 本身是跨平台的,但依赖需要在目标系统中安装。离线部署时,应分别在 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 .This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for Appcircle mobile CI/CD platform.
MCP Server for JFrog, providing tools for development and artifact management.
Public MCP server for discovering open jobs. Search, filter, and get application links.
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables managing Jenkins operations like listing jobs, triggering builds, and checking build statuses through a configurable MCP server.310Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn 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 npm14Apache 2.0
- AlicenseAqualityCmaintenanceA local MCP server for Jenkins that provides 17 tools to interact with Jenkins jobs, builds, logs, SCM, and test results via REST API, no plugin required.17128 npm1MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for Jenkins to inspect builds, control jobs, and manage pipeline configuration.935 npmMIT