albs-mcp
Officialalbs-mcp
MCPサーバーとCLI for AlmaLinux Build System (ALBS)。
AIコーディングアシスタントにALBSへの直接アクセスを提供します — ビルド失敗の調査、ビルドの作成、パッケージの署名など、すべて自然言語で行えます。
2つの使用方法:
MCPサーバー | CLI + スキル | |
仕組み | AIがMCPプロトコル経由でツールを呼び出す | AIがシェル経由で |
セットアップ | MCP設定に追加 |
|
最適な用途 | 専用のALBSワークフロー | 軽量セットアップ、MCPコンテキストの汚染を回避 |
AIなしで動作 | いいえ | はい( |
できること
トークンなし(読み取り専用)
ビルド失敗の調査 — 主なユースケースです。エージェントにビルドIDを与えると、ログから失敗シグネチャ(
search_log)をgrepし、正確なファイル、行、診断情報を特定して、その周辺のコンテキストを広げます。行オフセットを推測する必要も、10万行以上のログファイルにトークンを費やす必要もありません。ビルド詳細の取得 — すべてのタスク、パッケージ、アーキテクチャ、署名タスクのステータス。
ビルドの一覧と検索 — 最近のビルドを閲覧し、パッケージ名やステータスでフィルタリング。
プラットフォームの取得 — すべてのプラットフォームとそのサポートアーキテクチャの動的に取得されるリスト。
ログのダウンロードと読み取り — 任意のビルドの任意のログファイル: grep(
search_log)、下からページング(read_log_tail)、または行範囲の読み取り。読み取りが肥大化することはありません: 各行は500文字に切り詰められ、結果全体は40k文字に制限されます(max_line_chars=0/max_chars=0で解除)。そのため、1行が数KBのコンパイラフラグになるログでも、巨大なブロブではなく、正確に結合されるページで返されます。読み取り時、ログがまだディスクにない場合は自動的にダウンロードされます。署名ステータスの確認 — ビルドの署名タスクが完了したか失敗したかを確認。
製品の一覧 — すべてのリリースターゲット(製品)とそのプラットフォーム、公式/コミュニティフラグ、ID。
リリースプランの表示 — 既存のリリースのステータス、ソースパッケージ、ターゲットリポジトリ。
JWTトークンあり(認証済み)
ビルドの作成 — パッケージ、プラットフォーム、ブランチ/タグ/SRPMを指定。単一ビルドで複数プラットフォームをサポート(例: AlmaLinux-8 + AlmaLinux-9)。アーキテクチャは上書きしない限り各プラットフォームの全リストがデフォルト。
git.almalinux.org以外のリポジトリ(例: GitHub、GitLab)のカスタムGit URLをサポート。mkbuild.pyのすべてのオプションをサポート: リンクビルド、mock定義、除外、フレーバー、secureboot、モジュール、with/without。ビルドの署名 — 選択したキーで署名タスクを作成。
署名キーの一覧 — 利用可能なキーをIDとプラットフォームマッピング付きで表示。
リリースプランの作成 — 選択したプラットフォーム+製品を対象に、ビルドのスケジュールされたリリースプラン(どのパッケージがどのリポジトリに行くか)を作成。実際のリリースは決して実行されません — これはプランを作成するだけです。コミット/公開は意図的にブロックされています。
ビルドの削除 — 安全性のため意図的にブロック。
ログの種類
ALBSはビルドタスクごとに複数のログファイルを生成します。デバッグに重要なものは次のとおりです:
ログ | 内容 |
| chrootセットアップ、依存関係の解決。最初に確認 — 依存関係が失敗した場合、他は何も重要ではありません。 |
| ビルドプロセスからのstderr出力。多くの場合、最も明確なエラーメッセージが含まれています。 |
| 完全なビルドログ(10万行以上になる可能性)。rpmbuildの完全な出力 — コンパイルエラーが存在する場所。 |
| Mockの状態遷移。 |
| ビルドノードのハードウェア情報。 |
| chrootにインストールされたパッケージのリスト。 |
| ALBSレベルのタスクログ(タスク割り当て、アップロード)。 |
| ビルドに使用されたMock設定。 |
Related MCP server: Kerneldev MCP
インストール
pip install git+https://github.com/AlmaLinux/albs-mcp.gitこれにより、MCPサーバー(albs-mcp)とCLI(albs)の両方がインストールされます。
認証
JWTトークンは次の場所から読み取られます(順にチェック):
ALBS_JWT_TOKEN環境変数~/.albs/credentialsファイル(tokenキーを持つPython dict):
{"token": "eyJ..."}トークンがない場合、MCPとCLIの両方が読み取り専用モードで動作します。
実際のトークンをコミットしないでください。 CLI引数ではなく、環境変数または
~/.albs/credentialsを使用してください。
セットアップオプション1: MCPサーバー
MCPクライアント設定(例: mcp.jsonまたは同等のもの)に追加:
{
"mcpServers": {
"albs": {
"command": "albs-mcp"
}
}
}セットアップオプション2: CLI + スキル
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 --helpCLIはスタンドアロンでも動作します — 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を実行してください。
ツールリファレンス
読み取り専用(認証なし)
ツール | 説明 |
| すべてのプラットフォームとそのアーキテクチャ。ALBSから動的に取得 |
| ビルド概要: 各タスクのステータス、アーキテクチャ、パッケージ、git ref、ログ数、さらにSecure Boot状態、フレーバー、リンクされたビルド |
| 失敗したタスクのみをログファイルとともに一覧表示。重要なログは★でマーク |
| サーバー上のビルドで利用可能なすべてのログ/設定ファイル |
| ログファイルをローカルディスクにダウンロード( |
| 失敗時はここから: ログをビルド失敗シグネチャ(または独自の正規表現)でgrepし、行番号とコンテキスト付きのすべてのヒットを取得。必要に応じて自動ダウンロード |
| ログの末尾から1ページ読み取り、そこから上にページング( |
| ログから特定の行範囲を読み取り(例: |
| ビルドをページ単位で閲覧し、パッケージ名または実行状態でフィルタリング — 各パッケージをNVRとビルドのリリース状態として表示。 |
| ビルドの署名タスクのステータス(idle/in_progress/completed/failed)— |
| すべての製品(リリースターゲット)を一覧: ID、名前、公式/コミュニティ、プラットフォーム |
| 既存のリリースを表示: ステータス、ソースパッケージ、ターゲットリポジトリ |
認証済み(JWT必須)
ツール | 説明 |
| 署名キーを一覧: ID、名前、GPGキーID、アクティブ状態、プラットフォームマッピング |
| ビルドを作成: パッケージまたはカスタムGit URL + プラットフォーム + ブランチ/タグ/srpm、すべてのmockオプション付き |
| 選択したキーでビルドの署名タスクを作成 |
| ビルド + プラットフォーム + 製品のスケジュールされたリリースプランを作成。実際のリリースは決して実行しません — プランのみ |
| ブロック — 実際のリリースの実行は無効。プランのみサポート |
| ブロック — 安全性のため無効 |
プロンプト
MCPプロンプトはユーザーが呼び出すワークフローのエントリポイントです。Claude Codeなどのクライアントではスラッシュコマンド(/mcp__albs__<name>)として表示されます。ユーザーがトリガーし、エージェントはトリガーしません。
Prompt | Arguments | Description |
|
| ビルド ID のビルド失敗調査ワークフローを起動します。「なぜビルド N は失敗したのか?」と尋ねるのと同等ですが、1 ステップのパラメータ化されたコマンドです。 |
|
| ビルド ID のリリース計画ワークフローを起動します(プラットフォームの確認、プロダクトの選択、計画の作成)。実際のリリースは実行しません。 |
例(Claude Code):
/mcp__albs__investigate_build 52679
/mcp__albs__release_plan 52679investigate_build は調査ワークフロー(get_build_info → get_failed_tasks → 主要なログのダウンロード/読み取りを順に実行)に展開され、ビルド ID によってパラメータ化されます。release_plan はリリース計画ワークフロー(get_build_info → get_products → create_release_plan)に展開され、明示的に計画の時点で停止します。コミット/公開は決して行いません。
例: 失敗したビルドを調査する
エージェントに依頼します: 「ビルド 52679 で何が問題だったのか?」
エージェントは次のことを行います:
get_build_info(70368)— i686 タスクだけが失敗し、他の 7 つのアーキテクチャはビルドされたことを確認しますget_failed_tasks(70368)— ログファイルを取得し、★ は重要なものを示しますsearch_log(70368, "mock_build.441500.1785274367.log")— 936 行 / 600 KB のログを grep し、原因をコンテキスト付きで 1 回の呼び出しで返します:>>> 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 1search_log(70368, "mock_root.441500.1785274367.log")— 一致なし: chroot と依存関係は問題なかったため、これは依存関係の失敗ではありません次のように報告します: 「
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 を要求すると、代わりに 167 KB の gcc コマンド行が返され、呼び出し側の結果サイズ制限を超える可能性があります。search_log は回答を先頭に含む 4 KB を返します。
例: ビルドを作成する
エージェントに依頼します: 「ブランチ 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 のリリース計画を作成してください。」
エージェントは次のことを行います:
get_build_info(62316)— プラットフォームと、ビルドに完了したタスクがあることを確認しますget_products()— ターゲットを選択できるようにプロダクトを一覧表示します(例:AlmaLinux)create_release_plan(build_id=62316, platform="AlmaLinux-8", product="AlmaLinux")— 完了したビルドタスクを収集し、プラットフォーム/プロダクト名を ID に解決して、スケジュール済みの 計画を作成します計画(ステータス、ソースパッケージ、ターゲットリポジトリ)を報告し、何も公開されていないことを明確にします。これは単なる計画です
実際のリリース(計画のコミット/公開)は意図的に実行されません。「実際にリリースして」とエージェントに依頼すると
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環境変数
Variable | Description | Default |
| 認証済み操作用の JWT トークン | — |
| ダウンロードしたログ用のディレクトリ |
|
Available Tools
19 toolscommit_releaseA
Commit (perform) a release. CURRENTLY BLOCKED.
This server only creates release plans. Performing the actual release (publishing packages) is intentionally disabled.
| Name | Required | Description | Default |
|---|---|---|---|
| release_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| beta | No | ||
| tags | No | ||
| branch | No | ||
| flavors | No | ||
| modules | No | ||
| excludes | No | ||
| from_tag | No | ||
| git_urls | No | ||
| packages | No | ||
| platform | No | ||
| arch_list | No | ||
| from_srpm | No | ||
| platforms | No | ||
| with_opts | No | ||
| secureboot | No | ||
| skip_tests | No | ||
| definitions | No | ||
| nosecureboot | No | ||
| without_opts | No | ||
| add_epel_dist | No | ||
| linked_builds | No | ||
| independent_tasks | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| product | Yes | ||
| build_id | Yes | ||
| platform | Yes | ||
| build_ids | No | ||
| whole_packages_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes | ||
| filename | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| release_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes | ||
| end_line | Yes | ||
| filename | Yes | ||
| max_chars | No | ||
| start_line | Yes | ||
| max_line_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | ||
| build_id | Yes | ||
| filename | Yes | ||
| max_chars | No | ||
| before_line | No | ||
| max_line_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| project | No | ||
| is_running | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| before | No | ||
| pattern | No | ||
| build_id | Yes | ||
| filename | Yes | ||
| max_chars | No | ||
| max_matches | No | ||
| max_line_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| build_id | Yes | ||
| sign_key_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
19 tool updates
v0.1.0- First observed
commit_release - First observed
create_build - First observed
create_release_plan - First observed
delete_build - First observed
download_log - First observed
get_build_info - First observed
get_failed_tasks - First observed
get_flavors - First observed
get_platforms - First observed
get_products - First observed
get_release_plan - First observed
get_sign_keys - First observed
get_sign_task_status - First observed
list_build_logs - First observed
read_log_range - First observed
read_log_tail - First observed
search_builds - First observed
search_log - First observed
sign_build
TDQS
Scored across 19 tools
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.
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'.
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.
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
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server and CLI for iOS development — build, test, automate, and diagnose from any AI agent or terminal.1MIT
- AlicenseNot gradedqualityDmaintenanceAn 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.7GPL 2.0

evergreen-mcp-serverofficial
FlicenseAqualityBmaintenanceMCP server for MongoDB's Evergreen CI/CD platform, enabling AI assistants to manage projects, analyze builds, and troubleshoot failures via natural language.83-- AlicenseAqualityDmaintenanceMCP server that bridges AI assistants with the SUSE Linux ecosystem, enabling safe access to openSUSE Wiki, OBS, and repositories for system management.221GPL 3.0