Skip to main content
Glama
ClickHouse Loom

ClickHouse Loom

Official

loom_memory_history

Read-onlyIdempotent

Retrieve every recorded version of a memory key, newest first, including tombstoned and redacted entries, to review what was said earlier or when a value changed.

Instructions

WHAT: Every recorded version of one memory_key, newest first, tombstoned and redacted versions included; empty when the key was never written. WHEN: 'what did I say about X before', 'when did this change', or what a key held earlier. WHEN NOT: The current value alone is memory.get. ARGS: memory_key; optional limit (default 50).

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "memory_key": "<memory_key>"
    },
    "name": "loom_memory_history"
  }
}

Input Schema

NameRequiredDescriptionDefault
limitNo
run_idNo
namespaceNo
memory_keyYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.1.0

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description adds real behavior beyond that: newest-first ordering, inclusion of tombstoned and redacted versions, and the empty-result case when a key was never written. What it omits is pagination/truncation behavior when history exceeds the limit, and any note on how far back history is retained.

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

Conciseness5/5

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

The WHAT/WHEN/WHEN NOT/ARGS block structure is front-loaded and scannable, with every clause carrying distinct information (scope, ordering, edge case, alternative, arguments). No filler or restated title.

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

Completeness3/5

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

For a read-only history listing with no output schema, the description covers purpose, ordering, and the empty case, but says nothing about the shape of a returned version record (what a tombstoned or redacted entry looks like) or how run_id/namespace narrow the result. Adequate to call correctly, not enough to interpret the response confidently.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the parameter burden, but it only names memory_key and limit (repeating the default already in the schema). run_id and namespace appear nowhere in the text, leaving an agent to guess whether they scope the history to a run or namespace, and the limit maximum of 500 is undocumented.

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?

"Every recorded version of one memory_key, newest first" names the exact resource and scope, and the description immediately contrasts it with the current-value sibling. An agent can distinguish this from loom_memory_get without inspecting either schema.

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

Usage Guidelines5/5

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

The WHEN section gives concrete trigger phrases ('what did I say about X before', 'when did this change') and the WHEN NOT section explicitly routes single-value lookups to memory.get. Both the use case and the exclusion are stated rather than implied.

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