Skip to main content
Glama

memory_read

Read-onlyIdempotent

Search cross-session memory for user preferences, past decisions, or project setup to answer questions requiring earlier context.

Instructions

Search long-term memory for user preferences, past decisions, project setup, people, or earlier context. The memory persists across sessions and across every AI tool the user has connected (Claude, ChatGPT, Cursor, VS Code). It applies when an answer may depend on something from an earlier session or another tool; it is not needed for general world knowledge. Returns matches ranked by relevance (or newest-first with order_by: 'recency'); each result carries an id; after the answer, memory_feedback takes these ids to record which memories helped. A wrong or stale memory is corrected by writing a fresh one with memory_write, not by deleting it.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesNatural-language description of what you're looking for, e.g. 'database choice for the API' or 'user's preferred testing framework'.
sinceNoOnly memories created at/after this ISO-8601 instant (naive = UTC) — e.g. your last-seen watermark in a shared room.
top_kNoRequested number of results (default: 5, what this server asks for when you omit it; the engine's own default of 10 never applies, because the field is always sent). ⚠️ Not a hard cap: association expansion can return MORE than this, and the relevance floor can return fewer — raising it does not reliably widen the result set. For a complete, exactly-bounded listing use memory_list_recent instead.
untilNoOnly memories created at/before this ISO-8601 instant.
domainNoRestrict the search to one domain namespace (e.g. 'project:acme'). Omitting it searches your OWN domains — it does NOT include shared rooms, which are separate stores: to search a room, pass its address here (e.g. 'xroom:room_01ABC'). Find room addresses with memory_list_rooms.
order_byNo'relevance' (default) = ranking order. 'recency' = the matched set re-sorted newest-first. For a complete newest-first feed with no search at all, use memory_list_recent instead.
exclude_authorNoDrop memories written by this author PRINCIPAL — the server-side identity. ⚠️ NOT USABLE FROM HERE YET: the principal is not shown in these results, so there is no value you can obtain through this tool, and a guess like 'me' silently matches nothing and filters nothing. Only pass it if your system knows the exact principal from elsewhere (e.g. the REST API).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
itemsYesMatching memories, ordered per order_by.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.14.2
    • changedInput schema / properties / exclude_author / description
      Previous value: -"Drop memories written by this author PRINCIPAL — the server-side identity. ⚠️ NOT USABLE FROM HERE YET: the principal is not shown in these results, so there is no value you can obtain through this tool, and a guess like 'me' silently matches nothing and filters nothing. Only pass it if your system knows the exact principal from elsewhere (e.g. the REST API). A self-exclusion shortcut is planned."New value: +"Drop memories written by this author PRINCIPAL — the server-side identity. ⚠️ NOT USABLE FROM HERE YET: the principal is not shown in these results, so there is no value you can obtain through this tool, and a guess like 'me' silently matches nothing and filters nothing. Only pass it if your system knows the exact principal from elsewhere (e.g. the REST API)."
  2. Changed3 schema fields changedv0.11.0
    • changedInput schema / properties / top_k / description
      Previous value: -"Requested number of results (default: 5). ⚠️ Not a hard cap: association expansion can return MORE than this, and the relevance floor can return fewer — raising it does not reliably widen the result set. For a complete, exactly-bounded listing use memory_list_recent instead."New value: +"Requested number of results (default: 5, what this server asks for when you omit it; the engine's own default of 10 never applies, because the field is always sent). ⚠️ Not a hard cap: association expansion can return MORE than this, and the relevance floor can return fewer — raising it does not reliably widen the result set. For a complete, exactly-bounded listing use memory_list_recent instead."
    • changedInput schema / properties / top_k / maximum
      Previous value: -50New value: +500
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "items": {
      +      "description": "Matching memories, ordered per order_by.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "author": {
      +            "description": "Sanitized AGENT identity of the writer (never the human principal) — attribution in shared rooms.",
      +            "type": "string"
      +          },
      +          "content": {
      +            "description": "Stored memory content.",
      +            "type": "string"
      +          },
      +          "created_at": {
      +            "description": "UTC creation instant, ISO-8601; absent on legacy memories without a timestamp.",
      +            "type": "string"
      +          },
      +          "domain": {
      +            "description": "User-defined memory namespace or domain.",
      +            "type": "string"
      +          },
      +          "memory_id": {
      +            "description": "Identifier needed to rate or manage this saved memory.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "memory_id",
      +          "content",
      +          "domain"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "items"
      +  ],
      +  "type": "object"
      +}
  3. Changed3 schema fields changedv0.8.1
    • changedInput schema / properties / domain / description
      Previous value: -"Restrict the search to one domain namespace (e.g. 'project:acme'); omit to search across all domains."New value: +"Restrict the search to one domain namespace (e.g. 'project:acme'). Omitting it searches your OWN domains — it does NOT include shared rooms, which are separate stores: to search a room, pass its address here (e.g. 'xroom:room_01ABC'). Find room addresses with memory_list_rooms."
    • changedInput schema / properties / exclude_author / description
      Previous value: -"Drop memories written by this author PRINCIPAL (the server-side identity, not shown in these results). Useful when your system knows principals (e.g. via the REST API); a self-exclusion shortcut is planned server-side."New value: +"Drop memories written by this author PRINCIPAL — the server-side identity. ⚠️ NOT USABLE FROM HERE YET: the principal is not shown in these results, so there is no value you can obtain through this tool, and a guess like 'me' silently matches nothing and filters nothing. Only pass it if your system knows the exact principal from elsewhere (e.g. the REST API). A self-exclusion shortcut is planned."
    • changedInput schema / properties / top_k / description
      Previous value: -"Max results to return (default: 5)"New value: +"Requested number of results (default: 5). ⚠️ Not a hard cap: association expansion can return MORE than this, and the relevance floor can return fewer — raising it does not reliably widen the result set. For a complete, exactly-bounded listing use memory_list_recent instead."
  4. Changed4 schema fields changedv0.7.0
    • addedInput schema / properties / exclude_author
      Added value: +{
      +  "description": "Drop memories written by this author PRINCIPAL (the server-side identity, not shown in these results). Useful when your system knows principals (e.g. via the REST API); a self-exclusion shortcut is planned server-side.",
      +  "maxLength": 200,
      +  "type": "string"
      +}
    • addedInput schema / properties / order_by
      Added value: +{
      +  "description": "'relevance' (default) = ranking order. 'recency' = the matched set re-sorted newest-first. For a complete newest-first feed with no search at all, use memory_list_recent instead.",
      +  "enum": [
      +    "relevance",
      +    "recency"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / since
      Added value: +{
      +  "description": "Only memories created at/after this ISO-8601 instant (naive = UTC) — e.g. your last-seen watermark in a shared room.",
      +  "maxLength": 40,
      +  "type": "string"
      +}
    • addedInput schema / properties / until
      Added value: +{
      +  "description": "Only memories created at/before this ISO-8601 instant.",
      +  "maxLength": 40,
      +  "type": "string"
      +}
  5. First observedv0.3.7

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantive behavior: cross-session/cross-tool persistence, relevance ranking with a recency re-sort option, per-result ids, and the fact that feedback and correction flow through memory_feedback and memory_write rather than deletion. That is real context beyond the structured fields.

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?

Front-loaded with purpose, then when-to-use, then return shape, then follow-up tools — a sensible ordering with no filler. It is on the long side for a single paragraph, but nearly every clause carries decision-relevant information.

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?

For a 7-parameter search tool with full schema coverage, an output schema, and safety annotations, nothing an agent needs to invoke it correctly is missing. The description also covers the read-then-feedback lifecycle that spans several sibling tools.

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 schema already documents query, since, top_k, domain, order_by and the unusable exclude_author. The description restates order_by recency and the relevance ranking but adds no syntax or format meaning beyond the schema, so the baseline 3 applies.

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 and resource ('Search long-term memory') and enumerates the content types it covers (preferences, decisions, project setup, people, earlier context). The scope 'persists across sessions and every connected AI tool' makes it trivially distinguishable from siblings like memory_list_recent or memory_graph.

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?

Explicitly gives the triggering condition ('an answer may depend on something from an earlier session or another tool') and an exclusion ('not needed for general world knowledge'). It also routes two adjacent workflows to alternatives: memory_list_recent for complete bounded listings and memory_write for correcting a stale memory.

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