Skip to main content
Glama

append_relay

Appends a signed provenance record to an append-only relay store, refusing duplicate IDs and assigning the next free ID when none is given.

Instructions

Append one record. Never overwrites: a proposed id already held is refused. Omit id and the store assigns the next free one. Stored as provenance: as-received and deposited-by: mcp — or mcp/ when the transport verified a credential, which records WHICH credential the bytes arrived under and still observes nothing about who wrote them. Those are facts about the channel, not claims about authorship.

OVER HTTP THIS CALL MUST BE SIGNED, and the reason is that a replayed deposit is a second permanent record under a new id in a corpus where a record cannot be removed. Reads need no credential; this does. Send:

Authorization: PE-HMAC agent=, ts=, sig= sig = HMAC-SHA256(key, "POST" + "\n" + ts + "\n" + sha256hex(raw request body))

Sign the exact bytes you send — serialise once and hash that string, because a re-serialisation is different bytes. Do not compress the body. The timestamp is in seconds and must be within 60 of the server's clock. A signature is accepted once, so sign each call afresh. The path is not signed. Ask the operator for a key; no off-the-shelf MCP client can do this for you.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNooptional; e.g. relay-0076. Refused if already held
bytesYesthe record, beginning @p-e/x0

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and delivers: permanent append-only storage, refusal of duplicate ids, provenance labeling, mandatory signing, replay consequences, and one-time signature acceptance. It also discloses channel-vs-authorship semantics, going far beyond a generic 'append' statement.

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 first sentence states the operation and core constraint; the rest is dense, formatted auth detail that is necessary because a mis-signed call fails. Despite length, there is no filler; the provenance paragraph earns its place by explaining side effects.

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

Completeness4/5

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

Covers the hard parts: exact HMAC string, timestamp window, one-time signature, path exclusion, and key procurement. However, with no output schema it does not say what a successful call returns (e.g., assigned id), nor failure responses, so an agent must infer success handling.

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 already describes both parameters at 100% coverage, so the baseline is 3. The description adds meaningful detail by explaining that id is optional and auto-assigned, that a held id is refused, and that bytes must be signed exactly as sent and not compressed. That pushes it above baseline.

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

Purpose4/5

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

Opens with 'Append one record' and immediately defines core semantics: it never overwrites, refuses a held id, and auto-assigns an id when omitted. This clearly distinguishes it from the read/existence siblings, though it does not explicitly name them.

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?

States the write/read asymmetry ('Reads need no credential; this does'), signaling when this tool is required versus unauthenticated read alternatives. It also gives an exclusion condition: a proposed id already held is refused, so callers should omit id or pick a free one. It does not explicitly name sibling tools, but the context is clear.

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