Skip to main content
Glama
README.md
# jenkins-mcp

MCP Server for multiple Jenkins instances

## Overview

This MCP (Model Context Protocol) server allows you to interact with multiple Jenkins instances from a single server. Unlike traditional setups, this server extracts the Jenkins URL and an API token from each request's headers, enabling true multi-tenancy.

- **Multi-tenancy**: Serve multiple Jenkins instances from a single MCP server.
- **Header-based authentication**: Jenkins URL and token are provided per request via headers.
- **Parity with official Jenkins MCP plugin**: Implements the same core tools as the [official Jenkins MCP Server Plugin](https://plugins.jenkins.io/mcp-server/).

### .env File Support
The server can load configuration from a `.env` file in the project root. This is useful for development or when running the server outside of a container. A `.env.sample` file is provided as a template.

Environment variables set in your shell will take precedence over values in the `.env` file.

## Running the Jenkins MCP Server

You can run the server with either `stdio` (for local/CLI use) or a network transport (e.g., SSE for remote clients).

### Environment Variables (stdio mode)
- `JENKINS_URL`: The Jenkins instance URL (used only in stdio mode)
- `JENKINS_TOKEN`: The Jenkins API token (used only in stdio mode)
- `MCP_TRANSPORT`: Set to `stdio` (default) or another transport (e.g., `sse`)

#### Example MCP Client Configuration

```json
{
  "mcpServers": {
    "jenkins-mcp": {
      "command": "podman",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e", "JENKINS_URL",
        "-e", "JENKINS_TOKEN",
        "-e", "MCP_TRANSPORT",
        "quay.io/redhat-ai-tools/jenkins-mcp:latest"
      ],
      "env": {
        "JENKINS_URL": "https://jenkins.example.com/",
        "JENKINS_TOKEN": "REDACTED",
        "MCP_TRANSPORT": "stdio"
      }
    }
  }
}
```

Replace `REDACTED` with your Jenkins API token, which you can generate from your Jenkins user account settings.

### Header-based Authentication (non-stdio mode)
For non-stdio transports, the Jenkins URL and token must be provided in each request's headers:
- `Jenkins-Url`: The Jenkins instance URL
- `Jenkins-Token`: The Jenkins API token

This allows the server to route requests to different Jenkins instances per client/request.

#### Example MCP Client Configuration

```json
{
  "mcpServers": {
    "jenkins": {
      "url": "https://jenkins-mcp.example.com/sse",
      "headers": {
        "Jenkins-Url": "https://jenkins.example.com/",
        "Jenkins-Token": "REDACTED"
      }
    }
  }
}
```

## Available Tools

The following tools are implemented, matching the official Jenkins MCP plugin:

- `getAllJobs`: Get a list of all Jenkins jobs.
- `getJob(full_path)`: Get a Jenkins job by its full path.
- `getBuild(full_path, build_number=None)`: Retrieve a specific build or the last build of a Jenkins job.
- `triggerBuild(full_path)`: Trigger a build of a job.
- `getBuildLog(full_path, build_number=None, start=0)`: Retrieve log lines for a specific build or the last build of a Jenkins job (supports pagination).

## Usage

- For each request, provide the Jenkins URL and token in the headers (unless using stdio mode, where they are read from environment variables).
- The server will use these credentials to interact with the specified Jenkins instance.

## References
- [Official Jenkins MCP Server Plugin](https://plugins.jenkins.io/mcp-server/)
- [Jenkins API Token Documentation](https://www.jenkins.io/blog/2018/07/02/new-api-token-system/)

---

*This project is not affiliated with the official Jenkins MCP plugin, but aims for feature parity and interoperability.*