Skip to main content
Glama
verax-ai

Verax

Official

memory.put

Store a fact with its source and validity window, replacing any same-id item, so later reads return only trusted, non-stale data.

Instructions

Writes one memory item for this tenant, or replaces the item with the same id, in the body's state directory on this machine. Use it to keep a fact for a later memory.get together with where it came from and how long it holds, so a stale fact is not served later. The call passes the policy gate and is recorded; the record carries the item's versionHash, a SHA-256 over id, body and validity window. Returns {ok: true, id, versionHash}. A missing source answers {error: "source-required"}, a missing validUntilMs {error: "validUntilMs-required"}, a malformed id {error: "id-invalid"}.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesIdentifier to store under and read back with memory.get: 1 to 128 characters of letters, digits, '.', '_' or '-', starting with a letter or digit; case-sensitive. An existing item with this id is replaced.
bodyYesThe value to keep, as any JSON: object, array, string, number or boolean. Stored as given and returned as given by memory.get.
sourceYesWhere the value came from, as a JSON object of your choosing, for example {"kind": "document", "ref": "invoice-2026-09.pdf"}. Required; stored with the item so a later reader can weigh it.
validFromMsNoOptional. Unix time in milliseconds from which the item may be served; before it memory.get answers notYetValid. Omit to serve it at once.
validUntilMsYesRequired. Unix time in milliseconds after which memory.get answers stale and withholds the body. Pick the moment the fact should no longer be trusted.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.1

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries full behavioral burden. It discloses that the call passes the policy gate, is recorded, returns a versionHash, and defines error responses for missing source, missing validUntilMs, and invalid id. It also implies mutation via 'writes' and 'replaces', though it doesn't explicitly state destructive effects beyond replacement.

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?

The description is a few sentences, but every sentence adds meaningful information: the core action, usage rationale, recording and hashing behavior, and error cases. It is front-loaded with the primary action and does not waste words.

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?

For a tool with 5 params, nested objects, no output schema, and no annotations, the description covers the essential operational details: what it does, how to use it, what it returns (example), and common errors. It doesn't explain the exact return structure beyond the example, but that is acceptable given no output schema and the example provided.

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. The description adds value by explaining the purpose of source and validUntilMs in the usage section and enumerating error responses tied to specific parameters (e.g., source-required, validUntilMs-required, id-invalid). This goes beyond the schema's basic field descriptions.

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?

States a specific verb (writes/replaces) and resource (one memory item), with explicit scope (tenant, body's state directory on this machine). It also distinguishes from the sibling memory.get by saying 'for a later memory.get', making the action unambiguous.

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?

Provides clear context: use it to keep a fact for later retrieval, with provenance and validity window to avoid serving stale facts. It doesn't explicitly state when not to use it or name alternative tools, but the guidance is sufficient for an agent to decide when to write memory.

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