Skip to main content
Glama

memory_read

Read-onlyIdempotent

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 connector 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.
diversityNo0 (default) returns the matches as ranked. Above 0, a match that is a near-copy of one already picked gives its slot to the next distinct memory (maximal marginal relevance); 1 lets similarity alone decide after the first pick. It changes which memories come back, not their scores, and applies only when there are more matches than top_k and top_k is below 200.
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. Changed2 schema fields changed
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • removedOutput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  2. Changed1 schema field changed
    • addedInput schema / properties / diversity
      Added value: +{
      +  "description": "0 (default) returns the matches as ranked. Above 0, a match that is a near-copy of one already picked gives its slot to the next distinct memory (maximal marginal relevance); 1 lets similarity alone decide after the first pick. It changes which memories come back, not their scores, and applies only when there are more matches than top_k and top_k is below 200.",
      +  "maximum": 1,
      +  "minimum": 0,
      +  "type": "number"
      +}
  3. Changed1 schema field changed
    • 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)."
  4. Changed11 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedInput schema / properties / domain / description
      Previous value: -"Restrict recall to a single namespace, e.g. 'project:x' (default: all)."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."
    • removedInput schema / properties / domain / maxLength
      Removed value: -100
    • 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; 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 / order_by / description
      Previous value: -"'relevance' (default) keeps ranking order; 'recency' re-sorts the matched set newest-first. For a complete newest-first listing without a search, use memory_list_recent."New value: +"'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."
    • changedInput schema / properties / query / description
      Previous value: -"Natural-language query for saved memories. Do not include passwords, API keys, payment data, MFA codes, government IDs, or health records."New value: +"Natural-language description of what you're looking for, e.g. 'database choice for the API' or 'user's preferred testing framework'."
    • changedInput schema / properties / since / description
      Previous value: -"Only memories created at/after this ISO-8601 instant (naive = UTC) — e.g. a last-seen watermark in a shared room."New value: +"Only memories created at/after this ISO-8601 instant (naive = UTC) — e.g. your last-seen watermark in a shared room."
    • changedInput schema / properties / top_k / description
      Previous value: -"Maximum number of memories to return (1-50, default 5)."New value: +"Requested number of results (default: 5, what this connector 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
    • removedOutput schema / properties / items / items / properties / memory_id / format
      Removed value: -"uuid"
    • removedOutput schema / properties / items / items / properties / memory_id / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"
  5. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds real context beyond them: the memory is shared across sessions and across every connected AI tool, results are relevance-ranked (or recency-sorted), each result carries an id, and stale memories are superseded rather than deleted. It stops short of describing latency, result size, or failure modes, but the behavioral picture is substantially richer than the annotations alone.

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?

Front-loads purpose, then persistence scope, then when/when-not, then return shape, then sibling routing — every sentence carries distinct information and there is no filler. Density is high but appropriate for a tool with this much behavioral nuance.

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?

With an output schema present, return values need no further explanation, and annotations cover the safety profile. The description complements both by covering cross-session/cross-tool scope, ranking semantics, the id-based feedback loop, and the correct path for correcting stale memories — nothing an agent needs to call this correctly is missing.

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% and the per-parameter docs already explain domain scoping, order_by, top_k caveats, and diversity in depth. The description mostly restates the relevance-vs-recency behavior already documented on order_by, so the baseline of 3 is correct; it adds workflow framing (ids feed memory_feedback) but little new parameter meaning.

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 (search) and resource (long-term memory) and enumerates the content classes it holds (preferences, decisions, project setup, people, earlier context). It also distinguishes itself from siblings by naming memory_list_recent, memory_write, and memory_feedback in their proper roles, so an agent can route without opening another schema.

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?

Gives explicit positive and negative conditions: 'applies when an answer may depend on something from an earlier session or another tool; it is not needed for general world knowledge.' It further names alternatives for adjacent needs (memory_list_recent for bounded listings, memory_write for corrections, memory_feedback for attribution).

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.