Skip to main content
Glama

List version history

layerz_history
Read-onlyIdempotent

Returns the version history of a model, newest first: { current_revision_id, current_version_number, history_days, hidden_count, oldest_hidden_at, pinned_count, max_pinned_versions, versions: [{ revision_id, version_number, created_at, trigger_type, actor_user_id, label, conversation_id, pinned }] }. Each version is a full snapshot persisted at one mutation boundary; revision_id (sha256 of the snapshot) is stable while the model is unchanged. Versions older than the plan window are counted in hidden_count but not listed; pinned versions stay listed whatever their age. limit and since scope the list. With uid, returns instead that item's change events across the history: { uid, events: [{ revision_id, version_number, created_at, actor_user_id, trigger_type, status: added | removed | modified, fields?: [{ field, oldValue, newValue }], branches?: [{ id, display_name, status, fields? }] }] } — fields describes the base plan, branches the overlay cells a branch records over it (a write under branch_id or an import on a branch lands there, not in fields).

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "layerz_history"
  }
}

Input Schema

NameRequiredDescriptionDefault
uidNoItem UID: returns that item's change events instead of the version list.
limitNoMax versions returned (default 100; with `uid`, max versions scanned, default 50).
sinceNoISO timestamp lower bound on the version list (ignored with `uid`).
model_idNoTarget model UUID. Required for user-scoped API keys; validated against the bound model for model-scoped keys.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Max number of versions to return (default 100, clamped to plan retention)."New value: +"Max versions returned (default 100; with `uid`, max versions scanned, default 50)."
    • changedInput schema / properties / model_id / description
      Previous value: -"Target model UUID. Required for user-scoped API keys; ignored (or validated against scope) for model-scoped keys."New value: +"Target model UUID. Required for user-scoped API keys; validated against the bound model for model-scoped keys."
    • changedInput schema / properties / since / description
      Previous value: -"ISO timestamp lower bound — only versions created at or after this time."New value: +"ISO timestamp lower bound on the version list (ignored with `uid`)."
    • addedInput schema / properties / uid
      Added value: +{
      +  "description": "Item UID: returns that item's change events instead of the version list.",
      +  "maxLength": 64,
      +  "minLength": 1,
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantive behavior beyond them: retention is bounded by the plan window with older versions only counted in `hidden_count`, pinned versions are exempt from that window, and each version is a full snapshot whose `revision_id` is stable until mutation. It also explains that branch writes and branch imports land in `branches` rather than `fields`, which prevents misreading the response.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, followed by the two response shapes and their semantics; every sentence carries information. It is dense — the inline shape dump and the parenthetical about branch overlay cells are heavy — but with no output schema, that material is load-bearing rather than padding.

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, the description carries the full burden of describing returns and does so for both modes, including retention, pinning, and the `fields` vs. `branches` distinction. An agent has everything needed to call this correctly and interpret the result.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds mode-interaction meaning: `limit` and `since` scope the list mode only, and `uid` flips the entire return contract. That framing is more useful than the per-parameter schema text alone, though it doesn't add much the schema doesn't already say about individual parameters.

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

Purpose5/5

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

The description names a specific resource (model version history) and states the exact behavior, including the dual mode: with `uid` it returns that item's change events instead of the version list. An agent can distinguish this from `layerz_get_model` or `layerz_manage_version` without opening the schema.

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

Usage Guidelines4/5

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

The two modes and their triggering condition (`uid` present vs. absent) are spelled out clearly, and `limit`/`since` scoping is described. It stops short of naming sibling alternatives — e.g. that `layerz_manage_version` handles restores/pinning or `layerz_diff` compares two revisions — so an agent must infer when another tool is the better choice.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources