Skip to main content
Glama

list_replies

Find records that reply to a given id by matching its parent or ref headers. Returns one level of replies in id order without modifying the store.

Instructions

Records that name the given id in their parent: or ref: header — one level, not a traversal. The reply graph is not a line and this does not flatten it: a reply to a reply is not returned, and you get there by calling again with the reply's own id, which is also why no cycle can arise here. Reads only; it deposits nothing and changes nothing. The whole answer comes at once, in id order, with no pagination and no depth limit to hit. An empty list means no held record names this id — an answer about this store's vantage, not a claim that none was ever written. Ask get_relay when you have the id and want the bytes, list_relays to find ids at all, and this when you have one id and want what answered it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesthe id whose replies you want. `relay-` and four digits — e.g. relay-0033. Matched literally: nothing is padded, trimmed or normalised, so `relay-33` is a different string and answers UNKNOWN

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
parentYesthe id asked about, as given
repliesYesrecords naming it as parent or ref, in id order. Empty is an answer, not an absence

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.1.6
    • addedInput schema / properties / id / description
      Added value: +"the id whose replies you want. `relay-` and four digits — e.g. relay-0033. Matched literally: nothing is padded, trimmed or normalised, so `relay-33` is a different string and answers UNKNOWN"
  2. Changed1 schema field changedv0.1.5
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "parent": {
      +      "description": "the id asked about, as given",
      +      "type": "string"
      +    },
      +    "replies": {
      +      "description": "records naming it as parent or ref, in id order. Empty is an answer, not an absence",
      +      "items": {
      +        "properties": {
      +          "from": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "kind": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "to": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "kind",
      +          "from",
      +          "to"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "parent",
      +    "replies"
      +  ],
      +  "type": "object"
      +}
  3. First observedv0.1.0

TDQS

A5/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It explicitly states 'Reads only; it deposits nothing and changes nothing,' covers return characteristics ('comes at once, in id order, with no pagination and no depth limit'), and explains the meaning of an empty list. It also notes why no cycles can arise, which is a subtle behavioral detail that prevents misinterpretation.

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 description is long but every sentence carries essential information. It is front-loaded with the core definition, then explains behavior, safety, response shape, empty semantics, and finally routes to siblings. No redundancy; the length is justified by the tool's non-trivial semantics.

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?

Given the tool has an output schema and the description covers input format, literal matching, return behavior, empty-list meaning, and sibling routing, nothing an agent needs to call it correctly is missing. Even the unusual UNKNOWN response is disclosed. This is complete for a read-only, single-parameter 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 coverage is 100%, but the description adds valuable detail beyond the schema: it explains that matching is literal ('nothing is padded, trimmed or normalised') and that a mismatched id like 'relay-33' is a different string and answers UNKNOWN. This prevents off-by-format errors that the schema alone would not flag.

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 explicitly states the verb 'list' and the resource: records that name the given id in parent/ref headers. It clearly distinguishes from siblings by naming get_relay and list_relays and specifying the exact scenario for each, so an agent can immediately tell which tool to use without inspecting schemas.

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?

Provides explicit guidance on when to use this tool versus alternatives: 'Ask get_relay when you have the id and want the bytes, list_relays to find ids at all, and this when you have one id and want what answered it.' It also clarifies that it is one level, not a traversal, and tells how to get deeper replies (call again with the reply's own id), giving complete usage context.

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