cicd-aiops
CICD AIops
Governed AI-ops for self-managed GitLab and self-hosted Gitea.
cicd-aiops is for the team running its own CI/CD forge — a GitLab instance
or a Gitea server on your hardware, in your lab, behind your VPN — who want an
AI agent that can answer "why did the pipeline fail?", "which runner is
wedged?", "where did 40 GB of artifact storage go?" and "what work went
stale?" and then act (retry, cancel, pause, delete, protect) only through
an audited, budgeted, risk-tiered, undo-recorded governance harness. It is not
a SaaS integration: it speaks the GitLab REST API v4 and the Gitea API v1
directly against your server, with credentials encrypted at rest.
Verification status: modelled from each project's public API docs and exercised against mocked HTTP responses; there is no recorded end-to-end run against a live server yet.
cicd-aiops doctoris the fastest live check — seedocs/VERIFICATION.md.
Routing: Do NOT use this for Kubernetes deploy state — use k8s-aiops. This tool ends at the CI/CD server's API (pipelines, runners, artifacts, repo hygiene).
What this tool does, and does not, decide
It delivers CI/CD operations — reads and writes — accurately and efficiently, and records every one of them. It does not decide whether a write is allowed to happen. That is the agent's judgement, or the permission of the token you connect it with: give it a GitLab/Gitea access token without write scope and the writes fail at the server — the place that actually owns the permission.
So there is no read-only switch, no policy file, no approval gate to configure.
The one thing the tool guarantees is that nothing is silent: every call, over
MCP and over the CLI alike, lands an audit row in ~/.cicd-aiops/audit.db,
and destructive writes still capture their before-state and record an inverse
where one exists.
Each tool declares a
risk_level, kept in agreement with its[READ]/[WRITE]documentation tag by a test, and carried into the audit row as a descriptive tier — so a reviewer can see at a glance that a row was a high-risk delete. It is a label, not a gate.
Running a smaller / local model? See agent-guardrails.md — it lists the guardrails this tool enforces for you (so you don't spend prompt budget restating them) and gives a ready-made system prompt for what's left.
Related MCP server: observability-aiops
Quick start
As a Claude Code plugin
One install gives an agent both the skill and the MCP server:
/plugin marketplace add AIops-tools/marketplace
/plugin install cicd-aiops@aiops-toolsThe MCP server is fetched with uv and pinned to the
package version this plugin declares, so an audit row can be traced back to the
code that wrote it. Credentials are still configured with cicd-aiops init — see below.
As a CLI or standalone MCP server
uv tool install cicd-aiops # or: pip install cicd-aiops
cicd-aiops init # wizard: base URL + token (encrypted) + TLS verify
cicd-aiops doctor # connectivity + token-scope probe per target
cicd-aiops overview # version, identity, projects, runners at a glanceThen the interesting parts:
cicd-aiops rca pipelines dev/api # classify recent failed pipelines
cicd-aiops rca runners # offline/stale runners, tag saturation
cicd-aiops rca storage # artifact/repo bloat, reclaimable bytes
cicd-aiops rca stale dev/api # stale MRs/branches, protection gaps
cicd-aiops pipelines retry dev/api 42 --dry-run
cicd-aiops artifacts delete dev/api --older-than-days 30 --dry-runEvery write has --dry-run and a double confirmation, and executes through
the same governed path the MCP tools use — so CLI writes are audited too.
Support scope
Surface | GitLab (REST v4, self-managed) | Gitea (API v1, self-hosted) |
Server version + token identity | ✅ | ✅ |
Projects + storage statistics | ✅ ( | ✅ (repo |
Pipelines / runs, jobs, trace tails | ✅ | ✅ (Actions runs/jobs/logs) |
Runner fleet (list/detail) | ✅ | ❌ teaching error (no API v1 equivalent) |
Merge/pull requests, branches, protection, releases | ✅ | ✅ |
Artifact inventory | ✅ (via jobs) | ✅ (Actions artifacts) |
| ✅ | ❌ teaching error |
| ✅ | ❌ teaching error |
| ✅ | ❌ teaching error |
| ✅ | ✅ |
Where a platform lacks a surface, the platform registry raises a teaching error naming the resources that are available — the agent learns instead of hitting a mystery 404. GitLab.com / Gitea Cloud SaaS accounts are out of scope by design: this tool targets self-managed instances.
Flagship analyses (the reason this tool exists)
pipeline_failure_rca— pulls recent failed pipelines with failed-job trace tails and classifies each failure: test-failure / dependency-network / runner-timeout / oom / script-error, with the matched evidence, a cause, and an action per pipeline.runner_health_rca— offline/stale/paused runners (contact-age threshold), jobs queued past a threshold, and per-tag saturation (queued jobs vs online runners).artifact_storage_bloat_analysis— projects ranked by repo + artifact bytes, expired-but-kept artifacts, and a reclaimable-bytes estimate that feeds straight intodelete_artifacts --dry-run.stale_work_audit— merge/pull requests idle past N days, branches with no commits for N days, and protection gaps (unprotected default branch, force-push allowed).
All four are transparent heuristics: thresholds are named parameters and every flag carries its numbers.
Governance (built in, always on)
Every MCP tool and every CLI write runs through the vendored harness in
cicd_aiops/governance/. It records; it does not authorize (see above).
Audit — every call (params, result, status, duration, risk tier, and any operator-supplied approver/rationale) is logged to
~/.cicd-aiops/audit.db(relocatable viaCICD_AIOPS_HOME). The CLI writes the same row the MCP path does — there is no unaudited entry point.Runaway guard — a safety backstop, not an authorization gate: the same call hammered in a tight loop trips a circuit breaker so a stuck agent can't burn unbounded calls/time. Disable with
CICD_RUNAWAY_MAX=0; optional hard ceilings viaCICD_MAX_TOOL_CALLS/CICD_MAX_TOOL_SECONDS.Undo — reversible writes record a replayable inverse in
~/.cicd-aiops/undo.db, built from the fetched before-state:pause_runner⇄resume_runner, andupdate_branch_protectionreplays the prior settings. Irreversible writes (retry_pipeline,cancel_pipeline,delete_artifacts) recordpriorState(status / bytes+count) instead.Risk tier — a descriptive label on the audit row derived from
risk_level(readslow; mutating writesmedium;delete_artifactshigh); it gates nothing.Dry-run everywhere — every write takes
dry_run=True(MCP) /--dry-run(CLI) and previews without calling the server.Sanitize — all server-returned text is folded through an injection-safe normaliser (bounded strings, capped depth) before an agent sees it; all path parameters are percent-encoded so an identifier can never rewrite a URL.
Secrets
Tokens live in ~/.cicd-aiops/secrets.enc — Fernet-encrypted, key derived
from a master password via scrypt. Never plaintext on disk. Set
CICD_AIOPS_MASTER_PASSWORD for non-interactive/MCP use, and manage with
cicd-aiops secret set|list|remove|migrate. TLS verification defaults ON
(the init wizard asks before turning it off for lab certs).
MCP server
26 governed tools (20 reads incl. the four flagship analyses, 6 writes).
{
"mcpServers": {
"cicd-aiops": {
"command": "uvx",
"args": ["--from", "cicd-aiops", "cicd-aiops-mcp"],
"env": {
"CICD_AIOPS_MASTER_PASSWORD": "your-master-password"
}
}
}
}Env-block caveat: MCP clients launch the server with a minimal environment — your shell profile is not sourced. Anything the server needs (
CICD_AIOPS_MASTER_PASSWORD,CICD_AIOPS_HOME, and any optionalCICD_AUDIT_APPROVED_BYaudit annotation) must be set in theenvblock above, not in~/.zshrc.
Alternatively: cicd-aiops mcp (same server, CLI entry point).
Configuration
~/.cicd-aiops/config.yaml (the wizard writes this):
targets:
- name: gl1
platform: gitlab # or: gitea
base_url: https://git.example.com
verify_ssl: true # default ON; set false only for lab certsThe token for each target is stored encrypted under the target's name.
Relocate all state (config, audit, undo, secrets) with CICD_AIOPS_HOME.
Development
uv sync
uv run pytest -q
uv run ruff check .缺功能?
缺功能提 issue/PR 欢迎留言 — if a GitLab/Gitea surface you need is missing (runner administration on newer Gitea, per-job retry, scheduled pipelines, group-level rollups…), open an issue or PR at https://github.com/AIops-tools/CICD-AIops. The platform registry is designed so a new resource is one path-map entry, not a refactor.
License
MIT. GitLab is a trademark of GitLab Inc.; Gitea is a trademark of its project owners. This project is independent and not affiliated with either.
Available Tools
28 toolsartifact_storage_bloat_analysisA
[READ] Rank projects by storage; estimate reclaimable artifact bytes.
The flagship storage RCA: pulls project storage statistics, ranks projects by repo + artifact bytes, counts expired-but-kept artifacts and artifacts older than old_artifact_days, and estimates the reclaimable bytes per project. Every ranking carries its byte numbers. Pass 'projects' (and optionally 'artifacts_by_project') for pure analysis, or a target to pull live.
Args: old_artifact_days: Age in days past which a kept artifact counts as reclaimable (default 30). limit: How many projects to pull when live (default 100). projects: Injected rows {path, repoBytes, artifactsBytes}; skips the live pull. artifacts_by_project: Injected map {project: [{file, sizeBytes, createdAt, expireAt}]}. target: Server target name from config; omit for the default.
Returns dict: {projectsEvaluated, totalReclaimableBytes, thresholds, projects:[{project, repoBytes, artifactsBytes, totalBytes, expiredButKept, reclaimableBytes, action}], note}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No | ||
| projects | No | ||
| old_artifact_days | No | ||
| artifacts_by_project | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description marks the tool as [READ] and describes its output, indicating non-destructive operation. However, no annotations are provided, so the description carries full burden. It does not disclose potential performance impact, authentication needs, or rate limits, but the read-only nature is clear.
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 structured with a clear header, body explaining functionality, an Args section, and a Returns section. It is front-loaded with the purpose but could be slightly more concise; still, every sentence adds value.
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 no output schema and 0% schema coverage, the description provides a thorough explanation of the tool's behavior, parameters, and return value. It covers the essential aspects for an agent to use it correctly, though it omits error 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 description explains all 5 parameters: old_artifact_days, limit, projects, artifacts_by_project, and target, including their defaults and purposes. This adds significant value beyond the schema, which has 0% description coverage.
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 ranks projects by storage and estimates reclaimable artifact bytes, using specific verbs 'rank' and 'estimate'. It distinguishes from sibling tools like list_artifacts (which only lists artifacts) by focusing on analysis and reclaimability estimation.
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?
It explains when to use it: for storage bloat analysis, either by providing pre-existing data or pulling live from a target. It does not explicitly exclude alternatives, but the context implies this is for analysis before deletion or cleanup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_pipelineA
[WRITE][risk=medium] Cancel a running pipeline.
Reads the pipeline first so priorState records the status it had before the cancel. Irreversible (the stopped run cannot be resumed) — no undo. Pass dry_run=True to preview.
Args: project: Project id or full path. pipeline: Pipeline id (from list_pipelines). dry_run: If True, preview without canceling. target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| dry_run | No | ||
| project | Yes | ||
| pipeline | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the write nature, risk level, prior reading of pipeline state, irreversibility, and dry-run option. No annotations existed to contradict, and the description adds valuable behavioral 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 well-structured with a tag, concise statement, behavioral paragraph, and parameter list. It is not overly verbose, though the 'Reads the pipeline first' detail could be considered extra.
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 4 parameters, no output schema, and no annotations, the description covers the tool's purpose, side effects, and parameter details adequately. Missing return value info is acceptable due to missing output schema.
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%, but the description's Args section provides meaningful explanations for all 4 parameters, including project, pipeline, dry_run, and target, which the schema only gives titles and types.
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 explicitly states 'Cancel a running pipeline' with a specific verb and resource. It clearly distinguishes from sibling tools like retry_pipeline, which retries instead of cancels.
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 on when to use (cancel a running pipeline) and includes a caution about irreversibility. It does not explicitly mention alternatives but implies the tool is for canceling, which is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cicd_overviewA
[READ] One-shot summary: version, token identity, projects, runners.
Resilient — a failing sub-call degrades to a partial summary with an 'errors' list instead of crashing.
Args: target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description explicitly states the tool is read-only and resilient: a failing sub-call degrades to a partial summary with an 'errors' list. This adds valuable behavioral context beyond typical read operations.
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 sentences, front-loaded with purpose, then behavioral trait, then parameter. Every sentence adds 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?
Given no output schema and one optional parameter, the description sufficiently covers what the tool does, its behavior, and parameter usage. It is complete for its 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 description coverage is 0%, but the description fully explains the single parameter 'target' as a server target name from config, with default behavior. This adds meaning beyond what the schema provides.
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 is a 'one-shot summary' covering version, token identity, projects, and runners. The [READ] prefix and specific components distinguish it from sibling tools, which are more granular (e.g., pipeline_detail, list_runners).
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?
It implicitly suggests use for a quick high-level overview. However, it lacks explicit guidance on when to use this tool versus more specific siblings or when to avoid it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
current_userA
[READ] The token's identity — who the API sees you as (scope probe).
Args: target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Marks the tool as READ, implying it's non-destructive, but with no annotations the description carries full burden. No mention of authentication requirements, rate limits, or error 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?
Two concise lines: first states purpose, second explains parameter. No redundant text, effectively 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?
Sufficient for a simple tool with one optional parameter and no output schema. Covers purpose and parameter semantics, but could hint at return type or authentication context.
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?
With schema description coverage at 0%, the description adds value by explaining 'target' as a server name from config with a default. Clarifies purpose beyond raw 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?
Clearly states the tool returns the token's identity and frames it as a scope probe. Distinct from sibling tools which focus on pipelines, runners, artifacts, etc.
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?
Describes the 'target' parameter but does not explicitly state when to use this tool versus alternatives or provide context exclusions. Usage is implied but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_artifactsA
[WRITE][risk=high] Delete a project's artifacts (all, or older than N days).
IRREVERSIBLE — reads the artifact inventory first so priorState records the file count and bytes being destroyed; no undo. Pass dry_run=True to preview (reports what would be reclaimed without deleting).
Args: project: Project id or full path. older_than_days: Only delete artifacts created before this many days ago; 0 = the server's bulk delete of all eligible artifacts. dry_run: If True, preview without deleting. target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| dry_run | No | ||
| project | Yes | ||
| older_than_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, description discloses all behavioral traits: destructive (IRREVERSIBLE), reads artifact inventory, records priorState, supports dry_run. Fully meets transparency 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?
Description is well-structured with args section, but slightly verbose. Each sentence is useful, no waste. Front-loaded with purpose and risk.
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?
Covers purpose, usage, parameters, and destructive behavior. Lacks explanation of return value format and error cases, but given no output schema, it's reasonable. Could be more complete.
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?
With 0% schema description coverage, description provides complete semantics for all 4 parameters: project (id or path), older_than_days (days to filter), dry_run (preview), target (server target). Adds significant value beyond 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?
Description clearly states the tool deletes project artifacts, with options to delete all or older than N days. It distinguishes from siblings like list_artifacts by explicitly marking as WRITE and high risk.
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 clear when-to-use: when deleting artifacts, with dry_run for preview. Mentions irreversibility. Lacks explicit comparison to sibling tools like stale_work_audit, but does warn about destructive nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_trace_tailA
[READ] The tail of one job's log/trace — where the failure explains itself.
Returns {project, job, trace, totalLines, tailLines, returned, limit, truncated, charsTruncated}. 'truncated' true means earlier lines were dropped (the trace is only the tail — the FIRST error may be above the window, so raise tail_lines before concluding a root cause); 'charsTruncated' true means the tail itself hit the byte ceiling.
Args: project: Project id or full path. job: Job id (from pipeline_jobs). tail_lines: How many trailing lines to return (default 60). target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| job | Yes | ||
| target | No | ||
| project | Yes | ||
| tail_lines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: truncation of earlier lines and byte ceiling, and the meaning of return flags. Since no annotations are provided, the description fully covers 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?
Well-organized with a clear header, return value description, and bullet-style args. No unnecessary text; every sentence adds value.
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?
Completely describes the return object with all fields, explains truncation conditions, and covers all parameters. No output schema exists, so the description fulfills that need thoroughly.
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?
Despite 0% schema coverage, the description contains an 'Args' section that explains all four parameters, including default values and sources for parameters like job 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 clearly states it is a READ operation retrieving the tail of a job's log/trace, explicitly mentioning the return fields and distinguishing itself from sibling tools like pipeline_failure_rca by focusing on the raw trace tail.
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 guidance on when to increase tail_lines if truncated, and indicates how to obtain the job id. While it does not explicitly state when not to use, the context is sufficient for proper tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_artifactsA
[READ] A project's artifact inventory: files, sizes, expiry.
Also reports how many artifacts are past their expiry date but still kept (the delete_artifacts candidates). 'totalBytes' / 'expiredButKept' / 'artifactsFound' count EVERY artifact found, so they stay correct when the row list is cut; 'truncated' then says the rows are a subset. On GitLab the inventory is assembled from a bounded scan of recent jobs — when 'jobScanTruncated' is true, older jobs' artifacts are NOT in this result, so treat the totals as a lower bound.
Args: project: Project id or full path ('group/project' / 'owner/repo'). limit: Max artifact rows to return (default 500). target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No | ||
| project | 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 explains truncation behavior, that 'totalBytes' etc. count all artifacts even when rows are cut, that 'truncated' indicates subset, and that GitLab's bounded scan may cause 'jobScanTruncated' meaning totals are lower bounds. This provides comprehensive 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 well-structured with a punchy header, a explanatory paragraph, and a bulleted Args list. It front-loads the purpose. While arguably slightly verbose, every sentence adds value, so it is efficient for its 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 complexity (truncation, expiry, GitLab bounded scan) and no output schema, the description provides enough detail about return fields (totalBytes, expiredButKept, etc.) and behavior. It also references a sibling tool (delete_artifacts) for context. No gaps remain for an agent to select and use 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?
Input schema has 0% description coverage, so the description must fully explain parameters. It provides clear, concise descriptions for all three parameters: 'project' (id or path), 'limit' (max rows, default 500), and 'target' (server name, omit for default). This adds essential meaning beyond the schema's titles and types.
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 starts with '[READ] A project's artifact inventory: files, sizes, expiry', specifying a clear verb ('list'), resource ('artifacts'), and scope (inventory with file details). It distinguishes from sibling tools like delete_artifacts by stating it reports 'delete_artifacts candidates' and from other analysis tools by focusing on listing inventory.
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 states it is a read operation and gives behavior guidance: totals remain correct when truncated, and a bounded scan means totals are lower bounds. It implicitly distinguishes from delete_artifacts by mentioning candidates, but does not explicitly state when to use this vs. alternatives like artifact_storage_bloat_analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_branchesA
[READ] Branches with last-commit date and protected flag.
Args: project: Project id or full path. limit: Max rows to return (default 100, capped at 99); the result carries 'truncated' when the server had more. target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No | ||
| project | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond schema by disclosing that limit is capped at 99 and the result carries a 'truncated' flag when server has more. No annotations were provided, so this transparency is valuable, though it could mention authorization 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 concise with two clear sentences and a structured args list. Every sentence adds value, with no 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?
No output schema is provided; description states the tool returns branches with last-commit date and protected flag but does not detail the full output structure or pagination beyond the truncation flag. For a simple listing tool, it is adequate but incomplete.
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?
With 0% schema description coverage, the description fully explains each parameter: project (id or full path), limit (default 100, capped at 99, truncation behavior), and target (server target, default handled). This adds critical meaning absent from 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 it is a read operation with '[READ]' and specifies the resource (branches) and the returned fields (last-commit date and protected flag). It effectively distinguishes from sibling tool 'list_protected_branches' by implication, as this lists all branches.
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 explains the tool's functionality but does not explicitly advise when to use this tool over siblings like 'list_protected_branches'. Usage context is implied but not clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_merge_requestsA
[READ] Merge/pull requests for a project (default: open ones).
Args: project: Project id or full path ('group/project' / 'owner/repo'). state: opened/open, merged, closed, all (platform word is translated). limit: Max rows to return (default 50, max 99); the result carries 'truncated' when the server had more. target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| state | No | opened | |
| target | No | ||
| project | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description uses [READ] to indicate non-destructive behavior, explains that state words are translated across platforms, and mentions the 'truncated' field in results when limit is reached. No annotations are provided, so the description carries the burden well, though it could detail more about rate limits or authentication.
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: one-line purpose followed by a clear list of parameters. It is front-loaded with the core purpose. Every sentence adds 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?
Given 4 parameters, no output schema, and no annotations, the description covers all inputs and some behavioral traits (truncation, state translation). However, it does not explain the output structure or possible error conditions, which would enhance completeness for an AI 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?
The input schema has 0% description coverage, so the description fully compensates by explaining each parameter: project (id or path), state (with translation), limit (default 50, max 99, truncated flag), and target (server config). This adds significant meaning 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 it lists merge/pull requests for a project, with default open ones. The verb 'list' and resource 'merge/pull requests' are specific. Sibling tools like list_pipelines and list_artifacts are distinct, so confusion is unlikely.
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 explains default state and available states, but does not explicitly compare with sibling tools or state when not to use it. However, sibling tools cover different resources (pipelines, runners), so implicit differentiation is sufficient. A clear alternative or exclusion would raise the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipelinesA
[READ] Recent pipelines/runs for a project, newest first.
Returns {project, pipelines:[...], returned, limit, truncated}. When 'truncated' is true the server had MORE pipelines than were returned — re-run with a higher limit rather than treating the list as complete. Truncation is measured (one extra row is fetched), never guessed.
Args: project: Project id or full path ('group/project' / 'owner/repo'). status: Optional status filter (e.g. failed, success, running, pending). limit: Max rows to return (default 20, max 99). target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | ||
| target | No | ||
| project | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains return format and truncation behavior in detail ('one extra row is fetched, never guessed'). The '[READ]' prefix implies read-only. It does not mention authentication or rate limits, but for a 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 front-loaded with purpose and return shape, then truncation details, then parameters. It is efficient but could be slightly more compact. Every sentence adds value.
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 no output schema, the description outlines the return structure ({project, pipelines, returned, limit, truncated}) and explains truncation. All parameters are documented. For a list tool, this is comprehensive.
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%, but the description fully explains all four parameters with examples, defaults, and constraints (limit max 99, project path format, status values). This adds significant value beyond 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?
Description starts with '[READ] Recent pipelines/runs for a project, newest first.' Clearly identifies the verb (list/read), resource (pipelines), and scope (project, sorted). Distinguishes from sibling tools like pipeline_detail and pipeline_jobs by focusing on listing multiple pipelines.
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 guidance on handling truncation ('re-run with higher limit') and explains the truncation detection method. However, it does not explicitly state when to use this tool versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
[READ] Projects/repositories the token can see, with storage numbers.
Returns {projects:[...], returned, limit, truncated}; 'truncated' true means the server had more projects than were returned (measured, not guessed).
Args: search: Optional name filter. limit: Max rows to return (default 50, max 99). target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No | ||
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses return format '{projects:[...], returned, limit, truncated}' and explains 'truncated' meaning server has more projects. Also notes default and max limit. Does not explicitly state idempotency but '[READ]' implies safety.
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?
Extremely concise with a structured header line then bullet-style args. Every sentence adds value. No fluff. Front-loaded with core purpose.
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?
No annotations or output schema, but description covers return format, truncation behavior, parameter details, and scope. Provides all necessary information for an agent to invoke 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?
Schema coverage is 0%, so description must explain parameters. It does so fully: 'search' as optional name filter, 'limit' with default 50 and max 99, 'target' as server target with default omit. All three parameters are clearly described.
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?
Starts with '[READ] Projects/repositories the token can see', clearly identifying a read operation on projects. Mention of 'with storage numbers' adds specificity. Distinguishes from siblings like 'project_detail' (single project) and 'list_pipelines' (different resource).
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?
States it lists projects visible to the token, implying scope but does not explicitly provide when to use vs. alternatives. No mention of when not to use or comparison with siblings like 'project_detail'. Lacks exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_protected_branchesA
[READ] Branch-protection rules for a project (incl. force-push flags).
Returns {project, protections:[...], returned, limit, truncated}.
Args: project: Project id or full path. limit: Max rows to return (default 100). target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No | ||
| project | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the read-only nature via '[READ]' and describes the return structure. It adds context about force-push flags being included. However, it does not mention auth requirements or potential side effects, which are minor for a read tool.
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 purpose and read flag, and includes only necessary information. The structure is clear: one line for purpose, one for return type, then parameter descriptions. No wasted words.
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 (3 parameters, no output schema), the description is complete. It covers purpose, parameter details, and return structure. The mention of 'limit' and 'truncated' addresses pagination. No additional context needed 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 description provides parameter semantics via an 'Args' section that explains each of the three parameters (project, limit, target) in detail, including default values. The input schema has no property descriptions, so the description fully compensates with high coverage.
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 'Branch-protection rules for a project (incl. force-push flags),' specifying both the resource and scope. This distinguishes it from siblings like list_branches (which lists branches, not protection rules) and update_branch_protection (which modifies).
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?
While the purpose is clear, there is no explicit guidance on when to use this tool versus alternatives. The description does not mention exclusions or provide comparisons with siblings like list_branches or update_branch_protection. Usage is implied but not explicitly clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_releasesA
[READ] Releases for a project, newest first.
Args: project: Project id or full path. limit: Max rows to return (default 20, max 99); the result carries 'truncated' when the server had more. target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No | ||
| project | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It indicates the operation is read-only via '[READ]', describes ordering and truncation behavior for limit, but does not disclose authentication needs, rate limits, or potential side effects on the system.
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: three lines covering purpose, parameters, and behavior. No redundant wording; every sentence adds value and is front-loaded with the key purpose.
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 3 parameters, no output schema, and no annotations, the description covers the essential aspects: purpose, required param, limit behavior, and target. It mentions the 'truncated' indicator and defaults. While it could elaborate on return format, it is largely adequate for a list 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%, so the description must add meaning. It specifies 'project' as id or full path, 'limit' with max 99 and truncation indicator, and 'target' as server target name with default behavior. This adds significant context beyond the schema's type information.
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'), resource ('releases'), scope ('for a project'), and ordering ('newest first'), effectively distinguishing it from sibling tools like list_artifacts or list_pipelines.
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 explains the required 'project' argument and details the 'limit' and 'target' parameters, but does not explicitly state when to use this tool over siblings or provide context for exclusion criteria. Usage is implied by resource name but lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_runnersA
[READ] All runners visible to the token, offline/paused first.
GITLAB ONLY. Gitea has no runner-administration API, so a Gitea target raises a teaching error naming the resources that DO exist there. That is a platform-capability answer, not a broken tool: do not retry it, and do not report the server as unreachable — answer from the pipeline/job surface instead.
Returns {runners:[...], returned, limit, truncated}; rows are sorted offline/paused first BEFORE the cut, so the most urgent runners survive.
Args: status: Optional status filter (online, offline, paused, stale). limit: Max rows to return (default 100, capped at 99). target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | ||
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses important behavioral traits: it is a READ operation, returns a specific structure, sorts offline/paused first, caps limits at 99, and raises a teaching error for Gitea. Lacks details on authorization or rate limits but sufficiently warns about non-broken error.
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?
Well-structured: starts with a one-line summary, then platform note, return format, and args. Every sentence adds value. Could be slightly more concise but no waste.
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 no output schema and no annotations, the description covers return structure, sorting, platform limitation, and parameter details. Missing error scenarios beyond Gitea, but overall adequate for a list 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 coverage is 0%, but the description adds meaning for all three parameters: status (possible values), limit (default and cap), target (server target). This compensates well for the missing 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 clearly states it lists all runners visible to the token, with sorting behavior (offline/paused first). It distinguishes from sibling tools like runner_detail and runner_health_rca by indicating it's a broad list, not a detail or health analysis. The platform restriction (GitLab only) is explicit.
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 clear context: use for listing all runners, with platform-specific guidance (Gitea yields a teaching error). Does not explicitly contrast with alternative list tools but implies its unique scope. The 'do not retry' instruction for Gitea is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_runnerA
[WRITE][risk=medium] Pause a runner; reversible (undo resumes it).
Reads the runner first so the harness records its prior paused state. A paused runner stops picking up new jobs; running jobs finish. Pass dry_run=True to preview.
Args: runner: Runner id (from list_runners). dry_run: If True, preview without pausing. target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| runner | Yes | ||
| target | No | ||
| dry_run | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses it's a write operation with [risk=medium], explains it reads the runner first to record prior state, and describes effects clearly.
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?
Well-structured summary, behavioral notes, and parameter list. Every sentence adds value; no 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?
Covers purpose, effects, and parameters thoroughly. Lacks description of return value, but no output schema exists. Slight gap in completeness.
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?
With 0% schema coverage, description fully explains each parameter: runner is an ID from list_runners, dry_run previews without pausing, target is a server config name with a default.
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 'Pause a runner' and explains it is reversible via undo, distinguishing it from the sibling resume_runner.
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 context on when to use: to stop a runner from picking new jobs while letting running jobs finish. Mentions dry_run for preview. Could be more explicit about alternatives, but sibling list includes resume_runner.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pipeline_detailA
[READ] One pipeline/run's full detail.
Args: project: Project id or full path. pipeline: Pipeline/run id (from list_pipelines). target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| project | Yes | ||
| pipeline | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The '[READ]' prefix indicates a non-destructive operation, which is helpful. However, no annotations are provided, and the description lacks details about what 'full detail' includes (e.g., fields, pagination). Behavior is minimally transparent but not misleading.
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: a two-line summary followed by a bullet-point parameter list. No redundant sentences. Front-loaded with purpose.
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 with no output schema and three parameters, the description covers purpose and parameters adequately. It lacks details about the return format (e.g., JSON structure), but this is acceptable given the simplicity.
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 0% coverage (no descriptions), so the description must compensate. It provides clear explanations: 'project' is id or full path, 'pipeline' is id from list_pipelines, 'target' is optional server name. This adds significant meaning 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 '[READ] One pipeline/run's full detail,' which is a specific verb+resource. It distinguishes from sibling tools like 'list_pipelines' (list all) and 'pipeline_failure_rca' (root cause analysis).
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 explains the parameters, noting that 'pipeline' comes from 'list_pipelines', which provides usage context. However, it does not explicitly state when to use this tool versus alternatives like 'pipeline_failure_rca'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pipeline_failure_rcaA
[READ] Classify recent failed pipelines: cause + action per pipeline.
The flagship pipeline RCA: pulls the project's recent failed pipelines with their failed jobs and trace tails, classifies each failed job (test-failure / dependency-network / runner-timeout / oom / script-error) from its failure_reason and trace markers, and attaches a cause and a recommended action. Every classification names its matched evidence, not a black-box verdict. Pass 'failed_pipelines' for pure analysis, or a project to pull live.
Args: project: Project id or full path (required unless failed_pipelines given). limit: How many recent failed pipelines to pull (default 10). tail_lines: Trace-tail lines pulled per failed job (default 60). failed_pipelines: Injected rows {id, ref, jobs:[{name, stage, status, failureReason, traceTail}]}; skips the live pull. target: Server target name from config; omit for the default.
Returns dict: {pipelinesEvaluated, classCounts, pipelines:[{pipeline, ref, headlineClass, cause, action, failedJobs:[{job, stage, class, cause, action, evidence}]}], note}.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No | ||
| project | No | ||
| tail_lines | No | ||
| failed_pipelines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description opens with '[READ]', indicating a non-destructive operation. It details that it pulls live data and classifies failures with evidence, but does not mention required permissions or side effects. Given no annotations, 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 somewhat lengthy but well-structured with a concise intro, a detailed functional paragraph, bulleted Args, and return spec. It front-loads the verb and purpose, avoiding unnecessary repetition.
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 no output schema, the description details the full return dict structure (pipelinesEvaluated, classCounts, pipelines with nested failedJobs, etc.) and explains classification categories and evidence. This makes it complete for the tool's 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?
With 0% schema description coverage, the description fully explains all 5 parameters (project, limit, tail_lines, failed_pipelines, target) with their types, defaults, and relationships (e.g., 'required unless failed_pipelines given'). This comprehensively compensates 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 clearly states the tool classifies recent failed pipelines to provide cause and action per pipeline. It uses specific verbs like 'classify' and 'pulls', and the 'flagship pipeline RCA' distinguishes it from sibling tools like list_pipelines.
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 explains two usage modes: passing 'failed_pipelines' for pure analysis or a project to pull live. It also notes the 'project' is required unless 'failed_pipelines' is given. However, it does not explicitly contrast with sibling tools or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pipeline_jobsA
[READ] Jobs of one pipeline/run with status + failure reason.
Returns {project, pipeline, jobs:[...], returned, limit, truncated}. When 'truncated' is true this pipeline had more jobs than were returned.
Args: project: Project id or full path. pipeline: Pipeline/run id (from list_pipelines). limit: Max job rows to return (default 100). target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No | ||
| project | Yes | ||
| pipeline | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description starts with [READ] indicating read-only, and explains the return structure including truncation behavior. No annotations exist, so the description carries the burden. It does not disclose authentication needs, rate limits, or error conditions, but it covers key behavioral aspects for a listing tool.
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 and well-structured, starting with the purpose, then the return format, and finally an Args list. It is front-loaded and avoids unnecessary repetition, though it could be slightly shorter without loss of clarity.
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 no output schema, the description explains the return structure (project, pipeline, jobs, returned, limit, truncated) and mentions truncation. This is sufficient for a job-listing tool, though it omits details like job fields and error handling.
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 0% description coverage, but the description provides clear explanations for all four parameters: project (id or full path), pipeline (from list_pipelines), limit (default 100), and target (server target from config). This adds meaning beyond the schema's type/default.
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 returns jobs of a pipeline/run with status and failure reason. It distinguishes from siblings like list_pipelines and pipeline_detail by focusing on jobs. However, it does not explicitly differentiate from job_trace_tail or other job-related 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 implies usage: when you need jobs of a specific pipeline. It mentions the relationship to list_pipelines (pipeline id from there). It does not provide explicit when-not-to-use or alternatives among siblings, 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.
project_detailA
[READ] One project's detail incl. repo/artifact byte counts.
Args: project: Project id or full path ('group/project' / 'owner/repo'). target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| project | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only indicates a read operation via '[READ]' but does not specify permissions, side effects, or any constraints. The agent lacks safety information beyond the read hint.
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?
Extremely concise with no unnecessary words. Uses a structured 'Args:' format to present parameters efficiently. Every sentence is valuable.
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?
The description mentions inclusion of byte counts but does not fully describe the return value. Since there is no output schema, a more complete description of the response would be beneficial. The current description is adequate but not comprehensive.
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 0% description coverage, but the description fully compensates by explaining both parameters: project (id or full path with examples) and target (server target, optional with default). This adds clear meaning beyond 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?
Clearly states it reads one project's details including repo/artifact byte counts. The verb 'detail' and resource 'project' are specific, and the inclusion of byte counts distinguishes it from sibling tools like list_projects.
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 it is for retrieving details of a single project but provides no explicit when-to-use or when-not-to-use guidance. No comparison to alternatives like pipeline_detail or list_projects is given, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_runnerA
[WRITE][risk=medium] Resume a paused runner; reversible (undo pauses it).
Reads the runner first so the harness records its prior paused state. Pass dry_run=True to preview.
Args: runner: Runner id (from list_runners). dry_run: If True, preview without resuming. target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| runner | Yes | ||
| target | No | ||
| dry_run | No |
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 that this is a WRITE operation with medium risk, reads the runner first, and is reversible via undo. It also mentions the dry_run preview. This adds good behavioral context, though it lacks details on authentication or rate limits.
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 with a clear structure: a single-line summary (with risk flag), a brief behavioral note, and an Args list. Every sentence serves a purpose with no 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 tool with 3 parameters and no output schema, the description covers safe usage, reversibility, and parameter details. It does not describe what the resumption entails (e.g., state changes) or the return value, but the information provided is sufficient for most use 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?
Schema coverage is 0%, so the description must explain all parameters. It does so effectively: runner is described as 'Runner id (from list_runners)', dry_run as 'preview without resuming', and target as 'Server target name from config; omit for default'. This adds substantial meaning 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 resumes a paused runner. It mentions reversibility and uses a specific verb-resource pair. However, it does not explicitly differentiate from sibling tools like pause_runner or list_runners, though the action is distinct.
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 some usage context: it reads the runner first to record prior state for undo, and offers a dry_run flag to preview. It implies when to use (when runner is paused) but does not explicitly state when not to use or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retry_pipelineA
[WRITE][risk=medium] Retry a failed/canceled pipeline.
Reads the pipeline first so priorState records the status it had before the retry. Irreversible (a retry is a new run) — no undo. Pass dry_run=True to preview.
Args: project: Project id or full path ('group/project' / 'owner/repo'). pipeline: Pipeline id (from list_pipelines). dry_run: If True, preview without retrying. target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| dry_run | No | ||
| project | Yes | ||
| pipeline | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the tool reads the pipeline first to record prior status, is irreversible, and offers a dry-run option. This provides strong behavioral 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?
Front-loaded with [WRITE][risk=medium], followed by a clear one-sentence summary. Parameter descriptions are listed concisely. Every sentence adds value with no wasted words.
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 retry operation with no output schema, the description covers essential context: state recording, irreversibility, dry-run, parameter details. It is complete for the tool's 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?
With 0% schema coverage, description fully explains all parameters: project (id or full path), pipeline (id from list_pipelines), dry_run (preview), target (server target from config). Adds significant meaning 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 it retries a failed/canceled pipeline, using specific verb and resource. It distinguishes from siblings like cancel_pipeline which cancels, and undo_apply which undoes.
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 indicates use when pipeline is failed/canceled and mentions dry_run for preview. It does not explicitly state when not to use or list alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runner_detailA
[READ] One runner's full detail (contacted_at, tags, paused, version).
GITLAB ONLY — a Gitea target raises the same teaching error as list_runners.
Args: runner: Runner id (from list_runners). target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| runner | Yes | ||
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It uses '[READ]' to hint at read-only. It mentions that using a Gitea target causes an error. For a simple read tool, this is adequate but does not disclose any potential side effects, performance, or caching 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 extremely concise: one line for purpose, one line for GitLab-only constraint, then two lines for parameter details. Front-loaded with '[READ]'. Every sentence 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 has only 2 parameters and no output schema, the description is complete. It lists the fields returned (contacted_at, tags, paused, version) and explains both parameters. No missing information for a simple retrieval 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%, so description must compensate. It explains 'runner' as 'Runner id (from list_runners)' and 'target' as 'Server target name from config; omit for the default.' This adds clear meaning beyond the schema, which has no 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 clearly states it reads one runner's full detail and lists specific fields (contacted_at, tags, paused, version). It distinguishes from siblings like list_runners and pause_runner/resume_runner by specifying it is a read operation on a single runner. Also notes GITLAB ONLY, which sets scope.
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 good guidance by noting 'GITLAB ONLY — a Gitea target raises the same teaching error as list_runners', explicitly telling the agent when not to use. It also explains parameter usage (target optional, default). However, it does not explicitly compare to siblings like runner_health_rca, though the purpose is different enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runner_health_rcaA
[READ] Flag offline/stale/paused runners, long-queued jobs, tag saturation.
The flagship capacity RCA: pulls the runner fleet, flags each runner that is offline, stale (no contact for stale_contact_min minutes) or paused, lists jobs queued past queue_sec, and computes per-tag saturation (queued jobs vs online unpaused runners). Every flag carries its numbers. Pass 'runners' / 'queued_jobs' for pure analysis, or a target to pull the fleet live.
Args: stale_contact_min: Minutes since last contact at which a runner is stale. queue_sec: Seconds a job may wait before being flagged (default 300). saturation_ratio: Flagged queued jobs per online runner at which a tag is saturated (default 2.0). runners: Injected rows {id, description, status, paused, online, tags, contactedAt}; skips the live pull. queued_jobs: Injected rows {id, name, queuedDurationSec, createdAt, tags}. target: Server target name from config; omit for the default.
Returns dict: {runnersEvaluated, flaggedRunners, longQueuedJobs, saturatedTags, thresholds, note}.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| runners | No | ||
| queue_sec | No | ||
| queued_jobs | No | ||
| saturation_ratio | No | ||
| stale_contact_min | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the analysis algorithm (flagging offline/stale/paused runners, queued jobs, tag saturation) and the return dict structure. With no annotations, it carries the burden well but omits potential behaviors like authentication requirements or error scenarios.
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?
Front-loaded with a concise summary, followed by a brief algorithm explanation and structured Args list. Could be slightly more concise but every sentence adds value.
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?
Covers all input parameters and high-level output structure, but lacks details on exact return fields (e.g., 'note' content) and error handling. No output schema provided.
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%, but the description's Args section provides clear explanations for each parameter (e.g., 'stale_contact_min: Minutes since last contact at which a runner is stale'). Adds significant meaning beyond the schema's property titles.
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?
Starts with '[READ] Flag offline/stale/paused runners, long-queued jobs, tag saturation' which clearly states the verb and resource. Positions itself as 'the flagship capacity RCA', distinguishing from sibling tools like list_runners and runner_detail.
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 clear usage context: explains when to pass 'runners'/'queued_jobs' for analysis vs a target for live pull. However, lacks explicit when-not-to-use or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_versionB
[READ] CI/CD server version and revision.
Args: target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states '[READ]' hinting at read-only, but does not explicitly confirm no side effects, idempotency, or safety guarantees. Minimal behavioral disclosure.
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?
Extremely concise: two short sentences plus a clear argument list. No redundant information, front-loaded with purpose.
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?
No output schema, so description could elaborate on return format (e.g., version string, revision). Also, the parameter 'target' suggests multiple servers but not how to configure or list targets. Adequate for simple tool but room for improvement.
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 has 0% description coverage, but the description adds meaningful context: 'target: Server target name from config; omit for the default.' This clarifies the parameter's purpose and usage beyond the schema type.
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 returns CI/CD server version and revision, using a prefix '[READ]' to indicate the action. It distinguishes from siblings that focus on pipelines, runners, artifacts, etc.
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?
No guidance on when to use this tool versus alternatives. Siblings include many read tools like list_*, and the description does not mention any specific context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stale_work_auditA
[READ] Long-open MRs/PRs, inactive branches, protection config gaps.
The flagship hygiene audit: flags open merge/pull requests idle past stale_mr_days, non-default branches with no commit for stale_branch_days, a default branch without protection, and protection rules that allow force-push. Every flag carries its numbers. Pass injected rows for pure analysis, or a project to pull live.
Args: project: Project id or full path (required unless rows are injected). stale_mr_days: Days an open MR may idle before flagging (default 14). stale_branch_days: Days a branch may idle before flagging (default 90). merge_requests: Injected rows {id, title, state, updatedAt, draft}. branches: Injected rows {name, default, protected, lastCommitAt}. protections: Injected rows {branch, allowForcePush}. default_branch: Default-branch name (pulled live when omitted). target: Server target name from config; omit for the default.
Returns dict: {staleMergeRequests, staleBranches, protectionGaps, counts, thresholds, note}.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| project | No | ||
| branches | No | ||
| protections | No | ||
| stale_mr_days | No | ||
| default_branch | No | ||
| merge_requests | No | ||
| stale_branch_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description upfront declares the tool is a '[READ]' operation, indicating no mutation. It explains that it 'flags' issues and returns a dictionary with specific keys like count and thresholds. Since no annotations are provided, this description adequately discloses the tool's behavior and what the output contains.
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 yet comprehensive, front-loading the purpose and then detailing parameters and return format. Every sentence serves a purpose, and the structure with paragraphs and bullet-like lists makes it easy to scan. No unnecessary words.
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 audit tool with 8 parameters and no output schema, the description covers the input, logic, and output thoroughly. It explains the relationship between injected vs live data. Minor omissions like error handling or performance notes do not detract significantly from overall completeness.
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?
With 0% schema coverage, the description does heavy lifting. It explains each parameter's purpose, defaults (e.g., stale_mr_days=14), and how injected rows should be structured (fields like id, title, updatedAt, draft). The 'target' parameter is only briefly described, but overall the description adds significant meaning beyond the raw 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 begins with '[READ] Long-open MRs/PRs, inactive branches, protection config gaps.' which clearly states the tool's function as an audit. It details what it flags (stale merge requests, inactive branches, protection gaps), distinguishing itself from sibling list tools by performing analysis rather than simple retrieval.
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 explains two usage modes: 'Pass injected rows for pure analysis, or a project to pull live.' It emphasizes that project is required unless rows are injected, providing clear context for when to use each parameter. However, it does not explicitly state when not to use this tool or compare it to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_applyA
[WRITE][risk=medium] Apply a recorded undo by dispatching its inverse tool.
The inverse runs through its own governed tool, so its real risk tier is recorded there. Pass dry_run=True to preview the inverse call without executing it. A token can only be applied once.
Args:
undo_id: The undoId from undo_list (or an _undo_id in a write result).
dry_run: If True, preview the inverse tool + params without running it.
target: Passed through to the inverse tool when it accepts a target.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | ||
| dry_run | No | ||
| undo_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses dispatching the inverse tool, the governed execution, dry-run preview, and one-time token use. Lacks explicit mention of side effects like token consumption or error handling, but covers key behaviors.
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?
Five sentences with clear structure: purpose statement, behavioral details, parameter list. Front-loaded with '[WRITE][risk=medium]'. Every sentence adds 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?
Describes parameters and overall mechanism, but lacks output description or error conditions. With no output schema, the agent is left guessing the return value. Adequate for a simple tool but not fully complete.
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 description must compensate. It explains each parameter: undo_id source, dry_run purpose, and target pass-through. Adds meaningful context beyond schema types and defaults.
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 applies a recorded undo by dispatching its inverse tool. It references undo_list as the source of undo IDs, distinguishing it from listing tools and other mutation tools like retry_pipeline or cancel_pipeline.
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 context for use: apply undo from undo_list, preview with dry_run, and notes that each token can only be applied once. Does not explicitly list when not to use or alternatives, but the implicit guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_listA
[READ] List recorded, not-yet-applied undo tokens (most recent first).
Each entry names the original tool, the inverse tool that undo_apply
would run, and a human note. Use the undoId with undo_apply.
Returns {undos:[...], returned, limit, truncated}. One extra row is asked for, so 'truncated' is measured — a full page is not assumed to be the end.
Each entry carries effectVerified. False means the original write
lost its response, so the change it reverses is PROBABLE, not confirmed —
check the live state before applying, and do not report the result as a
restore of a state that may never have been reached.
Args: limit: Max rows to return (default 50, max 500). target: Unused (undo state is host-local); accepted for CLI uniformity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| target | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it is a read operation, returns a structured response with truncation details, and explains the 'effectVerified' field meaning. No contradictions exist.
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 with sections for summary, return format, and args. Every sentence is informative, though slightly verbose in the truncation explanation. Still, it is efficient and 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?
Given no output schema, the description covers the return structure (undos, returned, limit, truncated) and important field 'effectVerified'. Parameters are fully described, and sibling tools provide related context.
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?
Despite 0% schema coverage, the description explains both parameters: 'limit' with default/max and 'target' as unused for CLI uniformity. This adds significant 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 begins with '[READ] List recorded, not-yet-applied undo tokens (most recent first)', which is a specific verb+resource statement. It distinguishes the tool from its sibling 'undo_apply' by stating the list provides undoId for that tool.
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 the undoId with undo_apply', guiding the agent to the next action. It also notes that the 'target' parameter is unused, preventing misuse. The context of listing pending tokens before applying an undo is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_branch_protectionA
[WRITE][risk=medium] Protect/unprotect a branch; reversible.
Reads the branch's current protection first so the harness records an undo that replays this same tool with the prior settings. Pass dry_run=True to preview.
Args: project: Project id or full path. branch: Branch name (from list_branches). protect: True to protect the branch, False to remove protection. allow_force_push: Whether the protection permits force-push (default False — the safe setting). dry_run: If True, preview without changing. target: Server target name from config; omit for the default.
| Name | Required | Description | Default |
|---|---|---|---|
| branch | Yes | ||
| target | No | ||
| dry_run | No | ||
| project | Yes | ||
| protect | No | ||
| allow_force_push | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: it is a write operation with medium risk, it reads current protection first for undo capability, and provides a dry-run option for preview. It also notes reversibility. This is exemplary disclosure beyond what structured data provides.
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 and well-structured: front-loaded with key info ('[WRITE][risk=medium] Protect/unprotect a branch; reversible.'), followed by essential context about undo, then a clear Args list. Every sentence adds value with no 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?
Given the tool's complexity (6 parameters, no output schema), the description covers behavior, parameters, and side effects well. However, it omits details about the return value or status upon success/failure. This is a minor gap but does not hinder 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?
Schema description coverage is 0%, so the description carries full burden. The Args section adds meaningful explanations for each parameter (e.g., 'protect: True to protect, False to remove', 'allow_force_push: default False — the safe setting'), which greatly aids understanding beyond the schema's type/default.
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?
Description explicitly states the verb and resource: 'Protect/unprotect a branch'. It is clear and distinguishes itself from sibling tools like list_protected_branches, which only read. The reversible nature and undo mechanism further clarify its unique purpose.
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 (to change branch protection) and provides context like dry_run for preview. However, it does not explicitly state when not to use or provide alternatives, though no direct alternatives exist among siblings. The guidance is clear but not exhaustive.
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. Dates show when Glama detected each change.
28 tool updates
v0.5.0- First observed
artifact_storage_bloat_analysis - First observed
cancel_pipeline - First observed
cicd_overview - First observed
current_user - First observed
delete_artifacts - First observed
job_trace_tail - First observed
list_artifacts - First observed
list_branches - First observed
list_merge_requests - First observed
list_pipelines - First observed
list_projects - First observed
list_protected_branches - First observed
list_releases - First observed
list_runners - First observed
pause_runner - First observed
pipeline_detail - First observed
pipeline_failure_rca - First observed
pipeline_jobs - First observed
project_detail - First observed
resume_runner - First observed
retry_pipeline - First observed
runner_detail - First observed
runner_health_rca - First observed
server_version - First observed
stale_work_audit - First observed
undo_apply - First observed
undo_list - First observed
update_branch_protection
TDQS
Each tool targets a distinct area (pipelines, artifacts, runners, projects, branches, etc.) with clear, non-overlapping purposes. Even the analysis tools (pipeline_failure_rca, runner_health_rca) are distinct in their focus and don't overlap with the basic read tools.
Most tools follow a verb_noun pattern (e.g., list_projects, retry_pipeline), but a few use descriptive phrases (pipeline_failure_rca, artifact_storage_bloat_analysis, stale_work_audit) which breaks the pattern slightly. Overall consistent, but not perfectly uniform.
28 tools is on the higher side, but each tool serves a specific purpose across CI/CD operations and AIOps analysis. The count is reasonable given the breadth of the domain, though it could be slightly trimmed.
The server covers a comprehensive set of CRUD-like reads, writes, and high-level diagnostic tools for CI/CD management. No obvious gaps; includes undo mechanisms and dry-run options for safety.
Maintenance
Related MCP Connectors
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
Fail-closed policy guardrails for AI agents running kubectl, terraform, helm, and argocd.
Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
Related MCP Servers
- AlicenseAqualityAmaintenanceGoverned MySQL + MariaDB DBA operations — slow-query, lock-wait/deadlock, replication, and fragmentation RCA, with unbypassable audit logging (MCP + CLI), budget/runaway guards, dry-run, and undo/rollback.35MIT
- AlicenseBqualityAmaintenanceGoverned Prometheus + Grafana operations — firing-alert and scrape-target RCA, alert noise/flapping analysis, silences, and dashboards, with unbypassable audit logging (MCP + CLI), budget/runaway guards, dry-run, and undo/rollback.39MIT
- AlicenseAqualityAmaintenanceGoverned SSO/IAM operations for Keycloak and Authentik — login-failure, stale-permission, client-config, and MFA RCA, with unbypassable audit logging (MCP + CLI), budget/runaway guards, dry-run, and undo/rollback.29MIT
- AlicenseBqualityAmaintenanceGoverned MinIO object-storage operations — capacity, exposure-surface audit, lifecycle, and healing RCA, with guarded bucket writes, unbypassable audit logging (MCP + CLI), budget/runaway guards, dry-run, and undo/rollback.48MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AIops-tools/CICD-AIops'
If you have feedback or need assistance with the MCP directory API, please join our Discord server