Zuul CI MCP Server

1

Add it to Claude Code

Run this in a terminal.

Run in terminal
claude mcp add -e "ZUUL_URL=${ZUUL_URL}" -e "ZUUL_DEFAULT_TENANT=${ZUUL_DEFAULT_TENANT}" mcp-zuul -- docker build -t mcp-zuul .
Required:ZUUL_URLZUUL_DEFAULT_TENANT+ 2 optional
README.md

Debug build failures by asking questions, not clicking through web UIs.

mcp-zuul

An MCP server for Zuul CI. Debug build failures by asking questions, not clicking through web UIs.

35 tools (30 read-only + 4 write + 1 LogJuicer), 3 prompt templates, and 3 resources — covering builds, logs, pipelines, jobs, infrastructure, and live status. Supports stdio, SSE, and streamable-http transports. Works with Claude Code, Claude Desktop, Cursor, and any MCP-compatible client.

You:   "Why did the latest gate job fail?"
Claude: → get_build_failures(uuid="abc123")
        → get_build_log(uuid="abc123", log_name="controller/logs/ci_script_008_run.log",
                        grep="error|failed|timed out", context=2)

        Root cause: cert-manager pod in Completed state blocked oc wait.
        Confidence: Confirmed — verified in ci_script_008_run.log:325-329.

Quick Start

uvx (no install, recommended):

claude mcp add zuul -- uvx mcp-zuul

Then set the required env var:

claude mcp add -e ZUUL_URL=https://softwarefactory-project.io/zuul \
               -e ZUUL_DEFAULT_TENANT=rdoproject.org \
               zuul -- uvx mcp-zuul

pip:

pip install mcp-zuul

Docker:

docker build -t mcp-zuul .

See Setup for full configuration options including Kerberos and multi-instance.

Features

Structured failure analysisget_build_failures parses Zuul's job-output.json and returns exactly which Ansible task failed, on which host, with error message, return code, and stderr. No log scrolling needed.

Read any log fileget_build_log isn't limited to job-output.txt. Pass log_name to read any file in the build's log directory (ci_script logs, ansible.log, deployment logs) with full grep, tail, and line-range support.

Precise log navigation — Jump to exact line ranges with start_line/end_line. After finding an error at line 6148, read lines 6130-6160 instead of scrolling through 200-line chunks.

Smart grep — Regex search with context lines. Auto-converts common shell-grep \| syntax to Python regex | so patterns like error\|failed\|timeout just work.

Live pipeline awarenessget_change_status returns live job progress with elapsed times, estimated completion, and pre-failure detection (pre_fail field). When the change isn't in pipeline, automatically fetches the latest completed buildset.

Kerberos/SPNEGO auth — First-class support for Zuul instances behind OIDC + Kerberos. Drives the full SPNEGO redirect chain automatically. Session cookies persist and re-authenticate transparently on expiry.

URL-based input — Paste a Zuul build URL directly. Tools auto-parse the tenant and UUID from URLs like https://zuul.example.com/t/tenant/build/abc123 — no manual extraction needed.

Flaky job detectionfind_flaky_jobs analyzes recent build history and computes pass/fail statistics to identify intermittent failures automatically.

Job dependency graphget_freeze_jobs returns the fully-resolved job graph for a pipeline/project/branch, showing all jobs with their dependencies after inheritance resolution.

Streamable HTTP transport — Run as a persistent HTTP server with MCP_TRANSPORT=streamable-http for remote/shared deployment. Supports stdio (default), SSE, and streamable-http.

Tool filtering — Reduce LLM tool-selection noise with ZUUL_ENABLED_TOOLS or ZUUL_DISABLED_TOOLS. Only expose the tools your workflow needs.

Write operations — Enqueue/dequeue changes and manage autoholds. Disabled by default (ZUUL_READ_ONLY=true), write tools are removed from the server entirely so LLMs don't even see them until explicitly enabled.

LogJuicer integrationget_build_anomalies uses ML-based log analysis to find unusual lines by comparing failed logs against successful baselines. Optional — requires LOGJUICER_URL.

Token-efficient output — All responses strip None values and use compact formatters. tail_build_log returns just the last N lines — the fastest way to check why a build failed.

Tools

Builds & Failures

Tool What it does
list_builds Search builds by project, pipeline, job, change, result. Includes buildset_uuid for cross-referencing.
get_build Full build details — nodeset, log URL, artifacts

Tools (2)

list_buildsSearch builds by project, pipeline, job, change, or result.
get_buildRetrieve full build details including nodeset, log URL, and artifacts.

Environment Variables

ZUUL_URLrequiredThe base URL of the Zuul instance.
ZUUL_DEFAULT_TENANTrequiredThe default tenant to query.
ZUUL_READ_ONLYSet to true to disable write operations.
LOGJUICER_URLURL for ML-based log analysis integration.

Configuration

claude_desktop_config.json
{"mcpServers": {"zuul": {"command": "uvx", "args": ["mcp-zuul"], "env": {"ZUUL_URL": "https://softwarefactory-project.io/zuul", "ZUUL_DEFAULT_TENANT": "rdoproject.org"}}}}

Try it

Why did the latest gate job for my change fail?
Get the build logs for build uuid abc123 and grep for error messages.
Show me the live status of the current pipeline for the project.
Find any flaky jobs in the recent build history for this branch.

Frequently Asked Questions

What are the key features of Zuul CI?

Structured failure analysis by parsing job-output.json. Read any log file with full grep, tail, and line-range support. Live pipeline awareness with job progress and pre-failure detection. Kerberos/SPNEGO authentication support. ML-based log anomaly detection via LogJuicer integration.

What can I use Zuul CI for?

Quickly identifying the root cause of failed CI jobs without manual log scrolling. Monitoring live pipeline progress and estimated completion times. Analyzing intermittent build failures using flaky job detection. Resolving complex job dependency graphs in large Zuul projects.

How do I install Zuul CI?

Install Zuul CI by running: claude mcp add zuul -- uvx mcp-zuul

What MCP clients work with Zuul CI?

Zuul CI works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep Zuul CI docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Need the old visual installer? Open Conare IDE.
Open Conare