Jenkins MCP服务器插件

Jenkins MCP服务器插件是一个允许通过HTTP/SSE协议与Jenkins交互的工具,支持从Claude Desktop等客户端触发作业、获取日志等功能。

  • by Shantanumtk
  • 本地部署
  • 更新于
在 GitHub 查看 Shantanumtk/MCP-Jenkins-Project

使用说明

Jenkins MCP 服务器设置

安装指南(分步说明) Jenkins MCP 服务器插件加强Jenkins以使MCP能够连接(同时不破坏CSRF保护),并将其连接到 Claude 桌面版并运行你的第一个命令。


目录

  1. 概述与要求
  2. 安装 Jenkins MCP 服务器插件
  3. 步骤1 — 创建并验证Jenkins API令牌
  4. 步骤2 — 允许MCP端点通过CSRF(跨站请求伪造)
  5. 步骤3 — 配置Claude桌面版
  6. 步骤4 — 在Claude中首先尝试的事情
  7. 如何构建基本身份验证(Basic Auth)头部
  8. 常见网址
  9. 故障排除
  10. 安全注意事项

概述与要求

  • Jenkins 2.426+(推荐使用LTS版本)。
  • 管理员访问Jenkins。
  • 能够重启Jenkins(通过Homebrew、systemd、Docker或运行WAR文件)。
  • Claude Desktop已安装。

术语MCP = (这个表达式在中文中通常直接保留原样,因为“MCP”是一个特定缩写或术语,没有直接的中文对应翻译,除非上下文提供了具体的含义。如果“MCP”在某个特定领域有固定翻译,那需要根据那个领域来翻译。)在一般情况下,可以翻译为:“MCP(某特定缩写或术语)=”,但具体含义需根据上下文确定 模型上下文协议. 该 Jenkins MCP 服务器 通过HTTP/SSE暴露工具于 /mcp-server/* 因此,客户端(如Claude Desktop等)可以列出/触发作业、获取日志等。


安装 Jenkins MCP 服务器插件

  1. 管理 Jenkins → 插件.

  2. 打开 可用 按Tab键并搜索 “MCP Server”翻译成中文是“MCP服务器”。

  3. 检查 MCP 服务器 并点击 安装无需重启 (或者 立即下载,重启后安装)。

  4. 安装后,请验证已添加的插件端点:

    • http://<jenkins>/mcp-server/mcp (HTTP传输)
    • http://<jenkins>/mcp-server/sse (服务器发送事件传输)

如果你的 Jenkins 在一个类似以下的上下文路径下运行: /jenkins,端点变为 /jenkins/mcp-server/mcp 并且 /jenkins/mcp-server/sse.


步骤1 — 创建并验证Jenkins API令牌

  1. 在Jenkins中,点击您的头像(右上角)→ 安全 → API令牌 → 生成新令牌。

    • 给它起个名字 claude-mcp。
    • 复制令牌一次 并将其安全地存储起来。
  2. 验证令牌是否有效(替换 <NEW_TOKEN>):

curl -s -u '<jenkins_id>:<NEW_TOKEN>' http://localhost:8080/whoAmI/api/json

预期的JSON包括:

{"name":"<jenkins_id>","authenticated":true}

如果你得到 401 Unauthorized,重新生成令牌或确认您正在使用正确的 Jenkins 用户ID 展示于 /user/<id>/。


步骤2 — 允许通过CSRF(跨站请求伪造)的MCP端点

MCP插件需要注册一个客户端;Jenkins的CSRF保护会阻止这一操作,除非我们 排除 MCP路径。

macOS(Homebrew 服务)

brew services stop jenkins-lts
JENKINS_JAVA_OPTIONS='-Dhudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_PATTERNS=/mcp-server/.*' \
  brew services start jenkins-lts

Linux(systemd 服务)

sudo systemctl edit jenkins

添加以下行:

[Service]
Environment="JAVA_OPTS=-Dhudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_PATTERNS=/mcp-server/.*"

然后应用并重启:

sudo systemctl daemon-reload
sudo systemctl restart jenkins

验证CSRF排除机制是否有效

构建一个基本标题(见下文部分),然后:

curl -I -H "Authorization: Basic <BASE64_USERNAME_COLON_TOKEN>" \
  http://localhost:8080/mcp-server/mcp

你应该 不是 查看HTML错误 403 No valid crumb was included in the request。

如果Jenkins位于代理/应用负载均衡器(ALB)之后,也请考虑启用 代理兼容性 下面 管理 Jenkins → 配置全局安全 → CSRF 保护。


步骤3 — 配置Claude桌面版

编辑 ~/Library/Application Support/Claude/claude_desktop_config.json 并添加Jenkins MCP服务器。优先使用SSE传输。

{
  "mcpServers": {
    "jenkins": {
      "command": "/Users/shantanu/.nvm/versions/node/v22.16.0/bin/npx",
      "args": [
        "-y","mcp-remote",
        "http://localhost:8080/mcp-server/sse",
        "--transport","sse-only",
        "--header","Authorization: Basic <BASE64_USERNAME_COLON_TOKEN>"
      ],
      "env": {},
      "autoApprove": []
    }
  }
}

替换 \<BASE64_USERNAME_COLON_TOKEN> 使用下一节中的值。保存后重启Claude Desktop。


步骤4 — 在Claude中首先尝试的操作

在Claude中使用自然语言:

  • “使用Jenkins MCP服务器来调用 我是谁。”
  • “列出根目录下的作业,并显示每个作业的 名字 和 全名。”
  • “列出内部职位 。”
  • “获取详细信息 查看它是否已参数化。”
  • “触发构建 带有参数 { ... }。”

如何构建基本身份验证头

标题是 Authorization: Basic <base64(username:token)>。

# 1) Create base64 of "username:token" (no newline)
printf %s 'shantanu:<NEW_TOKEN>' | base64
# 2) Use the one-line output in Claude config as:
#    --header "Authorization: Basic <that_output>"

你也可以使用 curl 进行干运行(即模拟执行):

curl -I -H "Authorization: Basic <BASE64_USERNAME_COLON_TOKEN>" \
  http://localhost:8080/mcp-server/mcp

屏幕截图

常见网址

  • Jenkins 根作业(JSON): http://localhost:8080/api/json?tree=jobs[name,fullName]

  • 在一个文件夹内: http://localhost:8080/job/<Folder>/api/json?tree=jobs[name,fullName]

  • 我是谁: http://localhost:8080/whoAmI/api/json

  • MCP端点:

    • HTTP:(超文本传输协议) http://localhost:8080/mcp-server/mcp
    • 上海证券交易所 http://localhost:8080/mcp-server/sse

如果 Jenkins 是在上下文路径下托管的(例如。, /jenkins),在每个路径前加上它。


故障排除

401 未授权 (在 /whoAmI 或 MCP(多路径控制协议):

  • 这个(或“该”) 用户ID 必须与所示的一致 /user/<id>/ (区分大小写)。
  • 令牌无效/已过期或输入错误。请生成新的API令牌并重试。

403 未包含有效的防跨站请求伪造令牌(crumb) (来自Jetty的HTML页面):

  • 未设置CSRF排除。请确保Jenkins启动时使用: -Dhudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_PATTERNS=/mcp-server/.*
  • 如果在代理/应用负载均衡器(ALB)后,请启用 代理兼容性。

ENOENT npx(文件或目录不存在,npx 命令) (Claude的日志显示 spawn .../npx ENOENT):

  • 更新 command 你实际的Node的路径 npx (例如,来自NVM): /Users/<you>/.nvm/versions/node/<version>/bin/npx。

上下文路径问题:

  • 如果Jenkins在 http://host:8080/jenkins,使用 http://host:8080/jenkins/mcp-server/sse 在克劳德的论点中。

还是不行?快速检查清单

  1. curl -s -u '<jenkins_id>:<TOKEN>' http://localhost:8080/whoAmI/api/json → 已认证,结果为真。
  2. curl -I -H 'Authorization: Basic <base64>' http://localhost:8080/mcp-server/mcp → 没有CSRF HTML。
  3. Claude的配置使用了相同的base64编码和正确的URL npx 路径。

安全注意事项

  • 对待/处理 API令牌 就像密码一样。将其存储在密码管理器中。
  • 更喜欢专用的 服务用户 (例如。, mcp-bot) 配备所需的最小权限(总体/读取,查看/读取,作业/发现,作业/构建;根据需要添加其他权限)。
  • 定期更换令牌,并在怀疑暴露时立即更换。
  • 保持CSRF保护 启用的;被允许的 全球范围内;依赖于 排除 for /mcp-server/* 仅此而已。

就是这个! 现在,您可以通过MCP服务器插件,直接在Claude中控制Jenkins——列出作业、检查参数、触发构建,并直接从聊天界面获取日志。