npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

jenkins-mcp

v0.2.1

Published

A MCP server for Jenkins

Readme

jenkins-mcp

Node CI npm license

A Model Context Protocol (MCP) server that provides AI assistants with full access to Jenkins CI/CD systems. Built with TypeScript and Node.js, it enables Claude, Cursor, and other MCP-compatible clients to query, manage, and control Jenkins jobs, builds, nodes, and queues through natural language.

Table of Contents

Features

  • 23 MCP Tools — Full Jenkins automation: jobs, builds, nodes, and queues
  • 3 Transport Modesstdio, sse, and streamable-http for different deployment scenarios
  • Read-Only Mode — Restrict to safe, read-only operations for controlled environments
  • Per-Request Auth — HTTP header-based Jenkins auth for multi-user/multi-tenant setups
  • SSL Configuration — Toggle SSL certificate verification for self-signed certs
  • Session Singleton — Reuse Jenkins client connections within a session for efficiency
  • CSRF Protection — Automatic crumb/token handling for Jenkins security
  • Folder Support — Full support for nested Jenkins folders and multi-branch pipelines
  • TypeScript Strict Mode — Fully typed codebase with strict compiler checks

Usage

MCP Client

Add the following to your MCP client configuration file:

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

Claude Code

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

Cursor

Add to your Cursor MCP settings (.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 Mode

For safety in production environments, use --read-only to disable all write operations:

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

Configuration

Jenkins-MCP can be configured through CLI arguments, environment variables, or HTTP headers (for HTTP transports).

CLI Options

jenkins-mcp [options]

| Option | Description | Default | | ---------------------------------------------------------------- | ----------------------------------------------------- | --------- | | --jenkins-url | Jenkins server URL | — | | --jenkins-username | Jenkins username | — | | --jenkins-password | Jenkins password or API token | — | | --jenkins-timeout | API request timeout in seconds | 5 | | --jenkins-verify-ssl / --no-jenkins-verify-ssl | Verify SSL certificates | true | | --jenkins-session-singleton / --no-jenkins-session-singleton | Reuse Jenkins client within session | true | | --read-only | Only register read-only tools | false | | --allow-full-console-output | Register the unsafe raw full-console-output tool | false | | --transport | Transport mode: stdio | sse | streamable-http | stdio | | --host | Host for HTTP transports | 0.0.0.0 | | --port | Port for HTTP transports | 9887 |

Environment Variables

Jenkins-MCP reads configuration from process environment variables. It does not auto-load .env files by itself.

If you use a local .env file, load it before starting the server (for example: set -a; source .env; set +a), then run jenkins-mcp.

Example .env values:

# 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 Headers (HTTP Transports Only)

When using sse or streamable-http transport, Jenkins credentials can be provided per-request via HTTP headers. This enables multi-user scenarios where different requests authenticate against different Jenkins instances.

| Header | Description | | -------------------- | ----------------------------- | | x-jenkins-url | Jenkins server URL | | x-jenkins-username | Jenkins username | | x-jenkins-password | Jenkins password or API token |

Each provided header overrides the corresponding environment variable for that request. Missing header values fall back to environment configuration.

Available Tools

Job / Item Tools

| Tool | Description | Parameters | Read-Only | | ----------------- | ----------------------------------------- | ------------------------------------------------------- | --------- | | get_all_items | Get all jobs and folders from Jenkins | — | Yes | | get_item | Get a specific job or folder by full name | fullname | Yes | | get_item_config | Get job configuration XML | fullname | Yes | | set_item_config | Update job configuration XML | fullname, config_xml | No | | query_items | Search items with regex filters | class_pattern?, fullname_pattern?, color_pattern? | Yes | | build_item | Trigger a job build | fullname, build_type, params? | No |

Build Tools

| Tool | Description | Parameters | Read-Only | | --------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------- | --------- | | get_build | Get build details | fullname, number? | Yes | | get_build_console_tail | Get the recent tail of build console output | fullname, number?, max_bytes? | Yes | | get_build_console_chunk | Read incremental console output by offset | fullname, start, number?, max_bytes? | Yes | | search_build_console | Search console output incrementally with excerpts | fullname, query, number?, max_bytes?, ... | Yes | | get_build_failure_excerpt | Get focused failure excerpts and test hints via incremental scan | fullname, number?, max_bytes?, max_excerpts? | Yes | | get_build_console_output | Get raw full console log output | fullname, number? | Yes | | get_build_test_report | Get test results report | fullname, number? | Yes | | get_build_scripts | Extract build scripts (for replay) | fullname, number? | Yes | | get_running_builds | Get all currently running builds | — | Yes | | stop_build | Stop a running build | fullname, number | No |

For large logs, prefer get_build_console_tail -> search_build_console -> get_build_console_chunk. get_build_console_output is disabled by default and only registered when --allow-full-console-output is set. Large-log helper tools enforce server-side byte ceilings even if the caller asks for more, and search-style tools scan logs incrementally instead of fetching consoleText.

Recommended Troubleshooting Flow

For a failed build, prefer this sequence:

  1. get_build to confirm result, building, and the target build number.
  2. get_build_failure_excerpt to get focused failure snippets plus failing test hints.
  3. search_build_console with anchors such as Caused by:, ERROR, FAILED, or a failing test name.
  4. get_build_console_chunk to continue reading from a returned nextStart offset when the first excerpt is not enough.
  5. get_build_console_output only when raw full log export is explicitly needed.

For a running build, prefer this sequence:

  1. get_build to confirm the build is still running.
  2. get_build_console_tail to inspect the latest output window.
  3. search_build_console for known error anchors in the recent window.
  4. get_build_console_chunk with the last nextStart value to keep polling without rereading old output.

Node Tools

| Tool | Description | Parameters | Read-Only | | ----------------- | -------------------------------------- | -------------------- | --------- | | get_all_nodes | Get all compute nodes | — | Yes | | get_node | Get a specific node with executor info | name | Yes | | get_node_config | Get node configuration XML | name | Yes | | set_node_config | Update node configuration XML | name, config_xml | No |

Queue Tools

| Tool | Description | Parameters | Read-Only | | --------------------- | ---------------------------------- | ---------- | --------- | | get_all_queue_items | Get all items waiting in the queue | — | Yes | | get_queue_item | Get a specific queue item by ID | id | Yes | | cancel_queue_item | Cancel a queued item | id | No |

Tools marked Read-Only: No are only available when --read-only is not set.

Transport Modes

stdio (Default)

Standard input/output transport for direct MCP client integration. This is the recommended mode for Claude Desktop, Cursor, and other desktop MCP clients.

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

SSE (Server-Sent Events)

HTTP-based transport using Server-Sent Events. Suitable for web-based clients or remote access scenarios.

jenkins-mcp --transport sse \
  --host 127.0.0.1 --port 9887 \
  --jenkins-url https://jenkins.example.com \
  --jenkins-username user --jenkins-password token
  • SSE endpoint: GET /sse — establishes an SSE connection and returns a session
  • Message endpoint: POST /message?sessionId=<id> — sends messages to the session

Streamable HTTP

Session-based HTTP MCP transport over /mcp. Sessions are initialized via MCP initialize, then correlated with mcp-session-id in follow-up requests.

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 endpoint: POST /mcp — handles all MCP protocol messages

Architecture

┌─────────────────────────────────────────────────┐
│                  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)                     │
└─────────────────────────────────────────────────┘

Key design patterns:

  • Dependency InjectionToolRuntime interface enables testable tool handlers
  • Session Management — HTTP transports map sessions to isolated runtime contexts
  • Per-Request Auth — HTTP headers override environment config for multi-tenant use
  • Automatic CSRF — Crumb tokens are fetched and cached transparently

Development

Scripts

| Command | Description | | -------------------- | ---------------------------------------------------- | | pnpm dev | Start in watch mode (auto-reload on changes) | | pnpm build | Build production bundle with tsup | | pnpm test | Run tests with Vitest | | pnpm test:watch | Run tests in watch mode | | pnpm test:coverage | Run tests with coverage report | | pnpm check | Run all checks: format, lint, typecheck, test, build | | pnpm lint | Run ESLint | | pnpm format | Format code with Prettier | | pnpm commit | Interactive conventional commit with Commitizen | | pnpm changeset | Create a changeset for release |

License

MIT