Skip to main content
Glama
AlmaLinux

albs-mcp

Official
by AlmaLinux

albs-mcp

AlmaLinux Build System(ALBS)용 MCP 서버 및 CLI.

AI 코딩 어시스턴트에게 ALBS에 대한 직접 접근 권한을 부여합니다 — 자연어로 빌드 실패를 조사하고, 빌드를 생성하고, 패키지에 서명할 수 있습니다.

두 가지 사용 방법:

MCP 서버

CLI + Skill

작동 방식

AI가 MCP 프로토콜을 통해 도구 호출

AI가 셸에서 albs 명령 실행

설정

MCP 구성에 추가

albs 설치 + AI 도구에 스킬 추가

적합한 경우

전용 ALBS 워크플로우

가벼운 설정, MCP 컨텍스트 오염 방지

AI 없이 사용 가능

아니요

예 (albs는 독립형 CLI로 동작)

할 수 있는 작업

토큰 없이(읽기 전용)

  • 빌드 실패 조사 — 주요 사용 사례. 에이전트에게 빌드 ID를 주면 로그에서 실패 시그니처를 검색하고(search_log), 정확한 파일, 줄, 진단 메시지를 특정한 다음 그 주변의 컨텍스트를 확장합니다. 줄 오프셋을 추측할 필요도 없고 10만 줄이 넘는 로그 파일에 토큰을 낭비할 필요도 없습니다.

  • 빌드 상세 정보 가져오기 — 모든 태스크의 상태, 패키지, 아키텍처, 서명 태스크.

  • 빌드 목록 및 검색 — 최근 빌드 탐색, 패키지 이름 또는 상태로 필터링.

  • 플랫폼 가져오기 — 모든 플랫폼과 지원 아키텍처 목록을 동적으로 가져옴.

  • 로그 다운로드 및 읽기 — 모든 빌드의 모든 로그 파일: grep(search_log), 아래에서 위로 페이지 단위 읽기(read_log_tail), 또는 줄 범위 읽기. 어떤 읽기도 폭주하지 않습니다: 각 줄은 500자로, 전체 결과는 40k자로 잘립니다(max_line_chars=0 / max_chars=0으로 해제 가능). 따라서 한 줄이 수 KB의 컴파일러 플래그로 구성된 로그도 하나의 거대한 덩어리 대신 정확히 이어지는 페이지로 반환됩니다. 읽기는 로그가 아직 디스크에 없으면 자동으로 다운로드합니다.

  • 서명 상태 확인 — 빌드의 서명 태스크가 완료되었는지 실패했는지 확인.

  • 제품 목록 — 모든 릴리스 대상(제품)과 해당 플랫폼, 공식/커뮤니티 플래그, ID.

  • 릴리스 계획 보기 — 기존 릴리스의 상태, 소스 패키지, 대상 저장소.

JWT 토큰 포함(인증됨)

  • 빌드 생성 — 패키지, 플랫폼, 브랜치/태그/SRPM 지정. 단일 빌드에서 여러 플랫폼 지원(예: AlmaLinux-8 + AlmaLinux-9). 아키텍처는 재정의하지 않으면 각 플랫폼의 전체 목록이 기본값입니다. git.almalinux.org 외부 저장소(예: GitHub, GitLab)용 사용자 지정 Git URL 지원. 모든 mkbuild.py 옵션 지원: 연결된 빌드, mock 정의, 제외 항목, flavor, secureboot, 모듈, with/without.

  • 빌드 서명 — 선택한 키로 서명 태스크 생성.

  • 서명 키 목록 — 사용 가능한 키의 ID와 플랫폼 매핑 확인.

  • 릴리스 계획 생성 — 선택한 플랫폼 + 제품을 대상으로 빌드에 대한 예약된 릴리스 계획 생성(어떤 패키지가 어떤 저장소로 갈지). 실제 릴리스는 절대 수행되지 않습니다 — 이 작업은 계획만 생성하며, 커밋/게시는 의도적으로 차단됩니다.

  • 빌드 삭제 — 안전을 위해 의도적으로 차단됨.

로그 유형

ALBS는 빌드 태스크당 여러 로그 파일을 생성합니다. 디버깅에 핵심적인 것들:

로그

내용

mock_root

Chroot 설정, 의존성 해결. 먼저 확인 — 의존성이 실패했다면 다른 것은 중요하지 않습니다.

mock_stderr

빌드 프로세스의 stderr 출력. 가장 명확한 오류 메시지가 있는 경우가 많습니다.

mock_build

전체 빌드 로그(10만 줄 이상일 수 있음). 컴파일 오류가 있는 완전한 rpmbuild 출력. search_log로 grep하세요. tail에는 원인이 아닌 make 래퍼 오류만 표시됩니다.

mock_state

Mock 상태 전환.

mock_hw_info

빌드 노드의 하드웨어 정보.

mock_installed_pkgs

chroot에 설치된 패키지 목록.

albs

ALBS 수준 태스크 로그(태스크 할당, 업로드).

mock.*.cfg

빌드에 사용된 mock 구성.

Related MCP server: Kerneldev MCP

설치

pip install git+https://github.com/AlmaLinux/albs-mcp.git

이렇게 하면 MCP 서버(albs-mcp)와 CLI(albs)가 모두 설치됩니다.

인증

JWT 토큰은 다음에서 읽습니다(순서대로 확인):

  1. ALBS_JWT_TOKEN 환경 변수

  2. ~/.albs/credentials 파일(token 키가 있는 Python dict):

{"token": "eyJ..."}

토큰이 없으면 MCP와 CLI 모두 읽기 전용 모드로 작동합니다.

실제 토큰을 커밋하지 마세요. CLI 인수가 아닌 환경 변수 또는 ~/.albs/credentials를 사용하세요.

설정 옵션 1: MCP 서버

MCP 클라이언트 구성(예: mcp.json 또는 이에 상응하는 파일)에 추가:

{
  "mcpServers": {
    "albs": {
      "command": "albs-mcp"
    }
  }
}

설정 옵션 2: CLI + Skill

MCP 컨텍스트 오염이 우려되거나 MCP를 지원하지 않는 도구를 사용하는 경우에 적합합니다.

1단계. 패키지 설치(위와 동일 — albs 명령이 제공됩니다):

pip install git+https://github.com/AlmaLinux/albs-mcp.git

2단계. AI 도구에 워크플로우 지침 추가:

# Copy the skill directory to your tool's skills location, e.g.:
cp -r skills/albs-cli <YOUR_SKILLS_DIR>/albs-cli

또는 skills/albs-cli/SKILL.md의 내용을 프로젝트의 AGENTS.md 또는 이에 상응하는 지침 파일에 복사하세요.

이 스킬은 AI 에이전트에게 동일한 워크플로우(조사 순서, EPEL 처리, 서명)를 MCP 도구 호출 대신 albs 셸 명령을 통해 가르칩니다.

3단계. 확인:

albs --help

CLI는 AI 없이도 독립적으로 작동합니다. 스크립트와 수동 터미널 사용에 유용합니다.

CLI 사용법

# List platforms
albs platforms

# Investigate a build
albs build-info 52679
albs failed-tasks 52679
# log-search greps for the failure and shows it with context — start here.
# It auto-downloads the log if needed (download-log is optional)
albs log-search 52679 "mock_build.395391.1772974729.log"
# ...or grep for something specific
albs log-search 52679 "mock_build.395391.1772974729.log" -e "Hunk #\d+ FAILED" -A 3
# When the search finds nothing, page the log bottom-up: each page prints the
# exact command for the page above it, so the pages join up with no gaps
albs log-tail 52679 "mock_build.395391.1772974729.log"
albs log-tail 52679 "mock_build.395391.1772974729.log" --before-line 772

# Search builds
albs search --project bash --page 2

# Create a build (requires JWT)
albs create-build AlmaLinux-9 bash --branch c9s
albs create-build AlmaLinux-10 https://example.com/pkg.src.rpm \
    --from-srpm --add-epel-dist --arch x86_64_v2 \
    --flavor EPEL-10 --flavor EPEL-10_altarch

# Build on multiple platforms at once
albs create-build AlmaLinux-8 bash --branch c9s \
    --add-platform AlmaLinux-9

# Build from an external Git repo (e.g. GitHub)
albs create-build AlmaLinux-10 \
    --git-url https://github.com/ykohut/leapp-data.git \
    --branch devel-ng-0.23.0

# Independent tasks (disable the default sequential per-platform task chain,
# so packages build in parallel within each platform)
albs create-build AlmaLinux-9 bash glibc openssl --branch c9s --independent-tasks

# Sign a build (requires JWT)
albs sign-keys
albs sign-build 52679 --key-id 4

# Check whether signing finished
albs sign-status 52679

# List products (release targets) and view an existing release plan
albs products
albs release-plan 39229

# Create a release plan (requires JWT) — never performs the actual release
albs create-release-plan 62316 --platform AlmaLinux-8 --product AlmaLinux
# Release a PARTIAL build (only fully-completed packages):
albs create-release-plan 62316 --platform AlmaLinux-8 --product AlmaLinux \
    --whole-packages-only

# Pass token via flag or env var
albs --token "eyJ..." sign-keys
ALBS_JWT_TOKEN="eyJ..." albs sign-keys

전체 사용법은 albs --help 또는 albs <command> --help를 실행하세요.

도구 참조

읽기 전용(인증 불필요)

도구

설명

get_platforms

모든 플랫폼과 해당 아키텍처, ALBS에서 동적으로 가져옴

get_build_info

빌드 요약: 상태, 아키텍처, 패키지, git ref, 로그 수를 포함한 모든 태스크, Secure Boot 상태, flavor 및 연결된 빌드

get_failed_tasks

실패한 태스크만 해당 로그 파일과 함께 표시. 주요 로그는 ★로 표시

list_build_logs

서버에서 빌드에 사용 가능한 모든 로그/구성 파일

download_log

로그 파일을 로컬 디스크로 다운로드(/tmp/albs-logs/<build_id>/)

search_log

실패 시 여기서 시작: 로그에서 빌드 실패 시그니처(또는 사용자 지정 정규식)를 grep하고 줄 번호와 컨텍스트와 함께 모든 히트를 가져옴. 필요하면 자동 다운로드

read_log_tail

로그의 한 페이지를 끝에서 읽고, 그 위로 페이지 이동(before_line). 각 결과는 위 페이지에 대한 정확한 호출을 출력합니다. 빌드가 어떻게 종료되었는지 보여주며, 컴파일 오류가 있는 위치는 보여주지 않음

read_log_range

로그에서 특정 줄 범위 읽기(예: search_log 히트 주변). 크기 예산에서 멈추고 계속하는 방법을 알려줌

search_builds

페이지별로 빌드 탐색, 패키지 이름 또는 실행 상태로 필터링 — 각 패키지를 NVR과 빌드의 릴리스 상태로 표시. project 필터는 일치하는 패키지를 자체 match: 줄에 나열

get_sign_task_status

빌드의 서명 태스크 상태(idle/in_progress/completed/failed) — sign_build 이후에 사용

get_products

모든 제품(릴리스 대상) 목록: ID, 이름, 공식/커뮤니티, 플랫폼

get_release_plan

기존 릴리스 보기: 상태, 소스 패키지, 대상 저장소

인증됨(JWT 필요)

도구

설명

get_sign_keys

서명 키 목록: ID, 이름, GPG keyid, 활성 상태, 플랫폼 매핑

create_build

빌드 생성: 패키지 또는 사용자 지정 Git URL + 플랫폼 + 브랜치/태그/srpm, 모든 mock 옵션 포함

sign_build

선택한 키로 빌드에 대한 서명 태스크 생성

create_release_plan

빌드 + 플랫폼 + 제품에 대한 예약된 릴리스 계획 생성. 실제 릴리스를 절대 수행하지 않음 — 계획만 생성

commit_release

차단됨 — 실제 릴리스 수행은 비활성화되어 있습니다. 계획만 지원됩니다

delete_build

차단됨 — 안전을 위해 비활성화됨

프롬프트

MCP 프롬프트는 사용자가 호출하는 워크플로우 진입점입니다. Claude Code와 같은 클라이언트에서는 슬래시 명령(/mcp__albs__<name>)으로 나타납니다. 에이전트가 아닌 사용자가 이를 실행합니다.

프롬프트

인자

설명

investigate_build

build_id

빌드 ID에 대한 빌드 실패 조사 워크플로우를 시작합니다. "빌드 N이 왜 실패했는지"라고 묻는 것과 동일하지만, 한 단계로 실행되는 매개변수화된 명령입니다.

release_plan

build_id

빌드 ID에 대한 릴리스 계획 워크플로우를 시작합니다(플랫폼 확인, 제품 선택, 계획 생성). 실제 릴리스를 절대 수행하지 않습니다.

예제 (Claude Code):

/mcp__albs__investigate_build 52679
/mcp__albs__release_plan 52679

investigate_build는 빌드 ID로 매개변수화된 조사 워크플로우(get_build_info → get_failed_tasks → 주요 로그를 순서대로 다운로드/읽기)로 확장됩니다. release_plan은 릴리스 계획 워크플로우(get_build_info → get_products → create_release_plan)로 확장되며, 계획에서 명시적으로 멈춥니다 — 커밋/게시를 절대 하지 않습니다.

예제: 실패한 빌드 조사

에이전트에게 물어보세요: "빌드 52679에서 무엇이 잘못되었나요?"

에이전트는 다음을 수행합니다:

  1. get_build_info(70368) — i686 작업만 실패했고 나머지 7개 아키텍처는 빌드되었음을 확인합니다

  2. get_failed_tasks(70368) — 로그 파일을 가져오고, ★는 중요한 파일을 표시합니다

  3. search_log(70368, "mock_build.441500.1785274367.log") — 936줄/600KB 로그를 grep하여 원인을 맥락과 함께 한 번의 호출로 반환합니다:

    >>> 826 | usr/lib/common/mech_openssl.c:2766:52: error: passing argument 5 of
              'EVP_PKEY_get_octet_string_param' from incompatible pointer type
        833 | note: expected 'size_t *' {aka 'unsigned int *'} but argument is of
              type 'CK_ULONG *' {aka 'long unsigned int *'}
    >>> 853 | make[1]: *** [Makefile:9851: ...mech_openssl.lo] Error 1
  4. search_log(70368, "mock_root.441500.1785274367.log") — 일치 항목 없음: chroot와 의존성은 정상이었으므로, 의존성 실패가 아닙니다

  5. 보고: "CK_ULONG *은 unsigned long *인 반면 OpenSSL은 size_t *를 원합니다. ILP32(i686)에서는 이들이 서로 다른 타입이므로, 3.27.0 리베이스는 32비트에서만 깨집니다."

검색 결과가 비어 있었다면, 다음 단계는 read_log_tail을 호출하고, 그다음 그것이 출력하는 ↑ earlier: ... 호출을 사용하여 로그를 한 번에 한 페이지씩 거슬러 올라가는 것입니다. 페이지는 줄 수가 아니라 문자 예산에 따라 크기가 정해집니다 — 이 mock_build의 165줄 또는 같은 빌드 mock_root의 350줄 — 그리고 각 페이지는 이전 페이지가 멈춘 지점에서 정확히 시작하므로 건너뛰는 부분이 없습니다.

3단계가 무엇을 대체하는지 주목하세요. 해당 로그에서 read_log_tail은 make: *** [Makefile:4615: all] Error 2를 반환합니다. 이것은 실제 오류보다 수백 줄 아래에 있는 증상입니다. make -j는 첫 번째 실패 후에도 계속 컴파일하기 때문입니다. 오류에 도달할 만큼 충분한 tail을 요청하면 대신 167KB의 gcc 명령줄이 반환되어 호출자의 결과 크기 제한을 초과할 수 있습니다. search_log는 답이 맨 위에 있는 4KB를 반환합니다.

예제: 빌드 생성

에이전트에게 물어보세요: "c9s 브랜치에서 AlmaLinux-9용 bash를 빌드해 주세요"

에이전트는 다음을 호출합니다:

create_build(packages=["bash"], platform="AlmaLinux-9", branch="c9s")

여러 플랫폼을 한 번에 처리하는 경우:

create_build(packages=["bash"], platforms=["AlmaLinux-8", "AlmaLinux-9"], branch="c9s")

외부 Git 저장소(예: GitHub)의 경우 git_urls를 사용하세요:

create_build(git_urls=["https://github.com/ykohut/leapp-data.git"], platform="AlmaLinux-10", branch="devel-ng-0.23.0")

아키텍처는 기본적으로 각 플랫폼의 전체 목록입니다. arch_list가 여러 플랫폼과 함께 지정되면 각 플랫폼에 대해 개별적으로 검증됩니다.

예제: 릴리스 계획 생성

에이전트에게 물어보세요: "AlmaLinux-8에서 빌드 62316에 대한 릴리스 계획을 생성해 주세요."

에이전트는 다음을 수행합니다:

  1. get_build_info(62316) — 플랫폼과 빌드에 완료된 작업이 있음을 확인합니다

  2. get_products() — 대상을 선택할 수 있도록 제품을 나열합니다(예: AlmaLinux)

  3. create_release_plan(build_id=62316, platform="AlmaLinux-8", product="AlmaLinux") — 완료된 빌드 작업을 수집하고 플랫폼/제품 이름을 ID로 변환한 다음 예약된 계획을 생성합니다

  4. 계획(상태, 소스 패키지, 대상 저장소)을 보고하고 아무것도 게시되지 않았음을 분명히 합니다 — 단지 계획일 뿐입니다

실제 릴리스(계획 커밋/게시)는 의도적으로 수행되지 않습니다. 에이전트에게 "실제로 릴리스해 달라"고 요청하면 commit_release로 연결되지만, 이는 차단되어 있으며 계획만 지원된다고 설명합니다.

테스트

pip install -e ".[test]"

# Unit tests (no network, 263 tests)
pytest tests/test_client_unit.py tests/test_server_unit.py tests/test_cli_unit.py -v

# Integration tests (hits real ALBS API, read-only, 30 tests)
pytest tests/test_integration.py -v

# All tests
pytest -v

환경 변수

변수

설명

기본값

ALBS_JWT_TOKEN

인증 작업을 위한 JWT 토큰

—

ALBS_LOG_DIR

다운로드된 로그 디렉터리

/tmp/albs-logs

Available Tools

19 tools
commit_releaseA

Commit (perform) a release. CURRENTLY BLOCKED.

This server only creates release plans. Performing the actual release (publishing packages) is intentionally disabled.

ParametersJSON Schema
NameRequiredDescriptionDefault
release_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description takes on the full burden of behavioral disclosure. It transparently states the tool is blocked and disabled, which is the key behavioral trait. However, it does not specify what happens if the tool is called (e.g., returns an error, no-op), leaving a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the critical 'CURRENTLY BLOCKED' warning, and wastes no words. Every phrase earns its place, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is blocked and there is an output schema (so return format is not needed), the description is nearly complete. It explains the purpose and the disabled state, but it does not describe the exact failure behavior (error code, message, etc.), which would fully round out the context for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it does not mention the release_id parameter at all. The parameter is a single integer with a self-explanatory name, so the lack of extra detail is not critical, but the description adds no value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's intended action ('Commit (perform) a release') and immediately signals its current non-functional status ('CURRENTLY BLOCKED'), which distinguishes it from functional sibling tools like create_release_plan. It is specific and unambiguous about what the tool is supposed to do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says the server only creates release plans and that performing the actual release is intentionally disabled. This tells the agent not to use this tool for actual releases and implies create_release_plan as the alternative, though it does not name it directly. Clear enough to guide usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_buildA

Create a new build on ALBS. Requires JWT token.

Platforms and allowed architectures are fetched dynamically from ALBS. Use get_platforms to see available options.

For EPEL builds (SRPMs from dl.fedoraproject.org/pub/epel/), the tool automatically applies EPEL-specific flavors and defaults arch to x86_64_v2.

Args: platform: Target platform (single). Use get_platforms to see available options. platforms: List of target platforms to build on (e.g. ["AlmaLinux-8", "AlmaLinux-9"]). Can be used alone or combined with platform. At least one must be provided. packages: List of package names (for git/branch) or SRPM URLs (for from_srpm). For from_tag: use "pkg_name tag_name" format or just "tag_name". At least one of packages or git_urls must be provided. git_urls: List of custom Git repository URLs to build from (e.g. ["https://github.com/user/repo.git"]). Use for repos outside git.almalinux.org/rpms. The branch parameter sets the git ref. For from_tag, use "url tag_name" format. Cannot be used with from_srpm. branch: Git branch to build from (e.g. "a8", "c9s"). from_tag: Build from git tags instead of branch. from_srpm: Build from source RPM URLs. tags: Explicit tags for each package when from_tag=True (must match packages length). arch_list: Architectures to build. Default: all for the platform (x86_64_v2 for EPEL builds). skip_tests: Disable %check phase by adding --define "__spec_check_template exit 0;" to mock definitions. add_epel_dist: Extract .elN dist suffix from each package name/URL and set it as a per-task mock definition: dist=".elN.alma_altarch". Only works with from_tag or from_srpm. Recommended for EPEL-altarch builds. beta: Enable beta flavor. secureboot: Enable SecureBoot signing. nosecureboot: Override secureboot requirement for SB packages. excludes: Space-separated packages to exclude from mock. definitions: Dict of mock definitions, e.g. {"dist": ".el9"}. linked_builds: Build IDs to link. flavors: Additional flavor names. with_opts: Mock --with options. without_opts: Mock --without options. modules: Modules to enable, e.g. ["nodejs:18"]. independent_tasks: When True, disables the per-platform sequential task chain so packages build independently / in parallel within each platform (the default ALBS behavior chains task N's start on task N-1's completion). Applied to every platform entry in the payload. Default: False.

ParametersJSON Schema
NameRequiredDescriptionDefault
betaNo
tagsNo
branchNo
flavorsNo
modulesNo
excludesNo
from_tagNo
git_urlsNo
packagesNo
platformNo
arch_listNo
from_srpmNo
platformsNo
with_optsNo
securebootNo
skip_testsNo
definitionsNo
nosecurebootNo
without_optsNo
add_epel_distNo
linked_buildsNo
independent_tasksNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It discloses authentication needs (JWT token), dynamic fetching of platforms/architectures, automatic EPEL handling, and the behavior of independent_tasks and skip_tests. It doesn't explicitly state that this is a mutating operation, but 'create' implies it. It also doesn't describe side effects or reversibility, but that's not critical for a create action. Overall it's quite transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but every sentence provides necessary information given the 22 parameters. It is structured with an intro on EPEL and an 'Args:' section with clear bullet-like formatting. It front-loads the purpose and then systematically covers each parameter. Not a single sentence is fluff, so it earns its length. Slightly less concise than ideal due to volume, but that's warranted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the high complexity (22 params, no annotations), the description is remarkably complete. It covers parameter semantics, constraints, special cases (EPEL, from_tag/from_srpm), and references get_platforms for available options. It also notes the output schema exists (though not shown), so return values don't need explanation. An agent has enough information to invoke the tool correctly without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. It provides detailed meanings for all 22 parameters, including constraints (e.g., at least one of packages/git_urls, cannot combine git_urls with from_srpm), format examples (e.g., 'pkg_name tag_name' for from_tag), and special behaviors (add_epel_dist extracts dist suffix). This is exemplary parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Create a new build on ALBS' which is a specific verb (create) and resource (build on ALBS). It also notes the JWT token requirement. It doesn't explicitly contrast with sibling tools like create_release_plan, but the action is distinct and unambiguous. One point off because it doesn't explicitly name the sibling it's not, but the purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context for when to use certain parameters (e.g., EPEL builds auto-apply flavors, from_tag vs from_srpm, uses get_platforms for available options). It explains constraints like 'Cannot be used with from_srpm' and 'At least one must be provided'. It doesn't explicitly say 'use this instead of X' but the context is clear for a create operation with no direct alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_release_planA

Create a release PLAN on ALBS. Requires JWT token.

Creates a "scheduled" release and computes which packages go to which repositories. It NEVER performs the actual release — nothing is published. Committing the plan (the real release) is intentionally not supported here.

The completed build tasks are collected automatically; the build must have completed tasks. Platform and product names are validated against ALBS — use get_platforms() and get_products() to see valid names.

Args: build_id: The build to release. platform: Target platform name (e.g. "AlmaLinux-9"). product: Target product name (e.g. "AlmaLinux", "epel-al"). Use get_products() to list available products. build_ids: Optional additional build ids to include in the same plan. whole_packages_only: When True, include only packages whose every architecture task completed (drop half-built packages). Use for a PARTIAL build superseded by a 'retry failed' build. Default: False.

ParametersJSON Schema
NameRequiredDescriptionDefault
productYes
build_idYes
platformYes
build_idsNo
whole_packages_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of disclosure. It covers auth (requires JWT token), the non-destructive nature (nothing is published), and the automatic collection of completed build tasks with the prerequisite that builds must have completed tasks. This is rich behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key facts (doesn't publish, requires JWT) are front-loaded, and the Args section is cleanly structured. It is somewhat verbose — the whole_packages_only explanation and the build-task prerequisite sentence could be tightened — but every sentence earns its place and nothing is fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 params, zero schema parameter descriptions, and no annotations, the description covers the needed ground: prerequisites (JWT, completed build tasks), validation guidance, sibling pointers for valid values, and an explanation of the advanced whole_packages_only flag. An output schema exists, so return-value documentation is not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate — and it does. Every parameter is explained: build_id, platform with a concrete example ('AlmaLinux-9'), product with examples and a pointer to get_products(), build_ids purpose, and whole_packages_only with its behavioral meaning. This fully covers the five parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb ('Create a release PLAN'), resource ('ALBS'), and mechanism ('computes which packages go to which repositories'). The contrast with the never-performed actual release clearly distinguishes it from commit_release, so an agent can tell them apart without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description is explicit that the tool never publishes and that committing the plan is intentionally unsupported here, implicitly routing the real release to commit_release. It also directs the agent to get_platforms() and get_products() for valid names and explains when whole_packages_only should be used (partial build superseded by a retry-failed build). It falls just short of naming commit_release explicitly as the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_buildA

Delete a build. CURRENTLY BLOCKED.

This operation is intentionally disabled for safety.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the operation is a delete (destructive) and that it is currently blocked, which is the most critical behavioral fact. It does not explain what happens on invocation (e.g., error vs no-op), but for a disabled tool, the blocking is the essential transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—two sentences—and front-loads the action ('Delete a build') followed by the critical blocking status. Every sentence earns its place; there is zero fluff, making it highly efficient for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is intentionally disabled, the description is practically complete: it tells the agent what the tool would do and why it cannot be used right now. The output schema exists but is irrelevant to a blocked tool, and no additional context (e.g., permissions, side effects) is necessary for correct non-use. It lacks details on error behavior, but that is minor given the blocked status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented build_id parameter. However, the description makes no mention of the parameter at all. While the parameter name is self-explanatory, the description adds no semantic value, leaving the agent to infer that build_id identifies the target build without any explicit confirmation or edge-case guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Delete a build') and clearly differentiates from siblings like create_build and sign_build. The 'CURRENTLY BLOCKED' note adds crucial context that the operation is intentionally disabled, so an agent immediately knows the tool's purpose and current status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent the tool is blocked and disabled for safety, which is a clear 'when NOT to use' directive. It does not mention alternatives, but for a disabled tool, the only actionable guidance is to avoid calling it, which is provided clearly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

download_logA

Download a build log file to local filesystem.

The file will be saved to $ALBS_LOG_DIR/<build_id>/ (default: /tmp/albs-logs/<build_id>/). After downloading, use read_log_tail to read the contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYes
filenameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the file is saved to a specific path, which is a side effect. It doesn't mention potential overwrites, permissions, or that it only downloads without reading. The description is honest but not deep; it explains the core behavior and destination without extra context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the main purpose, and includes essential path information in a clear format. It adds a relevant follow-up suggestion without unnecessary fluff. Excellent structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple download tool with two parameters and an output schema present, the description covers the core purpose, the file destination, and a recommended next step. It doesn't explain the return value, but the output schema likely covers that. It's adequate for the tool's simplicity and complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It does by showing the path pattern '$ALBS_LOG_DIR/<build_id>/<filename>', which ties both parameters to the file location. However, it doesn't explicitly define what build_id or filename represent beyond the path, and it doesn't mention any constraints or formats. Partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Download') and a specific resource ('build log file') with an explicit destination ('to local filesystem'). It also explains the file path pattern, which distinguishes it from siblings like read_log_tail and search_log. This is clear and actionable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage hint: after downloading, use read_log_tail to read contents. This implies the tool is for saving files locally rather than for immediate reading. However, it doesn't explicitly state when not to use it or compare against alternatives like list_build_logs, so it's slightly incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_build_infoA

Get build details: tasks, statuses, packages, architectures.

Returns a summary of the build including each task's status, architecture, package name, and whether it has sign tasks. Also lists any linked builds (their -br repos are mixed into the buildroot), which is needed to accurately reproduce a similar rebuild.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the output contents in detail, including task status, architecture, package name, sign-task presence, and linked builds—critical for understanding the tool's behavior. It also explains why linked builds matter (repos mixed into buildroot), which is valuable beyond a generic summary. It stops short of stating read-only nature explicitly, but that is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two paragraphs of roughly 60 words, front-loaded with the core purpose and then detailing the return contents. Every sentence adds value—the linked-builds note is especially important. No redundancy or fluff; it is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter) and that an output schema exists, the description covers the essential semantics: what is returned and a key nuance (linked builds). It does not mention error handling, authentication, or performance, but these are not critical for a read-only getter with a clear output schema. The description sufficiently positions the tool for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, build_id, is documented only as an integer in the schema with no description. The tool description does not mention build_id at all, so it adds no meaning beyond the schema. Since schema description coverage is 0%, the description should compensate, but it doesn't. The parameter is simple and self-explanatory from the tool name, preventing a score of 1, but it still falls short of providing any guidance (e.g., where to find build_id).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Get') and a clear resource ('build details') followed by a concise list of what's included: tasks, statuses, packages, architectures. It further elaborates on the summary content, distinguishing it from sibling tools like get_products or get_sign_task_status. The tool's purpose is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (when you need build details, especially the complete task list and statuses) and even mentions a specific use case (reproducing a rebuild via linked builds). However, it does not explicitly state when NOT to use it or name alternative tools, leaving some ambiguity against siblings like get_failed_tasks or get_sign_task_status that also provide build-related info.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_failed_tasksA

Get failed tasks for a build with their available log files.

Shows only tasks that failed, along with log file names. Key logs for debugging: mock_build, mock_stderr, mock_root.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden for behavioral disclosure. It states the tool shows failed tasks and log file names, which implies a read-only operation, but it does not explicitly say so. It adds useful context by naming specific key logs, which helps the agent know what to expect. However, it does not mention any side effects, permissions, or limitations. For a simple get operation, this is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no redundancy. The primary purpose is front-loaded in the first sentence, and the second sentence adds a specific, useful detail about key logs. Every word earns its place, and there is no jargon or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (one parameter) and the presence of an output schema (not shown but referenced), the description is mostly complete. It explains the scope (failed tasks) and the availability of log files, which is the key output. The mention of specific log names helps the agent understand the return format. However, it does not describe how to use the log files (e.g., download them via download_log), but that is outside the tool's direct scope. Minor improvements could include clarifying that the output includes log file names for further retrieval.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required parameter, build_id, with no description and 0% schema description coverage. The tool description does not mention build_id at all, providing no additional meaning beyond the parameter name and type. The agent is left to infer that it is the identifier for the build whose failed tasks are being retrieved. This is a significant gap given the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get failed tasks for a build with their available log files.' It specifies the resource (failed tasks) and the action (get), and clarifies that it only shows failed tasks along with log file names. This distinguishes it from siblings like list_build_logs or search_log, which are broader or different in focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to retrieve failed tasks and their logs, which is a specific debugging scenario. It even highlights 'Key logs for debugging: mock_build, mock_stderr, mock_root,' suggesting it's for debugging failed builds. However, it does not explicitly state when to use it instead of alternatives like list_build_logs or search_log, nor does it mention exclusions. The guidance is clear in context but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flavorsA

List all available platform flavors on ALBS.

Returns flavor names and IDs, useful for verifying correct flavor names before creating builds with the flavors parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that the tool returns flavor names and IDs and scopes results to 'all available' flavors, implying a safe read operation. It does not cover permissions, caching, or ordering, but for a zero-parameter list tool the behavior is reasonably self-evident.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste. The purpose is front-loaded in the first sentence, and the second sentence adds return-format and usage value without repetition. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-parameter tool with an output schema present, the description is adequately complete. It states the purpose, what it returns, and why it matters. The output schema covers return values, so nothing essential is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, which per the rubric establishes a baseline of 4. There is nothing for the description to supplement since the input schema is trivially complete at 100% coverage. No deduction applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (platform flavors) with explicit scope ('all available on ALBS'). It distinguishes itself from the sibling get_platforms by specifying 'platform flavors' rather than the ambiguous 'platforms', and from get_products by naming the flavor domain. An agent can tell exactly what this returns without opening anything else.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a concrete usage context: verifying correct flavor names before creating builds with the flavors parameter, which routes toward the sibling create_build workflow. It does not explicitly name alternatives or state when not to use the tool, so it stops just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_platformsA

Get all available platforms and their supported architectures from ALBS.

Returns the list of platforms with arch_list fetched dynamically from the build system.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It adds the useful detail that the list is 'fetched dynamically from the build system,' indicating potential variability. However, it does not explicitly confirm read-only behavior or discuss any side effects, errors, or authentication needs, which is acceptable for such a simple getter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundant language. The core purpose is front-loaded in the first sentence, and the second adds relevant context about dynamic fetching. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, has output schema), the description covers the essential points: what it returns and the dynamic nature of the data. It does not mention prerequisites or edge cases, but for a basic getter this is sufficient. The only missing element is usage differentiation, which is covered under usage guidelines.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so there is nothing to clarify. The baseline for zero parameters is 4, and the description adds nothing beyond what the empty schema already conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves all available platforms and their supported architectures from ALBS, giving a specific verb and resource. However, it does not name any sibling tools to distinguish itself, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like get_products or get_flavors. It simply states what it does without mentioning conditions or exclusions, leaving the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_productsA

List all products on ALBS. No authentication required.

Returns each product's id, name, official/community flag, and the platforms it covers. Use this to pick the target product when creating a release plan with create_release_plan.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that no authentication is required and summarizes the return structure (id, name, official/community flag, platforms). This gives the agent a clear expectation of behavior without side effects or hidden constraints. It could add notes about pagination or limits, but for a simple list tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long with no fluff. The primary action is front-loaded, followed by the return details and a direct use-case pointer. Every sentence earns its place, and the structure is ideal for quick agent intake.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list endpoint with no parameters, this description is complete. It states the purpose, the authentication requirement, the return fields, and a concrete use case. Since an output schema exists, the description does not need to detail return types, but it already does sufficiently. No critical information is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline for this dimension is 4. The description doesn't need to explain parameters, but it does elaborate on the output fields, which adds value beyond what a parameter schema would provide. Since the schema is empty, this is effectively the only semantic content, and it's clear and helpful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all products on ALBS,' which is a specific verb and resource. It also lists the fields returned (id, name, official/community flag, platforms), making its purpose unambiguous. While it doesn't explicitly name sibling tools for contrast, the specificity of 'products' and its unique output fields effectively distinguish it from the other get_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a concrete usage scenario: 'Use this to pick the target product when creating a release plan with create_release_plan.' This tells the agent when to call this tool and links it to a specific sibling, which is helpful. However, it doesn't explicitly discuss when not to use it or name alternative tools, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_release_planA

View an existing release plan. No authentication required.

Returns the release status (scheduled/in_progress/completed/failed/ reverted), product, platform, the source packages it covers, and the target repositories.

ParametersJSON Schema
NameRequiredDescriptionDefault
release_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the lack of authentication and the verb 'View' implies read-only behavior. It also lists the return content, which is useful context. No side effects or error behavior are mentioned, but for a simple read operation this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence states the purpose and a key behavioral note (no authentication), and the second lists the returned data. All information is essential and efficiently front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool, the description covers purpose, authentication, and return content. An output schema exists, so return values are already defined. It does not mention failure cases or prerequisites, but these are not critical for a straightforward view operation given the simple parameter and read-only nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, release_id, is not explicitly described beyond its name. The description implies it identifies the release plan, but does not add meaning beyond the schema's field name. With 0% schema description coverage, the description should compensate more, yet the parameter is self-explanatory, so a middle score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'View' and the resource 'an existing release plan', which is distinct from sibling tools like create_release_plan and commit_release. It also enumerates the returned fields, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'View an existing release plan' clearly indicates this is a read operation for inspection, contrasting with creation or modification tools. However, it does not explicitly mention when not to use it or name alternative tools, so the guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sign_keysA

Get available sign keys from ALBS. Requires JWT token.

Returns key ID, name, keyid (GPG fingerprint short), and associated platform IDs needed for sign_build.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explicitly discloses the authentication requirement (JWT token) and the read-only nature of the operation ('Get', 'Returns'), and clarifies that keyid is a short GPG fingerprint. For a simple lookup tool this covers the key behavioral ground; minor gaps remain (error behavior with invalid JWT, pagination), but none are critical for a zero-parameter listing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences with no filler — purpose and auth prerequisite are front-loaded, followed by the return-field breakdown. It is efficient and every line earns its place, given there is no output schema content shown here to rely on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter lookup tool with an output schema present, the description covers purpose, source (ALBS), auth prerequisite, return fields with semantic clarification, and workflow linkage (needed for sign_build). Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the description to explain — the baseline of 4 applies. The description instead usefully explains what the operation returns, which contains the keyid semantics (GPG fingerprint short) that the output schema alone might not make clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb, resource, and source ('Get available sign keys from ALBS'), and enumerates the returned fields (key ID, name, keyid/GPG fingerprint, platform IDs). The tool is clearly distinguishable from siblings like get_sign_task_status (task status) and get_platforms — none of the other get_* tools retrieve signing keys.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names a prerequisite (JWT token) and gives workflow context: the returned keys and platform IDs are 'needed for sign_build', so an agent understands this is a prerequisite step before signing. It does not explicitly contrast with alternatives or state when NOT to use it, but the sign_build tie-in provides clear when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sign_task_statusA

Get the status of sign tasks for a build.

Use this after sign_build to check whether signing completed or failed. Returns each sign task's ID, status (idle/in_progress/completed/failed), and sign key ID. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the return shape (ID, status values including idle/in_progress/completed/failed, and sign key ID) and notes that no authentication is required. For a read-only operation this is adequate, but it does not mention error conditions, potential latency, or that it is non-mutating. The description adds value beyond the schema by clarifying the auth requirement and the status enumerations, but lacks depth on failure or edge-case behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences: purpose, usage timing, and return contents. It front-loads the primary action and includes no filler. Every sentence contributes distinct information—no redundancy with the schema or title. This is an exemplar of efficient writing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only status endpoint with a single parameter and an existing output schema, the description is largely complete. It covers the purpose, usage context, return contents, and authentication. It does not detail error scenarios or pagination, but those are less critical for a simple getter. The presence of an output schema reduces the need to describe the full return structure. Missing information is minor and unlikely to cause incorrect invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter, build_id, with 0% schema description coverage. The description says 'for a build' and 'after sign_build', which implicitly identifies build_id as the build to inspect. However, it does not explicitly explain that build_id is required, its format, or that it must correspond to a previously created build. Since there is only one parameter and the name is self-explanatory, the description partially compensates for the schema gap, but it could be more explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves the status of sign tasks for a build, using a specific verb ('Get') and resource ('sign tasks'). It also provides context that this is typically used after sign_build, which helps differentiate it from other get_* tools like get_build_info or get_products. However, it doesn't explicitly state what it is not (e.g., not for general build info), but the name and description make the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this after sign_build to check whether signing completed or failed.' This gives a clear when-to-use condition tied to the sign_build workflow. It does not explicitly mention alternatives or exclusions, but among the sibling tools, the context is enough to know this is for signing status. The directive is direct and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_build_logsC

List all available log files for a build from the server.

Shows all log and config files stored in Pulp for this build.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry behavioral transparency. It mentions 'List' implying a read-only operation, but does not disclose pagination, permission requirements, or whether the response includes only metadata. The phrase 'stored in Pulp' adds a bit of context but is insufficient to inform the agent about side effects or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, but the second sentence largely repeats the first ('List all available log files' vs 'Shows all log and config files'). It could be condensed to a single unambiguous sentence. While it is front-loaded with the main verb and resource, the redundancy and lack of extra detail make it only moderately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with an output schema, the description gives minimal context. It does not explain what types of log files are included, how to interpret the output, or any error conditions. The mention of 'from the server' and 'stored in Pulp' provides minor environment context, but overall the tool lacks sufficient detail for an agent to anticipate results or handle edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has a single required parameter, build_id (integer), with zero description coverage. The tool description does not mention build_id at all, leaving its meaning, format, or constraints entirely to the schema. With 0% coverage, the description must compensate, but it fails to do so.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'log files for a build'. The second sentence clarifies scope by specifying 'log and config files stored in Pulp for this build'. This distinguishes it from sibling tools like download_log, read_log_tail, and search_log, which operate on content rather than simply listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives. It states what it does but not when an agent should choose it over siblings like search_log or get_build_info. No exclusions or preferred scenarios are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_log_rangeA

Read a specific range of lines from a build log.

Use this to widen the window around a line number that search_log reported, or to inspect an earlier section. Reads forward from start_line; a range too large for max_chars stops early and tells you the call to continue with, so nothing is silently lost.

Each line is clipped to max_line_chars (0 = verbatim). The log is downloaded automatically if not already on disk — no need to call download_log first.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYes
end_lineYes
filenameYes
max_charsNo
start_lineYes
max_line_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavioral traits: it reads forward from start_line, stops early when exceeding max_chars and provides a continuation call so nothing is lost, clips lines to max_line_chars (0 = verbatim), and auto-downloads the log if missing. This is exemplary transparency for a file-read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight paragraphs, each serving a purpose: purpose, usage/behavior, and parameter details. Front-loaded with the main action, zero redundant phrasing, and every sentence adds value. Ideal structure for agent consumption.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema (which covers return details), the description covers all necessary context: usage scenarios, parameter behaviors, auto-download, early termination, and a hint about continuation. An agent has enough to invoke it correctly without ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains start_line directionality, the max_chars truncation behavior with continuation, and max_line_chars semantics (0=verbatim). It does not explicitly define end_line inclusivity or the exact format of the continuation call, but the core parameters are meaningfully clarified. Strong compensation for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb+resource pairing ('Read a specific range of lines from a build log') and immediately distinguishes its role from nearby siblings: it explicitly mentions 'search_log' and positions itself as a window-widening or earlier-section reader. This makes the intended use unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('Use this to widen the window around a line number that search_log reported, or to inspect an earlier section') and even excludes an alternative ('no need to call download_log first'). It does not name read_log_tail as a contrast for tail-reading, but the context of 'earlier section' implies the distinction. Slight room for more explicit alternatives, but strong overall.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_log_tailA

Read a page of a build log from the end, and page upward from there.

Good for how the build terminated (RPM build errors:, the mock exception). To FIND a compile error, use search_log — the end of a make -j log holds only the wrapper error.

One call returns as many lines as fit in max_chars (~10k tokens), up to lines lines. That budget is what sizes the page: the same budget is about 165 lines of a mock_build log or 350 of a mock_root, so a fixed line count would be wrong for one of them. The result ends with the exact call for the page above it — before_line=<first line shown> — so walking a log bottom to top needs no arithmetic and skips nothing.

before_line=N reads the page ending at line N-1. Each line is clipped to max_line_chars (0 = verbatim); keep the clip on, mock_build lines can be several KB of gcc flags. The log is downloaded automatically if not already on disk — no need to call download_log first.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNo
build_idYes
filenameYes
max_charsNo
before_lineNo
max_line_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the burden and does so richly. It discloses the paging budget logic (max_chars/lines), the self-referencing before_line mechanism for upward traversal, clipping behavior, and automatic log download. These are non-obvious behaviors critical for correct invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense yet efficient. It front-loads the purpose, then usage guidance, then parameter mechanics, with each sentence serving a distinct purpose. The note about different line counts adds practical value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex paging tool, the description covers all necessary aspects: direction, budgets, paging technique, clipping, and auto-download. It also touches on the return format by describing the 'result ends with the exact call for the page above it', and the output schema exists to formalize the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description compensates entirely. It explains max_chars as the page-sizing budget, lines as a cap, before_line as the page boundary, and max_line_chars with clipping details. build_id and filename are self-evident from context, so no additional explanation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence, 'Read a page of a build log from the end, and page upward from there', states a specific verb, resource, and direction. It also explicitly contrasts itself with search_log ('To FIND a compile error, use search_log'), making its unique purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use it ('Good for how the build terminated') and when not to ('To FIND a compile error, use search_log'). It also notes the prerequisite is handled automatically ('no need to call download_log first'), covering both usage context and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_buildsA

Search builds on ALBS. Returns a page of builds.

Each build line carries its task count, failed count, and release state, then the packages as full NVRs (mingw-glib2-2.89.2-1.el10) so a version question can be answered without opening the build. When project is set, the packages that matched it are listed on their own match: line — the remaining ones are summarised and may be truncated.

Args: page: Page number (default 1). project: Filter by project/package name. is_running: Filter by running status.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
projectNo
is_runningNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It details the output format (task count, failed count, release state, packages as NVRs), explains behavior when `project` is set (matched packages on a `match:` line, others summarized and possibly truncated), and notes pagination. This gives a clear picture of what the tool returns and its limitations, though it does not explicitly mention read-only status or auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: it opens with a clear one-line purpose, then explains the output format (useful context), and ends with a concise arg list. It is a bit detailed on output shape, but it is relevant and earns its place. The main purpose is front-loaded, and there is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 optional parameters and an output schema, the description covers the essentials: pagination, filtering, and output structure. It also anticipates follow-up questions by providing NVRs and match lines. Minor omissions like error handling or result limits do not detract significantly, making it complete for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% (no descriptions in schema). The description compensates fully with an Args section: 'page: Page number (default 1)', 'project: Filter by project/package name', and 'is_running: Filter by running status.' This adds meaning and clearly explains each parameter beyond the raw type and default, enabling correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Search' and the resource 'builds' on ALBS, and notes it 'Returns a page of builds.' This is specific and distinguishes it from sibling tools like get_build_info (which likely retrieves a single build) and create_build (which creates). The mention of pagination and filtering further clarifies its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: when you need to search or filter builds. However, it does not explicitly state when to use this tool versus alternatives (e.g., when you have a specific build ID, use get_build_info). No exclusions or alternatives are named, leaving the agent to infer which tool fits a given scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_logA

Find the failure in a build log: grep it and return each hit with context.

START HERE when investigating a failed build — do not read tails first. In a parallel make -j log the real compile error sits hundreds of lines above the end, so the tail shows only make: *** Error 2: the symptom, not the cause. This finds the cause in one call.

pattern is a Python regex; omit it to use the built-in build-failure signatures (compiler/link errors, failed patch hunks, unresolved BuildRequires, RPM packaging errors, %check failures, OOM/network trouble). Matched lines are prefixed >>> and every line is numbered, so a hit's number can be fed straight to read_log_range to see more.

Only the first max_matches hits are reported — the first error is the root cause and the rest are cascades — but the header counts all of them. Lines are clipped to max_line_chars around the match (0 = verbatim, needed when quoting an exact multi-KB command line). The log is downloaded automatically if not already on disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNo
beforeNo
patternNo
build_idYes
filenameYes
max_charsNo
max_matchesNo
max_line_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full burden of behavioral disclosure. It reveals that only the first max_matches hits are returned (while the header counts all), that lines are clipped per max_line_chars, that the log is auto-downloaded, and that a default pattern set is used when pattern is omitted. These are concrete behavioral traits beyond the schema, with no contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by a concise rationale and then parameter-specific behaviors. Every sentence contributes—whether distinguishing from siblings, explaining the root-cause logic, or detailing output formatting. There is no filler, and the structure makes scanning easy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters, no annotations, and an output schema (which shifts return-detail responsibility), the description is remarkably complete. It covers the primary use case, explains why this tool is the correct entry point, details the output format (>>> prefix and line numbers), and provides sibling routing. No critical information an agent needs to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains the meaning and behavior of pattern (with defaults), max_matches (first N hits only), and max_line_chars (clipping, including 0=verbatim). It implies before/after provide context but does not explicitly describe them. This leaves a small gap, but the most decision-relevant parameters are covered, and the description adds substantial value over the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Find the failure in a build log: grep it and return each hit with context.' It explicitly distinguishes itself from siblings with 'START HERE when investigating a failed build — do not read tails first' and explains why, setting it apart from read_log_tail. This is a clear, precise purpose that an agent can act on without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'START HERE when investigating a failed build' and advises against reading tails first. It also names the alternative tool (read_log_range) for drilling into a specific hit, and explains why this tool is the right first step. This is complete usage routing with no reliance on inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_buildA

Sign a build on ALBS. Requires JWT token.

Use get_sign_keys to see available sign key IDs.

Args: build_id: The build ID to sign. sign_key_id: Sign key ID (default: 4). Use get_sign_keys to list.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYes
sign_key_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the JWT requirement and the default sign_key_id, which is helpful. But it does not describe side effects, reversibility, or the result of signing (e.g., what occurs on the build), leaving behavioral impact ambiguous.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the core purpose, then prerequisites, then parameter details. No wasted words, though parameter explanation is a bit repetitive (mentions get_sign_keys twice). Still, structure is effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation tool with an output schema (indicated by context), the description covers essentials: purpose, auth requirement, default parameter, and a reference to a supporting tool. It does not explain the signing semantics in depth, but given the output schema exists and the tools are targeted, this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must define parameters. It explains build_id as 'the build ID to sign' and sign_key_id with its default and a pointer to get_sign_keys, adding meaning beyond the schema titles. This compensates well for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ('Sign a build on ALBS') and mentions the JWT token requirement. It does not explicitly differentiate from siblings like get_sign_task_status or create_build, but 'sign' is a distinct action understood without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit prerequisites (JWT token required) and directs the agent to get_sign_keys for available key IDs, which is useful context. However, it does not mention when not to use this tool or how it fits with sibling actions like create_build or commit_release, so it falls short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 19 tool updatesv0.1.0
    • First observedcommit_release
    • First observedcreate_build
    • First observedcreate_release_plan
    • First observeddelete_build
    • First observeddownload_log
    • First observedget_build_info
    • First observedget_failed_tasks
    • First observedget_flavors
    • First observedget_platforms
    • First observedget_products
    • First observedget_release_plan
    • First observedget_sign_keys
    • First observedget_sign_task_status
    • First observedlist_build_logs
    • First observedread_log_range
    • First observedread_log_tail
    • First observedsearch_builds
    • First observedsearch_log
    • First observedsign_build

TDQS

A3.9/5.0

Scored across 19 tools

Disambiguation5/5

Each tool targets a distinct resource or action: get_* tools each fetch a specific entity (products, platforms, keys, flavors, release plans, build info), and log tools (download, search, tail, range) have clearly separated purposes. Even the two potentially overlapping tools (get_build_info vs get_failed_tasks) are distinct—one gives an overview, the other focuses specifically on failures. No two tools could be confused.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., get_build_info, create_build, read_log_tail, search_builds). Verbs are descriptive and nouns reference the subject clearly. There are no mixed conventions or vague names like 'process' or 'do_thing'.

Tool Count4/5

At 19 tools, the server is on the heavier side but each tool serves a clear function within the build system domain. The count is justified by the breadth of operations (create/build, sign, release planning, log inspection, search). It does not feel bloated, though it is slightly above the typical 'sweet spot' of 10-15 tools.

Completeness5/5

The tool surface covers the full build lifecycle: creation, status retrieval, signing, failed-task inspection, log analysis, release plan creation, and search. Log tools are particularly thorough (search, tail, range, list). The only missing operation—commit_release—is explicitly blocked for safety, not an oversight. There are no dead ends; every workflow has the necessary supporting tools.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for intelligent Linux kernel configuration management and building. Enables AI assistants to generate, manage, and optimize kernel configurations and build kernels with comprehensive error detection.
    7
    GPL 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP server that bridges AI assistants with the SUSE Linux ecosystem, enabling safe access to openSUSE Wiki, OBS, and repositories for system management.
    22
    1
    GPL 3.0