Jenkins自动化服务

一个基于模型上下文协议(MCP)的服务,为AI助手提供对Jenkins CI/CD系统的完全访问权限,支持通过自然语言查询、管理和控制Jenkins作业、构建、节点和队列。

  • by mcpland
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 mcpland/jenkins-mcp

使用说明

詹金斯·麦克普

A. 模型上下文协议(MCP) 该服务器为AI助手提供对Jenkins CI/CD系统的完全访问权限。它使用TypeScript和Node.js构建,使Claude、Cursor和其他MCP兼容客户端能够通过自然语言查询、管理和控制Jenkins作业、构建、节点和队列。

目录

特性

  • 23个MCP工具 --完全的Jenkins自动化:作业、构建、节点和队列
  • 3种运输方式 — stdio, sse,以及 streamable-http 针对不同的部署场景
  • 只读模式 --仅限于受控环境的安全只读操作
  • 按请求授权 --用于多用户/多租户设置的基于HTTP标头的Jenkins身份验证
  • SSL配置 --切换自签名证书的SSL证书验证
  • 会话单打 --在会话中重用Jenkins客户端连接以提高效率
  • CSRF保护 --Jenkins安全的自动碎屑/令牌处理
  • 文件夹支持 --完全支持嵌套的Jenkins文件夹和多分支管道
  • TypeScript严格模式 --具有严格编译器检查的全类型代码库

用法

MCP客户端

将以下内容添加到MCP客户端配置文件中:

{
  "mcpServers": {
    "jenkins": {
      "command": "npx",
      "args": [
        "jenkins-mcp",
        "--jenkins-url",
        "https://jenkins.example.com",
        "--jenkins-username",
        "your-username",
        "--jenkins-password",
        "your-api-token"
      ]
    }
  }
}

克劳德代码

claude mcp add jenkins -- npx jenkins-mcp \
  --jenkins-url https://jenkins.example.com \
  --jenkins-username your-username \
  --jenkins-password your-api-token

光标

添加到光标MCP设置(.cursor/mcp.json):

{
  "mcpServers": {
    "jenkins": {
      "command": "npx",
      "args": [
        "jenkins-mcp",
        "--jenkins-url",
        "https://jenkins.example.com",
        "--jenkins-username",
        "your-username",
        "--jenkins-password",
        "your-api-token"
      ]
    }
  }
}

只读模式

为了确保生产环境的安全,请使用 --read-only 要禁用所有写入操作,请执行以下操作:

{
  "mcpServers": {
    "jenkins": {
      "command": "npx",
      "args": [
        "jenkins-mcp",
        "--read-only",
        "--jenkins-url",
        "https://jenkins.example.com",
        "--jenkins-username",
        "your-username",
        "--jenkins-password",
        "your-api-token"
      ]
    }
  }
}

配置

Jenkins MCP可以通过CLI参数、环境变量或HTTP标头(用于HTTP传输)进行配置。

CLI选项

jenkins-mcp [options]
选项 描述 默认值
--jenkins-url Jenkins服务器URL --
--jenkins-username Jenkins用户名 --
--jenkins-password Jenkins密码或API令牌 -
--jenkins-timeout API请求超时(秒) 5
--jenkins-verify-ssl / --no-jenkins-verify-ssl 验证SSL证书 true
--jenkins-session-singleton / --no-jenkins-session-singleton 在会话中重用Jenkins客户端 true
--read-only 仅注册只读工具 false
--allow-full-console-output 注册不安全的原始完整控制台输出工具 false
--transport 运输方式: stdio sse
--host HTTP传输主机 0.0.0.0
--port HTTP传输端口 9887

环境变量

Jenkins MCP从流程环境变量中读取配置。它不会自动加载 .env 文件本身。

如果你使用本地 .env 文件,在启动服务器之前加载它(例如: set -a; source .env; set +a),然后运行 jenkins-mcp.

示例 .env 值:

# Jenkins server URL
jenkins_url=https://jenkins.example.com/

# Jenkins basic auth
jenkins_username=your-username
jenkins_password=your-api-token

# Optional runtime settings
jenkins_timeout=5
jenkins_verify_ssl=true
jenkins_session_singleton=true

HTTP标头(仅限HTTP传输)

使用时 sse 或 streamable-http 传输,Jenkins凭据可以通过HTTP标头为每个请求提供。这支持多用户场景,其中不同的请求针对不同的Jenkins实例进行身份验证。

标题 描述
x-jenkins-url Jenkins服务器URL
x-jenkins-username Jenkins用户名
x-jenkins-password Jenkins密码或API令牌

每个提供的标头都会覆盖该请求的相应环境变量。缺少的标头值会退回到环境配置。

可用工具

作业/项目工具

工具 描述 参数 只读
get_all_items 从Jenkins获取所有作业和文件夹 -- 是
get_item 按全名获取特定作业或文件夹 fullname 是的
get_item_config 获取作业配置XML fullname 是的
set_item_config 更新作业配置XML fullname, config_xml 没有
query_items 使用正则表达式过滤器搜索项目 class_pattern?, fullname_pattern?, color_pattern? 是的
build_item 触发作业构建 fullname, build_type, params? 没有

构建工具

工具 描述 参数 只读
get_build 获取构建详细信息 fullname, number? 是的
get_build_console_tail 获取构建控制台输出的最新尾部 fullname, number?, max_bytes? 是的
get_build_console_chunk 按偏移量读取增量控制台输出 fullname, start, number?, max_bytes? 是的
search_build_console 使用摘录增量搜索控制台输出 fullname, query, number?, max_bytes?, ... 是的
get_build_failure_excerpt 通过增量扫描获取重点故障摘录和测试提示 fullname, number?, max_bytes?, max_excerpts? 是的
get_build_console_output 获取原始完整控制台日志输出 fullname, number? 是的
get_build_test_report 获取测试结果报告 fullname, number? 是的
get_build_scripts 提取构建脚本(用于回放) fullname, number? 是的
get_running_builds 获取当前正在运行的所有版本 -- 是
stop_build 停止正在运行的构建 fullname, number 没有

对于大型原木,首选 get_build_console_tail -> search_build_console -> get_build_console_chunk. get_build_console_output 默认情况下禁用,仅在以下情况下注册 --allow-full-console-output 已设置。 大型日志助手工具强制执行服务器端字节上限,即使调用者要求更多,搜索风格工具也会增量扫描日志,而不是获取 consoleText.

推荐故障排除流程

对于失败的构建,首选以下顺序:

  1. get_build 确认 result, building,以及目标构建号。
  2. get_build_failure_excerpt 获取集中的失败片段和失败的测试提示。
  3. search_build_console 使用锚,例如 Caused by:, ERROR, FAILED,或失败的测试名称。
  4. get_build_console_chunk 继续阅读返回的 nextStart 当第一段摘录不够时进行偏移。
  5. get_build_console_output 仅当明确需要原始完整日志导出时。

对于正在运行的构建,首选以下顺序:

  1. get_build 确认构建仍在运行。
  2. get_build_console_tail 检查最新的输出窗口。
  3. search_build_console 查看最近窗口中的已知错误锚点。
  4. get_build_console_chunk 与最后 nextStart 值以保持轮询而不重新读取旧输出。

节点工具

工具 描述 参数 只读
get_all_nodes 获取所有计算节点 -- 是
get_node 获取具有执行者信息的特定节点 name 是的
get_node_config 获取节点配置XML name 是的
set_node_config 更新节点配置XML name, config_xml 没有

队列工具

工具 描述 参数 只读
get_all_queue_items 获取队列中等待的所有项目 -- 是
get_queue_item 按ID获取特定队列项 id 是的
cancel_queue_item 取消排队的项目 id 没有

标记的工具 只读:否 仅在以下情况下可用 --read-only 未设置。

运输方式

stdio(默认)

用于直接MCP客户端集成的标准输入/输出传输。这是Claude Desktop、Cursor和其他桌面MCP客户端的推荐模式。

jenkins-mcp --transport stdio \
  --jenkins-url https://jenkins.example.com \
  --jenkins-username user --jenkins-password token

SSE(服务器发送事件)

使用服务器发送事件的基于HTTP的传输。适用于基于web的客户端或远程访问场景。

jenkins-mcp --transport sse \
  --host 127.0.0.1 --port 9887 \
  --jenkins-url https://jenkins.example.com \
  --jenkins-username user --jenkins-password token
  • SSE端点: GET /sse --建立SSE连接并返回会话
  • 消息端点: POST /message?sessionId=<id> --向会话发送消息

流式HTTP

基于会话的HTTP MCP传输 /mcp会话通过MCP初始化 initialize,然后与 mcp-session-id 在后续请求中。

jenkins-mcp --transport streamable-http \
  --host 127.0.0.1 --port 9887 \
  --jenkins-url https://jenkins.example.com \
  --jenkins-username user --jenkins-password token
  • MCP端点: POST /mcp --处理所有MCP协议消息

建筑

┌─────────────────────────────────────────────────┐
│                  MCP Client                     │
│          (Claude, Cursor, etc.)                 │
└──────────────────┬──────────────────────────────┘
                   │  MCP Protocol
┌──────────────────▼──────────────────────────────┐
│              Transport Layer                    │
│      stdio │ SSE │ Streamable HTTP              │
├──────────────────┬──────────────────────────────┤
│           MCP Server (mcp.ts)                   │
│     Tool registration & error handling          │
├──────────────────┬──────────────────────────────┤
│          Tool Handlers                          │
│   item.ts │ build.ts │ node.ts │ queue.ts       │
├──────────────────┬──────────────────────────────┤
│         Jenkins REST Client                     │
│    HTTP requests, auth, CSRF, timeout           │
├──────────────────┬──────────────────────────────┤
│           Jenkins Server                        │
│         (REST API endpoint)                     │
└─────────────────────────────────────────────────┘

关键设计模式:

  • 依赖注入 — ToolRuntime 接口支持可测试的工具处理程序
  • 会话管理 --HTTP传输将会话映射到隔离的运行时上下文
  • 按请求授权 --HTTP标头覆盖多租户使用的环境配置
  • 自动CSRF --碎屑令牌被透明地获取和缓存

发展

脚本

命令 描述
pnpm dev 以监视模式启动(更改时自动重新加载)
pnpm build 使用tsup构建生产包
pnpm test 使用Vitest运行测试
pnpm test:watch 在监视模式下运行测试
pnpm test:coverage 使用覆盖率报告运行测试
pnpm check 运行所有检查:格式、lint、类型检查、测试、构建
pnpm lint 运行ESLint
pnpm format 使用Prettier格式化代码
pnpm commit 与Commitizen进行交互式常规承诺
pnpm changeset 创建发布变更集

许可证

麻省理工学院