Skip to main content
Glama

Jenkins MCP

A single-file MCP server that exposes a Jenkins instance (plus a thin GitLab layer) as tools an LLM can call. It lets Claude Code — or any MCP client — list jobs, trigger and watch deployments, read build logs, and answer "is this ticket deployed yet?" without anyone touching the Jenkins UI.

Built on FastMCP from the mcp SDK. Python ≥ 3.10. One module: server.py.


What it can do

The tools are layered — higher tiers compose the lower ones.

Low-level Jenkins

Tool

Purpose

list_jobs

List jobs (with status) at the root or in a folder

get_job_info

Job details: parameters (with defaults/types), last build numbers, health

trigger_build

Start a build with raw Jenkins parameter names

get_queue / get_queue_item

Inspect the build queue

wait_for_build

Block until a queued item gets a build number

get_build_info

Result, timestamp, duration, parameters, git revision of a build

get_build_log

Console output (tail) for a build

list_recent_builds

Recent builds for a job

get_last_successful_build

Last green build of a job

is_deployed_since

Did a build run after a given timestamp?

High-level deploy (friendly args → whatever raw params the job actually defines)

Tool

Purpose

deploy

Deploy a job by branch / tickets, etc. Maps friendly names to real Jenkins params. A bare environment defaults to the configured app job (devdev_app_deployment; say dev backend for the backend job). Accepts multiple comma-separated ticket URLs. Refuses to deploy a job that mandates a deployment purpose until one is supplied (or use_dummy_purpose=True), and warns if a supplied URL is a merge request rather than a ticket (override with allow_mr_purpose=True).

deploy_tickets

Deploy by environment + scope from a set of ticket URLs

list_deployments

The configured (env, scope) → job table

resolve_job_name

Fuzzy-resolve a rough name ("dev backend") to the real job

GitLab ticket verification

Tool

Purpose

get_ticket_mrs

Find MRs linked to a ticket

is_ticket_deployed

Check whether a ticket's merge commits are in the deployed branch tip


Related MCP server: MCP-Jenkins

Prerequisites

  • Python ≥ 3.10

  • Network access to your Jenkins controller (and to your GitLab instance for the ticket tools)

  • A Jenkins API token (Jenkins → user → Configure → API Token)

  • A GitLab access token with read_api on the relevant project (only needed for the ticket-deployment tools)


Configuration

Two pieces: credentials in .env, and your site's job mapping in config.json.

Credentials

Copy the template and fill it in. .env is git-ignored — never commit it.

cp .env.example .env

Variable

Required

Notes

JENKINS_URL

yes

e.g. https://jenkins.example.com

JENKINS_USER

yes

Your Jenkins username

JENKINS_TOKEN

yes

Jenkins API token (not your password)

GITLAB_URL

for GitLab tools

e.g. https://gitlab.example.com

GITLAB_PROJECT

for GitLab tools

e.g. your-group/your-project

GITLAB_TOKEN

for GitLab tools

Falls back to a token found in ~/.claude.json if unset

JENKINS_MCP_CONFIG

no

Path to the job mapping. Defaults to ./config.json

MCP_TRANSPORT

hosted mode

stdio (default) or streamable-http

MCP_HOST / MCP_PORT

hosted mode

Defaults 0.0.0.0 / 8765

MCP_AUTH_TOKEN

hosted mode

Shared bearer token for the HTTP endpoint. Set this when running HTTP — without it the endpoint is unauthenticated and the server logs a warning

Generate a bearer token with:

python -c "import secrets; print(secrets.token_urlsafe(32))"

Job mapping

The Jenkins tools are generic. The deploy tools need to know your job names and the parameter names those jobs define:

cp config.example.json config.json    # then edit; config.json is git-ignored

env_jobs maps "<environment>/<scope>" to a Jenkins job name; param_map maps friendly argument names to the raw Jenkins parameters to set. Without a config file the low-level Jenkins tools still work and deploy reports that no mapping is configured.


Setup A — local (stdio)

Run the server as a subprocess your MCP client spawns over stdio. Simplest for single-user use.

python3 -m venv .venv
./.venv/bin/pip install -e .
cp .env.example .env             # then edit
cp config.example.json config.json   # then edit
./.venv/bin/python server.py     # smoke test — Ctrl-C to stop

Register it with your MCP client. For Claude Code, add to .mcp.json or ~/.claude.json:

{
  "mcpServers": {
    "jenkins-mcp": {
      "command": "/absolute/path/to/jenkins-mcp/.venv/bin/python",
      "args": ["/absolute/path/to/jenkins-mcp/server.py"]
    }
  }
}

Leave MCP_TRANSPORT unset (defaults to stdio). The .env beside server.py supplies the credentials.


Setup B — hosted (HTTP), shared by a team

Run it as a systemd service so everyone's client talks to one shared instance instead of each person running their own.

git clone <your-fork-url> jenkins-mcp
cd jenkins-mcp
cp .env.example .env                 # set JENKINS_*, GITLAB_*, MCP_TRANSPORT, MCP_AUTH_TOKEN
cp config.example.json config.json   # set your job mapping
bash deploy/install.sh               # venv, systemd unit, start

deploy/install.sh is idempotent: it builds .venv, installs the package, copies deploy/jenkins-mcp.service to /etc/systemd/system/, enables it and starts it. Edit the unit's User and paths to suit your host — it ships pointing at /opt/jenkins-mcp.

For HTTP mode your .env needs:

MCP_TRANSPORT=streamable-http
MCP_HOST=0.0.0.0
MCP_PORT=8765
MCP_AUTH_TOKEN=<token from secrets.token_urlsafe(32)>

Bind to 127.0.0.1 and front it with a reverse proxy if the host is reachable beyond your trusted network.

Client config for the hosted server

{
  "mcpServers": {
    "jenkins-mcp": {
      "type": "http",
      "url": "http://your-server:8765/mcp",
      "headers": { "Authorization": "Bearer <MCP_AUTH_TOKEN>" }
    }
  }
}

Updating a hosted instance

The host runs from a git clone, so updates are pull-and-restart:

cd ~/jenkins-mcp
git pull
./.venv/bin/pip install -e .      # only if dependencies changed
sudo systemctl restart jenkins-mcp.service
journalctl -u jenkins-mcp -f      # watch it come back up

Tests

./.venv/bin/pip install -e ".[dev]"
./.venv/bin/python -m pytest -q

The suite covers CSRF crumb caching and 403 retry, deploy-target resolution, the deployment-purpose gate, and the pure helpers. It runs without a live Jenkins.


Notes

  • Jenkins ties each CSRF crumb to a session, so all traffic goes through one requests.Session. A 403 on POST is retried exactly once with a fresh crumb.

  • Job names are resolved with an exact → normalized → substring → close-match cascade against a 60-second-cached job list.

  • deploy refuses to run a job whose DEPLOYMENT_PURPOSE parameter is a validating string until a purpose is supplied, and warns when the supplied URL looks like a merge request rather than a ticket.

License

MIT — see LICENSE.

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A server that enables interaction with Jenkins CI/CD pipelines from any compatible MCP client (like Claude Desktop), allowing users to manage jobs, builds, coverage reports, and other Jenkins functionality through natural language.
    11
    27
    MIT
  • A
    license
    -
    quality
    D
    maintenance
    Enterprise-grade MCP server for Jenkins CI/CD integration that enables AI assistants to diagnose build failures, analyze pipelines, and search logs through natural conversation.
    6
    GPL 3.0

View all related MCP servers

Related MCP Connectors

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.

  • MCP server for Gainium — manage trading bots, deals, and balances via AI assistants

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Ibrahim-Noor/jenkins-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server