Skip to main content
Glama

list_artifacts

Read-only

Inventory a project's CI/CD artifacts with file sizes and expiry. Spot expired-but-retained artifacts to plan deletions and reduce artifact bloat.

Instructions

[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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNo
targetNo
projectYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.5.0

TDQS

A4.8/5.0
Behavior5/5

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

Beyond readOnlyHint=true, the description discloses non-obvious behavior: totals count every artifact found even when rows are truncated, 'jobScanTruncated' means older jobs are excluded and totals are a lower bound, and it names the specific return fields. This is far more than the annotation provides.

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

Conciseness5/5

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

Purpose and the critical truncation/lower-bound caveats are front-loaded before the Args block, and every sentence conveys operative information given the empty schema descriptions.

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

Completeness5/5

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

With no output schema and no annotations beyond read-only, the description compensates by explaining the returned counters and truncation flags as well as every argument. An agent has everything needed to call and interpret this tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does: project accepts an id or full path with two format examples, limit is max rows with default 500, and target is a named server config that can be omitted for the default.

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

Purpose5/5

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

The first line states a specific verb and resource ('[READ] A project's artifact inventory: files, sizes, expiry'), and the second sentence ties it to the delete_artifacts workflow, making it distinguishable from siblings like artifact_storage_bloat_analysis.

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

Usage Guidelines4/5

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

It clearly frames the tool's role by reporting 'the delete_artifacts candidates', implicitly routing an agent that wants cleanup targets here. It lacks an explicit when-not-use statement or a direct named alternative, so it stops short of full routing guidance.

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