Skip to main content
Glama
LokiMCPUniverse

jenkins-mcp-server

README.md
# Jenkins MCP Server

A Model Context Protocol (MCP) server that exposes a Jenkins controller's REST
API to MCP-compatible clients such as Claude Desktop. Built on the
[MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk) (1.27+,
protocol 2025-11-25) using `FastMCP` with `httpx` for async HTTP and
`pydantic-settings` for configuration.

## Features

- HTTP basic authentication using a Jenkins username + API token
- Automatic CSRF crumb fetch and cache for POST requests
- Works with nested folder job paths (`team/app/main`)
- Tools for jobs, builds, console logs, queue, nodes and plugins

## Installation

```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```

## Configuration

All configuration is read from environment variables prefixed with `JENKINS_`.

| Variable              | Default                  | Description                              |
|-----------------------|--------------------------|------------------------------------------|
| `JENKINS_BASE_URL`    | `http://localhost:8080`  | Base URL of the Jenkins controller       |
| `JENKINS_USERNAME`    | *(empty)*                | Jenkins user for HTTP basic auth         |
| `JENKINS_API_TOKEN`   | *(empty)*                | Jenkins API token (create in user settings) |
| `JENKINS_VERIFY_SSL`  | `true`                   | Verify TLS certificates                  |
| `JENKINS_TIMEOUT`     | `30`                     | HTTP timeout in seconds                  |

A `.env` file in the working directory is also picked up automatically.

## Running

```bash
jenkins-mcp
```

## Claude Desktop configuration

Add an entry to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "jenkins": {
      "command": "jenkins-mcp",
      "env": {
        "JENKINS_BASE_URL": "https://jenkins.example.com",
        "JENKINS_USERNAME": "your-username",
        "JENKINS_API_TOKEN": "your-api-token"
      }
    }
  }
}
```

## Tools

| Tool                 | Description                                                |
|----------------------|------------------------------------------------------------|
| `list_jobs`          | List jobs (optionally scoped to a folder)                  |
| `get_job`            | Return full job metadata                                   |
| `trigger_build`      | Trigger a build, optionally with parameters                |
| `get_build`          | Return metadata for a specific build                       |
| `get_build_log`      | Fetch the console text for a build                         |
| `stop_build`         | Stop a running build                                       |
| `list_builds`        | List recent builds (`limit` defaults to 20)                |
| `list_queue`         | List queued build items                                    |
| `cancel_queue_item`  | Cancel a queue item by id                                  |
| `list_nodes`         | List Jenkins nodes / agents                                |
| `get_plugin_list`    | List installed Jenkins plugins                             |

## Development

Run tests with:

```bash
pytest -x --tb=short
```

Lint with:

```bash
ruff check src tests
```

TDQS

A3.7/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct resource and action: jobs, builds, queue, nodes, plugins. Even the build-related tools (get_build, list_builds, get_build_log) are clearly separated by their specific purpose.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (list_, get_, trigger_, stop_, cancel_), with clear and predictable naming throughout.

Tool Count5/5

With 11 tools, the set is well-scoped for a Jenkins MCP server, covering job management, build inspection, queue control, nodes, and plugins without unnecessary bloat.

Completeness4/5

The core lifecycle of inspecting and triggering builds is well covered. The main gap is lack of job creation/configuration tools, but those are often outside the typical read/trigger scope of such a server.

Maintenance

ActivityInactive
ResponsivenessNo issues