Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ZUUL_URLYesZuul base URL (e.g. https://softwarefactory-project.io/zuul)
ZUUL_TIMEOUTNoHTTP timeout in seconds30
ZUUL_AUTH_TOKENNoBearer token for authenticated instances
ZUUL_VERIFY_SSLNoSSL certificate verificationtrue
ZUUL_USE_KERBEROSNoEnable Kerberos/SPNEGO authenticationfalse
ZUUL_DEFAULT_TENANTNoDefault 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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 pip install mcp-zuul[console].

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

NameDescription
debug_buildInvestigate a CI build failure - pre-loads build details and structured failures.
compare_buildsCompare two builds side-by-side - highlights differences in result, timing, nodeset, and failures.
check_changeCheck the current CI status of a change - live pipeline or latest results.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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