
Mcp Zuul
io.github.imatza-rh由 GitHub 账号 imatza-rh 发布v0.11.0更新于 Oct 24, 2026
Zuul CI — build failure analysis, log search, pipeline status, and job configuration
概览
一个面向 Zuul CI 的 MCP 服务器,让助手查看构建、解析失败原因、搜索日志并检查流水线状态。
- 可以做什么
- 通过 Zuul REST API 提供约 48 个工具,覆盖构建、构建集、流水线、作业、项目和 nodepool 基础设施。它把 job-output.json 解析为结构化失败信息(任务、主机、错误、返回码),可按行范围读取和正则搜索任意构建日志文件,解析 JUnit XML 测试结果,并统计易失败作业。还提供实时流水线状态、作业依赖图和可选的 LogJuicer 机器学习日志异常检测。
- 适用场景
- 适合排查失败的 CI 构建、确认某个变更是否在排队或运行、调查作业为何没有触发,以及审查 Zuul 实例中的作业配置和节点可用性。可替代在 Zuul 网页界面中反复点击和手工解析 JSON。
- 运行要求
- 以 stdio 方式在本地运行,通常通过 uvx 或 pip 安装。必须设置 ZUUL_URL;可选设置包括 ZUUL_DEFAULT_TENANT、ZUUL_AUTH_TOKEN、ZUUL_USE_KERBEROS、ZUUL_TIMEOUT、ZUUL_VERIFY_SSL、工具过滤变量和 LOGJUICER_URL。Kerberos 支持需要有效票据和 gssapi 包;实时控制台流式输出需要额外安装。需要能访问 Zuul 实例和日志主机的网络。
安装
在 SourceWeft 中
- 打开 控制台中的 Mcp Zuul,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
mcp-zuul
[PyPI] [Python] [License] [CI] [MCP] [Downloads] [codecov] [Listed on AiList]
Debug build failures by asking questions, not clicking through web UIs. An MCP server for Zuul CI.
[mcp-zuul diagnosing a build failure]
If mcp-zuul saves you a debugging session, a ⭐ star helps others find it.
One command, no install:
48 tools, 5 prompts, 3 resources — covering builds, logs, pipelines, jobs, infrastructure, and live status. Works with Claude Code, Claude Desktop, Cursor, Codex, Windsurf, and any MCP-compatible client.
Why mcp-zuul?
Quick Start
uvx (no install, recommended):
pip:
Docker:
LobeHub — send this to your AI agent:
See Setup for full configuration options including Kerberos and multi-instance.
Features
Structured failure analysis — get_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 file — get_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 awareness — get_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.
Tool filtering — Reduce LLM tool-selection noise with ZUUL_ENABLED_TOOLS or ZUUL_DISABLED_TOOLS. Only expose the tools your workflow needs — the rest are removed from the server entirely.
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 detection — find_flaky_jobs analyzes recent build history and computes pass/fail statistics to identify intermittent failures automatically.
Job dependency graph — get_freeze_jobs returns the fully-resolved job graph for a pipeline/project/branch, showing all jobs with their dependencies after inheritance resolution.
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.
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.
Write operations — Enqueue/dequeue/promote changes and re-enqueue buildsets. Pipeline-affecting tools are disabled by default (ZUUL_READ_ONLY=true) and removed from the server entirely so LLMs don't even see them. Autohold management (create/delete) is always available since it doesn't affect running pipelines.
LogJuicer integration — get_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.
Error handling — All tools return JSON, errors included. Network failures, auth issues, and invalid parameters produce {"error": "descriptive message"}. Tools never raise unhandled exceptions.
Tools
Builds & Failures
Buildsets
Pipeline & Status
Jobs & Projects
Infrastructure
Write Operations
Pipeline-affecting operations — disabled by default (ZUUL_READ_ONLY=true). Set ZUUL_READ_ONLY=false to enable. Requires auth token or Kerberos. Autohold management (create/delete) is always available since it doesn't affect running pipelines.
Test Results & Log Analysis
Prompts
Pre-built prompt templates that pre-load context and guide analysis:
Resources
Browsable context that clients can attach to conversations without tool calls:
Setup
MCP client configuration
All clients use the same JSON structure. Add to your client's MCP config file:
Claude Code (~/.claude.json → mcpServers):
Claude Desktop (claude_desktop_config.json), Cursor (.cursor/mcp.json), and other MCP clients use the same format. GUI-based clients don't inherit your shell PATH - use the full path to uvx (run which uvx to find it).
Or via CLI:
Environment variables
Token authentication
Pass ZUUL_AUTH_TOKEN via host environment — never hardcode tokens in config files (visible in ps output):
For Docker, forward without a value to inherit from host:
Kerberos / SPNEGO
For Zuul behind OIDC + Kerberos. Requires a valid Kerberos ticket (kinit) and the gssapi package.
Linux prerequisites - gssapi has no pre-built Linux wheels and must compile from source:
macOS and Windows have pre-built wheels - no extra packages needed.
Then install with Kerberos support:
Via CLI:
Or via JSON config:
For Docker, mount the Kerberos ticket cache:
Multiple instances
Add separate entries per Zuul instance:
Troubleshooting
krb5-config: not found or Python.h: No such file when installing mcp-zuul[kerberos] on Linux:
gssapi has no pre-built Linux wheels - it compiles from source. Install system packages first:
uvx: command not found in Cursor or Claude Desktop:
GUI-based MCP clients don't inherit your shell PATH. Use the full path to uvx:
Then use that absolute path as command in your MCP config:
Permission errors on ~/.local/share/uv/:
If uv was previously run with sudo, the cache directory may be root-owned:
Usage Examples
Debug a build failure
→ list_builds(project="my-project", result="FAILURE", limit=1) → get_build_failures(uuid="...") → root cause with task name, error, and return code.
Deep-dive into logs
→ browse_build_logs(uuid="...", path="controller/ci-framework-data/logs/") → finds ci_script_008_run.log → get_build_log(uuid="...", log_name="controller/ci-framework-data/logs/ci_script_008_run.log", grep="error|timed out|Error 1", context=2) → exact error with surrounding context.
Navigate to a specific error
→ get_build_log(uuid="...", start_line=6478, end_line=6484) → exactly those 7 lines.
Check live pipeline status
→ get_change_status(change="54321") → live jobs with elapsed times and ETA, or latest completed buildset if not in pipeline.
Compare build results across a pipeline
→ list_builds to get buildset_uuid → get_buildset(uuid="...") → all sibling builds with results and durations.
Paste a Zuul URL directly
→ get_build_failures(url="https://zuul.example.com/t/tenant/build/abc123def") → tenant and UUID auto-extracted.
Debug why a job isn't running
→ get_config_errors(project="org/my-project") → configuration errors, missing refs, or repo access issues.
Check node availability
→ list_nodes() → node states with by_state summary → list_labels() → available node types.
Detect flaky jobs
→ find_flaky_jobs(job_name="my-deploy-job", limit=30) → pass/fail stats, failure rate, flaky=true/false.
See what jobs run for a project
→ get_freeze_jobs(pipeline="check", project="openstack-k8s-operators/openstack-operator") → resolved job graph with dependencies.
Quick log tail
→ tail_build_log(uuid="...", lines=30) → just the tail, minimal tokens.
What nodeset does my job use after inheritance?
→ get_freeze_job(pipeline="check", project="org/repo", job_name="deploy-job") → resolved nodeset, playbooks, variables, timeout after all parent inheritance.
Development
Architecture
See CLAUDE.md for full architecture details.
Listings
[mcp-zuul MCP server]- PyPI —
pip install mcp-zuul - Glama — Quality: A/A/A
- Conare — Marketplace listing
- PulseMCP — Server directory
- LobeHub — MCP marketplace with agent install
- HiFriendBot — AI tools directory
- pepy.tech — Download statistics
- Docker —
ghcr.io/imatza-rh/mcp-zuul
Contributing
Contributions welcome. Please open an issue first to discuss significant changes.
License
Apache-2.0
来源:README.md,提交 e1a0ffa
工具
0版本历史
1- v0.11.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分