Skip to main content
Glama

Save memory

remember

Save a note, fact, or decision to the user's personal memory store so it can be recalled in future conversations. Saving never deletes or overwrites existing memories. When saving a summary of existing memories, pass their IDs in derived_from so their unresolved conflicts stay visible.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
scopeNoAccess level for this memory: 'shared' (default) or 'private'.shared
sourceNoWho is saving this memory (default: 'owner').owner
contentYesText content of the memory or fact to store
fact_keyNoOptional topic key. Saving again with the same key adds a newer version; earlier versions are kept and marked, nothing is deleted.
source_idNoOptional label linking this memory to a source document or file.
workspaceNoNamed collection to organise memories (default: 'default'). Use to group related memories together.default
confidenceNoConfidence score between 0.0 and 1.0
source_hashNoOptional hash of the source content, used to detect when the source has changed.
derived_fromNoWhen this memory summarizes or condenses existing memories, their IDs. Unresolved conflicts and staleness of those memories stay visible on the summary.
source_revisionNoOptional version tag of the source document.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesUnique identifier of the stored memory
scopeYesVisibility scope (shared, private, or restricted)
statusYesFreshness and trust status: unverified, stale or conflict. A new memory is always unverified
source_idNoIdentifier of the origin document, file, or session
tenant_idNoTenant identifier
workspaceYesTarget workspace containing the memory
created_atYesISO 8601 creation timestamp
project_idNoProject identifier
api_versionNoAPI version of the memory server
source_hashNoCryptographic content hash of the source
derived_fromNoIDs of the memories this one summarizes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / status / description
      Previous value: -"Trust and verification status (verified, unverified)"New value: +"Freshness and trust status: unverified, stale or conflict. A new memory is always unverified"
  2. Changed2 schema fields changed
    • addedInput schema / properties / derived_from
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "When this memory summarizes or condenses existing memories, their IDs. Unresolved conflicts and staleness of those memories stay visible on the summary.",
      +  "title": "Derived From"
      +}
    • addedOutput schema / properties / derived_from
      Added value: +{
      +  "description": "IDs of the memories this one summarizes",
      +  "items": {
      +    "type": "string"
      +  },
      +  "title": "Derived From",
      +  "type": "array"
      +}
  3. Changed7 schema fields changed
    • addedOutput schema / properties / api_version / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / api_version / default
      Added value: +null
    • removedOutput schema / properties / api_version / type
      Removed value: -"string"
    • addedOutput schema / properties / tenant_id / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / tenant_id / default
      Added value: +null
    • removedOutput schema / properties / tenant_id / type
      Removed value: -"string"
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "api_version",
      -  "workspace",
      -  "tenant_id",
      -  "scope",
      -  "status",
      -  "created_at"
      -]New value: +[
      +  "id",
      +  "workspace",
      +  "scope",
      +  "status",
      +  "created_at"
      +]
  4. Changed1 schema field changed
    • changedInput schema / properties / fact_key / description
      Previous value: -"Optional key to update an existing memory with the same topic instead of creating a duplicate."New value: +"Optional topic key. Saving again with the same key adds a newer version; earlier versions are kept and marked, nothing is deleted."
  5. Changed7 schema fields changed
    • changedInput schema / properties / fact_key / description
      Previous value: -"Canonical key to identify updates and detect conflicts on the same fact"New value: +"Optional key to update an existing memory with the same topic instead of creating a duplicate."
    • changedInput schema / properties / scope / description
      Previous value: -"Visibility and access scope (shared, private, or restricted)"New value: +"Access level for this memory: 'shared' (default) or 'private'."
    • changedInput schema / properties / source / description
      Previous value: -"Origin type or author of the memory (e.g. owner, agent, user)"New value: +"Who is saving this memory (default: 'owner')."
    • changedInput schema / properties / source_hash / description
      Previous value: -"Cryptographic hash of the source content for freshness tracking"New value: +"Optional hash of the source content, used to detect when the source has changed."
    • changedInput schema / properties / source_id / description
      Previous value: -"Identifier of the source document, file, or session"New value: +"Optional label linking this memory to a source document or file."
    • changedInput schema / properties / source_revision / description
      Previous value: -"Version or revision tag of the source artifact"New value: +"Optional version tag of the source document."
    • changedInput schema / properties / workspace / description
      Previous value: -"Target workspace partitioning the memories"New value: +"Named collection to organise memories (default: 'default'). Use to group related memories together."
  6. First observed

TDQS

A3.7/5.0
Behavior4/5

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

With readOnlyHint=false and destructiveHint=false already declared, the description goes further by promising 'Saving never deletes or overwrites existing memories' and explaining that re-saving a fact_key keeps earlier versions marked, not removed. That append-only semantics detail is genuine value beyond the annotations, though idempotency behavior is left unaddressed.

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?

Three sentences, all front-loaded with the core purpose and behavioral guarantees first, and no filler or repetition. The derived_from sentence is the weakest in added value but still relevant.

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?

An output schema exists so return values need not be described, and the description covers the store target, the non-destructive guarantee, and the summary-derivation case. Only the scope/source/workspace semantics and idempotency behavior are left entirely to the schema and annotations.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The only parameter named in the description is derived_from, and the explanation ('their unresolved conflicts stay visible') largely restates what the schema property already documents, so it adds little beyond the structured field.

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?

The description states a specific verb and resource: 'Save a note, fact, or decision to the user's personal memory store,' and adds the goal ('so it can be recalled in future conversations'). This distinguishes it well from forget and search, though it does not name those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is only implied — the intent (persist something for later recall) is clear, but there is no explicit when-to-use vs forget/search/validate_memory guidance. The one conditional rule given ('When saving a summary of existing memories, pass their IDs in derived_from') is about a parameter, not about tool selection.

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