jankins

jankins

Token-optimized Jenkins MCP server with smart log handling and failure triage for AI coding assistants.

Category
访问服务器

README

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!)

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

Claude Desktop (stdio mode - recommended)

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:

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选