mcp-zuul
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ZUUL_URL | Yes | Zuul base URL (e.g. https://softwarefactory-project.io/zuul) | |
| ZUUL_TIMEOUT | No | HTTP timeout in seconds | 30 |
| ZUUL_AUTH_TOKEN | No | Bearer token for authenticated instances | |
| ZUUL_VERIFY_SSL | No | SSL certificate verification | true |
| ZUUL_USE_KERBEROS | No | Enable Kerberos/SPNEGO authentication | false |
| ZUUL_DEFAULT_TENANT | No | Default tenant (saves passing tenant on every call) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_buildsA | Search builds with filters. Returns compact build summaries. Args: tenant: Tenant (default from env) project: Project filter pipeline: Pipeline filter job_name: Job name filter change: Change number filter branch: Branch filter patchset: Patchset filter ref: Git ref filter result: Result filter (SUCCESS, FAILURE, TIMED_OUT, SKIPPED, etc.) completed_after: ISO 8601 lower bound on completion time completed_before: ISO 8601 upper bound on completion time started_after: ISO 8601 lower bound on start time started_before: ISO 8601 upper bound on start time limit: Max results, 1-100 (default 20) skip: Pagination offset |
| get_buildA | Get full build details — log URL, nodeset, artifacts, timing, error detail. Args: uuid: Build UUID (full or prefix from list_builds) tenant: Tenant (default from env) url: Zuul build URL (alternative to uuid + tenant) |
| get_build_failuresA | Analyze a failed build — which task failed, on which host, with error message. Parses job-output.json for precise failure data. Prefer diagnose_build for most use cases (adds classification and log context). Args: uuid: Build UUID tenant: Tenant (default from env) url: Zuul build URL (alternative to uuid + tenant) |
| diagnose_buildA | One-call failure diagnosis — structured failures + relevant log context. Combines get_build_failures (which task failed, error message) with targeted log grep (surrounding context from job-output.txt). Returns everything needed to understand a failure in a single call. Use this instead of calling get_build_failures + get_build_log separately. Args: uuid: Build UUID tenant: Tenant (default from env) url: Zuul build URL (alternative to uuid + tenant) brief: Return only classification + root cause (default false). Omits playbooks, log_context, and full task details for ~95% smaller response. |
| batch_diagnoseA | Classify multiple failed builds in one call — returns a triage table. Runs diagnose_build(brief=True) in parallel for each UUID and returns a compact classification summary. Use instead of calling diagnose_build N times when triaging multiple failures. Args: uuids: List of build UUIDs to diagnose (max 20) tenant: Tenant (default from env) |
| diagnose_and_testA | One-call diagnosis + test results — combines diagnose_build and get_build_test_results. Fetches build metadata once, then runs failure analysis and JUnit test parsing in parallel. Saves a round-trip vs calling both tools separately. Args: uuid: Build UUID tenant: Tenant (default from env) url: Zuul build URL (alternative to uuid + tenant) brief: Brief diagnosis (default true). Set false for full failure details. |
| list_buildsetsA | Search buildsets (groups of builds triggered by a single event). Args: tenant: Tenant (default from env) project: Project filter pipeline: Pipeline filter change: Change number filter branch: Branch filter ref: Git ref filter result: Result filter completed_after: ISO 8601 lower bound on completion time completed_before: ISO 8601 upper bound on completion time started_after: ISO 8601 lower bound on start time started_before: ISO 8601 upper bound on start time limit: Max results, 1-100 (default 20) skip: Pagination offset include_builds: Fetch full details per buildset (slower, best with limit <= 5) |
| get_buildsetA | Get buildset details — result, pipeline, project, change. Brief (default): compact metadata only. Set brief=False for full details with builds, events, and timing. Args: uuid: Buildset UUID tenant: Tenant (default from env) url: Zuul buildset URL (alternative to uuid + tenant) brief: Compact response (default true). Set false for full timing/events. |
| list_jobsA | List all jobs in a tenant. Optionally filter by name substring. Args: tenant: Tenant (default from env) filter: Case-insensitive name substring filter limit: Max results (default 200, 0 for unlimited) |
| get_jobA | Get job configuration — parent, nodeset, timeout, branches, and all variants. Args: name: Job name tenant: Tenant (default from env) |
| get_projectA | Get project configuration — which pipelines and jobs are configured. Args: name: Project name (e.g. "openstack-k8s-operators/openstack-operator") tenant: Tenant (default from env) |
| list_pipelinesA | List all pipelines with their trigger types. Args: tenant: Tenant (default from env) |
| get_config_errorsA | Get Zuul configuration errors — broken configs, missing refs, syntax errors. First tool to check when a job isn't being triggered. Args: tenant: Tenant (default from env) project: Project filter (optional) |
| list_projectsA | List all projects in a tenant. Optionally filter by name substring. Args: tenant: Tenant (default from env) filter: Case-insensitive name substring filter limit: Max results (default 200, 0 for unlimited) |
| list_nodesA | List nodepool nodes — available, in-use, or provisioning. Check when jobs are stuck waiting for nodes. Summary by default, set detail=true for individual nodes. Args: tenant: Tenant (default from env) detail: Include individual node list (default false) limit: Max nodes in detail list (default 200, 0 for unlimited) |
| list_labelsA | List available nodepool labels (node types that jobs can request). Args: tenant: Tenant (default from env) |
| list_semaphoresA | List semaphores — resource locks that limit concurrent job execution. Check when jobs are waiting unexpectedly. Args: tenant: Tenant (default from env) |
| list_autoholdsA | List autohold requests — nodes held after failure for debugging. Args: tenant: Tenant (default from env) |
| get_autoholdA | Get details of a specific autohold request. Args: autohold_id: Autohold request ID (from list_autoholds) tenant: Tenant (default from env) |
| list_system_eventsA | List system events — config updates, reconfigurations, pipeline changes. Args: tenant: Tenant (default from env) event_type: Event type filter limit: Max results (default 50) skip: Pagination offset |
| list_providersA | List nodepool cloud providers with flavors and images. Args: tenant: Tenant (default from env) |
| list_imagesA | List nodepool disk images with build status and upload artifacts. Args: tenant: Tenant (default from env) |
| get_badgeA | Get a status badge URL (SVG) for a project's latest buildset result. Args: project: Project name (e.g. "org/repo") tenant: Tenant (default from env) pipeline: Pipeline filter branch: Branch filter |
| get_freeze_jobsA | Get the resolved job graph for a pipeline/project/branch. Shows which jobs will run with all inheritance resolved, including dependencies. Use to understand job ordering. Args: pipeline: Pipeline name (e.g. "check", "gate") project: Project name branch: Branch name (default "main") tenant: Tenant (default from env) |
| get_connectionsA | List configured source connections — Gerrit, GitHub, GitLab instances. Shows what code review systems this Zuul instance talks to, with connection type, hostname, and base URL. |
| get_componentsA | Show Zuul system components — schedulers, executors, mergers, web servers. |
| get_freeze_jobA | Get fully-resolved job configuration after inheritance. Shows final merged nodeset, timeout, and playbooks. Use to understand exactly what a job will do. Args: pipeline: Pipeline name (e.g. "check", "gate") project: Project name job_name: Job name to resolve branch: Branch name (default "main") tenant: Tenant (default from env) include_vars: Include vars/extra_vars/host_vars/group_vars (default false, can be large) |
| get_tenant_infoA | Get tenant capabilities, auth config, and websocket URL. Args: tenant: Tenant (default from env) |
| stream_build_consoleA | Read live console output from a RUNNING build via WebSocket. For RUNNING builds only. For completed builds, use tail_build_log.
Requires Args: uuid: Build UUID (from get_change_status) tenant: Tenant (default from env) url: Zuul build URL (alternative to uuid + tenant) lines: Lines to return from end (default 100, max 500) timeout: Seconds to buffer (default 10, max 30) |
| get_build_anomaliesA | Detect anomalous log lines using LogJuicer ML-based analysis. Requires LOGJUICER_URL to be configured. Args: uuid: Build UUID tenant: Tenant (default from env) url: Zuul build URL (alternative to uuid + tenant) |
| get_build_logA | Read, search, and navigate build log files with grep, line ranges, and error summary. Args: uuid: Build UUID tenant: Tenant (default from env) log_name: Log file to read (default "job-output.txt") mode: "summary" (tail + errors), "errors" (errors only, no tail), or "full" (paginated) lines: For summary: tail count (default 50). For full: offset start line. start_line: Read from this line (1-based, overrides mode with end_line) end_line: Read up to this line (1-based, inclusive) grep: Regex to filter lines (overrides mode). Use | for OR. context: Lines of context around grep matches (default 0, max 10) url: Zuul build URL (alternative to uuid + tenant) direct_log_url: Log URL from a prior get_build/diagnose_build call. Skips the build metadata fetch when provided. max_matches: Max grep matches to return (default 50, max 200) filter_noise: Filter out noise lines (failed=0, RETRYING) from grep results (default true) |
| browse_build_logsA | Browse or fetch files from a build's log directory. Without path: lists top-level. With trailing '/': lists subdirectory. With file path: fetches content (max 512KB). For filtered reads, use get_build_log with grep instead. Args: uuid: Build UUID tenant: Tenant (default from env) path: Relative path within the log dir (e.g. "logs/controller/") url: Zuul build URL (alternative to uuid + tenant) max_lines: Limit file content to first N lines (0 = no limit) direct_log_url: Log URL from a prior call. Skips build metadata fetch. |
| tail_build_logA | Get the last N lines of a build log — fastest way to see why a build failed. More token-efficient than get_build_log(mode="summary") when you just need the tail. Args: uuid: Build UUID tenant: Tenant (default from env) lines: Lines from the end (default 50, max 500) log_name: Log file to read (default "job-output.txt") url: Zuul build URL (alternative to uuid + tenant) skip_postrun: Tail from run phase end, skipping post-run (default true) direct_log_url: Log URL from a prior call. Skips build metadata fetch. |
| list_tenantsA | List all Zuul tenants with project and queue counts. |
| get_statusA | Live pipeline status showing what's currently queued/running. Args: tenant: Tenant (default from env) pipeline: Pipeline name filter project: Project filter active_only: Only show pipelines with active items (default true) |
| get_change_statusA | Pipeline status for a specific change or PR/MR. When in pipeline: live status with jobs, elapsed times, buildset UUID. When not in pipeline: fetches latest completed buildset automatically. Args: change: Change number, GitHub ref (refs/pull/N/head), or GitLab ref tenant: Tenant (default from env) url: Zuul change status URL (alternative to change + tenant) brief: Strip to monitoring essentials (~75% smaller). Use for repeated polls. |
| find_flaky_jobsA | Detect flaky jobs by analyzing recent build history for intermittent failures. Computes pass/fail statistics from recent builds. A job with mixed results and >20% failure rate is likely flaky. Args: job_name: Job name to analyze tenant: Tenant (default from env) project: Project filter pipeline: Pipeline filter limit: Builds to analyze (default 20, max 100) detail: Include individual build list (default false) |
| get_build_timesA | Build duration trends — compute avg/min/max to detect performance regressions. Returns ALL results (no result filtering). For SUCCESS-only averages, use get_job_durations instead. Args: tenant: Tenant (default from env) job_name: Job name filter project: Project filter pipeline: Pipeline filter branch: Branch filter limit: Max results, 1-100 (default 20) skip: Pagination offset detail: Include individual build list (default true) |
| get_job_durationsA | Get avg/min/max duration for multiple jobs in a single call. Fetches build history per job in parallel. Designed for monitoring tools that need durations for an entire pipeline chain. Args: job_names: List of job names to get stats for tenant: Tenant (default from env) result: Result filter (default "SUCCESS" for clean averages) limit: Builds per job to analyze (default 10, max 50) |
| check_healthA | Test Zuul API connectivity and auth status. Use this to verify the server is reachable. Re-auth happens automatically via Kerberos if the session expired. |
| get_build_test_resultsA | Parse JUnit XML test results from a build's log directory. Discovers test result files via zuul-manifest.json. Works with tempest, tobiko, and any JUnit XML output. Args: uuid: Build UUID tenant: Tenant (default from env) url: Zuul build URL (alternative to uuid + tenant) failures_only: Only return suites with failures (default true) |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| debug_build | Investigate a CI build failure - pre-loads build details and structured failures. |
| compare_builds | Compare two builds side-by-side - highlights differences in result, timing, nodeset, and failures. |
| check_change | Check the current CI status of a change - live pipeline or latest results. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/imatza-rh/mcp-zuul'
If you have feedback or need assistance with the MCP directory API, please join our Discord server