Skip to main content
Glama

jankins

Token-optimized Jenkins MCP server with smart log handling and failure triage

PyPI version Python versions License CI codecov Security: bandit Code style: ruff SLSA 3 OpenSSF Best Practices

jankins provides MCP-compliant access to Jenkins with features designed for AI coding assistants:

  • 🎯 Token-aware formatting: Summary/full/diff output modes minimize context usage

  • 📊 Smart log truncation: Progressive retrieval with byte offsets, regex filtering, and ANSI cleanup

  • 🔍 Failure triage: Automated root cause analysis with hypotheses and next steps

  • ⚡ Efficient by default: Returns compact summaries unless full detail is requested

  • 🛡️ Better error handling: Structured errors with remediation hints and correlation IDs

  • 📝 Built-in prompts: Pre-built workflows for common CI/CD tasks

Quick Start

Installation

pip install -e .

Basic Usage

# Set environment variables
export JENKINS_URL=https://jenkins.example.com
export JENKINS_USER=myuser
export JENKINS_API_TOKEN=11234567890abcdef1234567890abcdef

# Start the server
jankins

# Or use CLI flags
jankins --jenkins-url https://jenkins.example.com \
        --jenkins-user myuser \
        --jenkins-token $TOKEN \
        --bind 0.0.0.0:8080

Generate Jenkins API Token

  1. Log in to Jenkins

  2. Click your username (top right) → Configure

  3. Scroll to "API Token" section

  4. Click "Add new Token"

  5. Give it a name and click "Generate"

  6. Copy the token (you won't see it again!)

Related MCP server: Jenkins AI Optimizer

Configuration

Configuration via environment variables or CLI flags. CLI flags take precedence.

CLI Flag

Env Variable

Default

Description

--jenkins-url

JENKINS_URL

required

Jenkins server URL

--jenkins-user

JENKINS_USER

required

Jenkins username

--jenkins-token

JENKINS_API_TOKEN

required

Jenkins API token

--transport

MCP_TRANSPORT

stdio

MCP transport (stdio, http, or sse)

--bind

MCP_BIND

127.0.0.1:8080

Server bind address (http/sse only)

--origin-enforce

ORIGIN_ENFORCE

false

Enforce Origin header validation

--origin-expected

ORIGIN_EXPECTED

null

Expected Origin value

--log-level

LOG_LEVEL

INFO

Log level (DEBUG/INFO/WARNING/ERROR)

--log-json

LOG_JSON

false

Use JSON structured logging

--debug-http

DEBUG_HTTP

false

Log Jenkins HTTP requests

--log-max-lines

LOG_MAX_LINES_DEFAULT

2000

Default max log lines

--log-max-bytes

LOG_MAX_BYTES_DEFAULT

262144

Default max log bytes (256KB)

--timeout

JENKINS_TIMEOUT

30

Jenkins request timeout (seconds)

MCP Tools

jankins provides 25+ MCP tools organized by category:

Jobs

  • list_jobs: List jobs with prefix filtering and pagination

  • get_job: Get detailed job information

  • trigger_build: Trigger a new build with parameters

  • enable_job / disable_job: Enable or disable a job

Builds

  • get_build: Get build information (supports number or "last")

  • get_build_changes: Get SCM changes/commits for a build

  • get_build_artifacts: List build artifacts

Logs

  • get_build_log: Get logs with smart truncation and filtering

    • Supports: filter_regex, redact, start byte offset, max_bytes

    • Returns summary by default with error counts and failing stages

  • search_log: Search logs for pattern with context window

SCM & Pipeline

  • get_job_scm: Get job SCM configuration

  • get_build_scm: Get SCM info (commit, branch) for a build

Health & System

  • whoami: Get current user info and permissions

  • get_status: Jenkins version and queue depth

  • summarize_queue: Compact build queue summary

Advanced Analysis

  • triage_failure: Analyze failed builds with:

    • Root cause hypotheses

    • Top error messages

    • Failing stages

    • Suspect commits

    • Recommended next steps

  • compare_runs: Compare two builds for:

    • Duration differences

    • Result changes

    • Stage-level diffs (with Blue Ocean)

  • get_pipeline_graph: Get pipeline visualization with stages, parallel execution, and timing (Blue Ocean)

  • analyze_build_log: Analyze logs with build tool-specific parsers (Maven, Gradle, NPM) for detailed error analysis and recommendations

  • retry_flaky_build: Retry flaky builds with configurable attempts and delays

Test Results

  • get_test_report: Get test results summary (JUnit, pytest, etc.)

  • get_failed_tests: List failed tests with error details and stack traces

  • compare_test_results: Compare test results between builds for regression detection

  • detect_flaky_tests: Identify flaky tests across multiple builds

Logs (Enhanced)

  • tail_log_live: Poll-based live log tailing with progressive byte offsets

Output Formats

All tools support format parameter:

  • summary (default): Compact, token-efficient view

  • full: Complete data with all fields

  • diff: Differences only (for comparisons)

  • ids: IDs and URLs only

Example:

{
  "name": "list_jobs",
  "arguments": {
    "format": "summary",
    "page_size": 20
  }
}

Built-in Prompts

jankins includes pre-built prompts for common workflows:

  • investigate_failure: Full failure investigation workflow

  • tail_errors: Show only warnings and errors from a build

  • compare_builds: Compare two builds to find differences

  • check_job_health: Check overall job health and stability

  • trigger_with_params: Trigger parameterized build with guidance

  • search_logs: Search logs for specific patterns

Client Examples

Add to your MCP settings:

{
  "mcpServers": {
    "jankins": {
      "command": "jankins",
      "env": {
        "JENKINS_URL": "https://jenkins.example.com",
        "JENKINS_USER": "myuser",
        "JENKINS_API_TOKEN": "your-token-here"
      }
    }
  }
}

The default stdio transport communicates via stdin/stdout, which is the standard for MCP clients like Claude Desktop.

HTTP Mode (for HTTP-based MCP clients)

If your client requires HTTP transport:

{
  "mcp": {
    "servers": {
      "jankins": {
        "url": "http://localhost:8080/mcp",
        "headers": {
          "Content-Type": "application/json"
        }
      }
    }
  }
}

Direct HTTP Request

Start in HTTP mode:

jankins --transport http

Then make requests:

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "get_build",
      "arguments": {
        "name": "my-job",
        "number": "last",
        "format": "summary"
      }
    }
  }'

Example Workflows

Investigate a Failing Build

Use the "investigate_failure" prompt with job "backend-api"

This will:

  1. Get build status

  2. Retrieve error summary from logs

  3. Perform failure triage

  4. Show suspect commits

  5. Provide recommended next steps

Compare Two Builds

{
  "name": "compare_runs",
  "arguments": {
    "name": "backend-api",
    "base": "100",
    "head": "101"
  }
}

Search Logs for Error Pattern

{
  "name": "search_log",
  "arguments": {
    "name": "backend-api",
    "pattern": "OutOfMemoryError",
    "window_lines": 10
  }
}

Get Only Errors from Last Build

{
  "name": "get_build_log",
  "arguments": {
    "name": "backend-api",
    "number": "last",
    "filter_regex": "ERROR|FATAL",
    "redact": true,
    "format": "summary"
  }
}

Error Handling

jankins provides structured errors with:

  • Error code: JSON-RPC compliant error codes

  • Correlation ID: Track requests across logs

  • Hint: Human-readable remediation hint

  • Next actions: Specific steps to resolve the issue

  • Docs URL: Link to troubleshooting guide

Error taxonomy:

  • InvalidParams (-32602): Invalid tool parameters

  • Unauthorized (-32001): Authentication failed

  • Forbidden (-32002): Insufficient permissions

  • NotFound (-32003): Resource not found

  • Timeout (-32007): Request timed out

  • UpstreamError (-32006): Jenkins server error

Token Optimization

jankins minimizes token usage through:

  1. Default summaries: Summary format by default, full on request

  2. Field limiting: Only essential fields in summary mode

  3. Smart truncation: Progressive log retrieval with byte limits

  4. Token estimation: Responses include estimated token count

  5. Structured data: Compact tables and lists over verbose text

  6. Metadata separation: Performance data in _meta section

Example response structure:

{
  "build_number": 42,
  "result": "FAILURE",
  "duration": "2m 15s",
  "_meta": {
    "correlation_id": "abc-123",
    "took_ms": 250,
    "format": "summary",
    "token_estimate": 180
  }
}

Security

  • Explicit configuration: Uses env vars or CLI flags (ignores .env files in working directory)

  • Basic auth: Uses Jenkins API tokens (never passwords)

  • Optional Origin validation: Enforce allowed origins

  • No secret logging: Credentials are redacted in logs

  • Secret masking: Jenkins secret masks are preserved/redacted

Note: jankins ignores any .env files in your working directory and only reads the specific environment variables it needs (JENKINS_*, MCP_*, etc.). This prevents conflicts with project .env files.

Generate API tokens:

Jenkins → User → Configure → API Token → Add new Token

Health Checks

  • GET /_health: Basic health check

  • GET /_ready: Readiness check (verifies Jenkins connectivity)

  • GET /_metrics: Placeholder for Prometheus metrics

Development

Run from Source

# Install with dev dependencies
pip install -e ".[dev]"

# Run server
python -m jankins --jenkins-url $URL --jenkins-user $USER --jenkins-token $TOKEN

# With debug logging
python -m jankins --log-level DEBUG --debug-http

Testing

pytest tests/

Docker

See docker-compose.yml for local Jenkins + jankins setup.

docker-compose up

This starts:

  • Jenkins LTS on port 8081

  • jankins MCP server on port 8080

Feature Comparison

Feature

jankins

Official Plugin

Community Servers

MCP Protocol

✅ 2025-06-18

✅

⚠️ Varies

Token optimization

✅

❌

❌

Progressive logs

✅

⚠️ Limited

❌

Failure triage

✅

❌

❌

Build comparison

✅

❌

❌

Structured errors

✅

⚠️ Basic

❌

Built-in prompts

✅

❌

❌

Format modes

✅

❌

❌

Origin validation

✅

✅

⚠️ Varies

Troubleshooting

"Unauthorized" Error

  • Verify JENKINS_USER and JENKINS_API_TOKEN are correct

  • Regenerate API token from Jenkins user settings

  • Check Jenkins server is accessible

"Timeout" Error

  • Increase --timeout value

  • Check Jenkins server responsiveness

  • Verify network connectivity

"Tool not found" Error

  • Ensure server started successfully

  • Check MCP client configuration

  • Verify tool name spelling

Large Logs Timing Out

  • Use max_bytes parameter to limit retrieval

  • Use filter_regex to reduce log size

  • Use format=summary for overview first

License

MIT

Contributing

Contributions welcome! Please:

  1. Add tests for new features

  2. Follow existing code style

  3. Update documentation

  4. Add type hints

Acknowledgments

Built on:

Available Tools

25 tools
analyze_build_logB

Analyze build logs with build tool-specific parsers (Maven, Gradle, NPM) for detailed error analysis

Inputs: name (required), number, build_tool, max_bytes, +1 more.

compare_runsA

Compare two builds to identify differences in duration, stages, and results

Inputs: name (required), base (required), head (required), format.

compare_test_resultsB

Compare test results between two builds to identify new failures and regressions

Inputs: name (required), base (required), head (required), format.

detect_flaky_testsB

Identify flaky tests (inconsistent pass/fail) across recent builds

Inputs: name (required), build_count, format.

disable_jobB

Disable a Jenkins job to prevent builds

Inputs: name (required).

enable_jobB

Enable a Jenkins job to allow builds

Inputs: name (required).

get_buildC

Get information about a specific build or the last build

Inputs: name (required), number, format.

get_build_artifactsC

Get artifacts produced by a build

Inputs: name (required), number, format.

get_build_changesB

Get SCM changes (commits) for a build

Inputs: name (required), number, format.

get_build_logA

Get build log with smart truncation and filtering. Returns summary by default, full text on request.

Inputs: name (required), number, start, max_bytes, +3 more.

get_build_scmA

Get SCM information (git commit, branch, etc.) for a build

Inputs: name (required), number.

get_failed_testsC

Get list of failed tests from a build with error details

Inputs: name (required), number, limit, format.

get_jobB

Get detailed information about a specific Jenkins job

Inputs: name (required), format.

get_job_scmB

Get SCM configuration for a job

Inputs: name (required), format.

get_pipeline_graphA

Get pipeline execution graph with stages, parallel branches, and timing (requires Blue Ocean plugin)

Inputs: name (required), number, format.

get_statusA

Get Jenkins server status and queue depth

Inputs: no named parameters.

get_test_reportB

Get test results summary from a build (JUnit, pytest, etc.)

Inputs: name (required), number, detailed, format.

list_jobsA

List Jenkins jobs with optional prefix filtering and pagination

Inputs: prefix, page, page_size, format.

retry_flaky_buildB

Retry a flaky build multiple times until it succeeds or max retries reached

Inputs: name (required), max_retries, delay_seconds, parameters, +1 more.

search_logB

Search build log for pattern and return matching lines with context

Inputs: name (required), pattern (required), number, window_lines, +1 more.

summarize_queueC

Get compact summary of Jenkins build queue

Inputs: no named parameters.

tail_log_liveA

Get log chunk for live tailing (poll repeatedly with next_byte for streaming effect)

Inputs: name (required), build_number (required), start_byte, max_bytes.

triage_failureC

Analyze a failed build and provide root cause hypotheses and next steps

Inputs: name (required), number, max_bytes, format.

trigger_buildC

Trigger a new build for a Jenkins job with optional parameters

Inputs: name (required), parameters.

whoamiA

Get current authenticated user information

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 25 tools

    Disambiguation4/5

    Most tools have distinct purposes (job management, build inspection, test analysis, pipeline, queue, user info). Some overlap exists between log-related tools (analyze_build_log vs search_log vs tail_log_live) but descriptions clarify their unique functions. SCM tools (get_build_scm vs get_build_changes) are also clearly separated.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case (e.g., analyze_build_log, compare_runs, disable_job). No mixed conventions or inconsistent naming styles are observed.

    Tool Count4/5

    25 tools is slightly above the ideal range (3-15) but is reasonable for a comprehensive Jenkins integration covering jobs, builds, tests, pipelines, queue, and user info. The count is earned given the breadth of functionality.

    Completeness4/5

    The tool set covers major CI/CD workflows: job management (list, get, enable/disable, trigger), build inspection (logs, artifacts, SCM, comparisons), test analysis, pipeline visualization, queue, and user info. Missing: job creation/deletion, build cancellation, and configuration editing, but core troubleshooting and monitoring are well-represented.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      A Model Context Protocol server that enables AI assistants to interact with Jenkins CI/CD servers, providing tools to check build statuses, trigger builds, and retrieve build logs.
      3
      15
      MIT
    • A
      license
      Not graded
      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.
      10 PyPI
      6
      GPL 3.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      Read-only MCP server for Jenkins CI, enabling AI agents to securely query job/build status, logs, artifacts, and generate verification reports for loop workflows.
      17 npm
      ISC