Skip to main content
Glama

memory_recall

Hybrid recall across memory pillars within the caller's org.

Cheap two-step recall: call with detail="summary" first (id, pillar, title/subject, one-line summary, score, provenance per hit), then memory_get(ids=[...]) for the full text of the few hits you will use. detail="full" (default) returns full records at once.

Default scope searches durable pillars only (semantic, episodic, procedural, skill, strategic, work). Pass scope=["working"] to include this chat's open session turns. Shared brain on durable pillars: pass agent="cursor" only to narrow semantic/episodic. For entity/competitor questions use a short keyword anchor in query (e.g. "mex") plus repo / github. Use explain=true; prefer hits with matched_keyword: true. Default recall is current truth (superseded/merged rows are omitted); pass include_superseded=true for the replacement chain, or as_of=<ISO-8601> for transaction-time point-in-time current truth. When namespace= is set, semantic/episodic hits outside that container are excluded. Hits include a small provenance citation block (id, kind, timestamps, optional retired_at, optional title, optional source) — metadata only, never page HTML. Result includes org + bound.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
kNoMax records to return
repoNoWorkspace slug of your current repo. When set, durable memories tagged for this repo are boosted (ranked higher); nothing is hidden — cross-repo and un-scoped memories still appear. Pass your workspace slug when recalling for code/repo-specific work.
agentNoOptional filter — restrict semantic/episodic results to this agent's writes. Default (None) is the shared brain: every agent's durable memories in the org are visible. Working memory is always scoped to the caller regardless.
as_ofNoISO-8601 timestamp: answer from what was current at that instant (transaction time). created_at <= as_of and not retired before it; soft-deleted rows are never returned. Semantic and episodic memory only (no working buffer, graph expansion, playbooks, skills, strategy or work), read with the same scope and share rules as live recall; relative dates in the query are relative to as_of. Omit for live current truth. A future or unparseable value is a 422 invalid_body on as_of. When set, wins over include_superseded.
queryYesNatural-language query
scopeNoPillars to search. Default (null): durable pillars only (semantic, episodic, procedural, skill, strategic, work) — working is omitted. Add scope=['working'] when you need this chat's open session turns.
detailNo'full' (default) returns every hit's full record. 'summary' is the cheap scan mode and the preferred first step: per hit only id, pillar, kind, title/subject, a one-line summary (~160 chars), score, matched_keyword (with explain=true) and provenance. Then call memory_get(ids=[...]) for the few records you will use. Summary mode ignores verbose.full
githubNoGitHub repository as owner/repo. Boosts memories tagged github:<owner>/<repo> (portable across checkout paths).
explainNoWhen true, include per-record retrieval attribution in metadata.ranking (base RRF, every factor including bounded feedback trust from memory_feedback votes, relevance floor verdict, diversity penalty; its score equals the hit's score), plus read-only feedback_score when votes exist
filtersNoOptional AND filter. Keys (all optional): kind (fact|preference|event|note|outreach|skill|procedure), pillar (semantic|episodic|procedural|skill|strategic|work), subject (exact, case-insensitive), tags (list; record must include every tag), since / until (ISO datetimes). Example: {"kind": "fact", "subject": "HolderBrief", "tags": ["decision"]}. Nested AND/OR/NOT is not supported — omit a key instead. Empty result retries once without the filter (filter_relaxed=true on the result). Not for named playbook/skill/entity — use get-by-name tools.
verboseNoWhen false, truncate record content and omit metadata
namespaceNoOrg-allowlisted container. When set, semantic/episodic hits outside this slug are excluded (not merely demoted). Omit to keep shared-org recall. repo=/github= still boost. Unknown slugs fail. Example: github:acme/app or project:alpha.
time_rangeNoOptional time bounds for episodic/working hits
deadline_secondsNoOptional wall-clock budget for this call. Finished pillars are returned with errors_by_pillar timeout codes and degraded=true instead of letting the MCP client kill the whole call. Omit to use the server TEAMSHARED_RECALL_DEADLINE_SECONDS default (unset = no cutoff).
include_supersededNoWhen true, also return superseded/merged history. Default is current truth only.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / detail
      Added value: +{
      +  "default": "full",
      +  "description": "'full' (default) returns every hit's full record. 'summary' is the cheap scan mode and the preferred first step: per hit only id, pillar, kind, title/subject, a one-line summary (~160 chars), score, matched_keyword (with explain=true) and provenance. Then call memory_get(ids=[...]) for the few records you will use. Summary mode ignores verbose.",
      +  "enum": [
      +    "full",
      +    "summary"
      +  ],
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / as_of
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ISO-8601 timestamp: answer from what was current at that instant (transaction time). created_at <= as_of and not retired before it; soft-deleted rows are never returned. Semantic and episodic memory only (no working buffer, graph expansion, playbooks, skills, strategy or work), read with the same scope and share rules as live recall; relative dates in the query are relative to as_of. Omit for live current truth. A future or unparseable value is a 422 invalid_body on as_of. When set, wins over include_superseded."
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / explain / description
      Previous value: -"When true, include per-record retrieval attribution in metadata.ranking (base RRF, every factor, relevance floor verdict, diversity penalty; its score equals the hit's score), plus read-only feedback_score when votes exist"New value: +"When true, include per-record retrieval attribution in metadata.ranking (base RRF, every factor including bounded feedback trust from memory_feedback votes, relevance floor verdict, diversity penalty; its score equals the hit's score), plus read-only feedback_score when votes exist"
  4. Changed1 schema field changed
    • changedInput schema / properties / explain / description
      Previous value: -"When true, include per-record retrieval attribution in metadata, plus read-only feedback_score when votes exist"New value: +"When true, include per-record retrieval attribution in metadata.ranking (base RRF, every factor, relevance floor verdict, diversity penalty; its score equals the hit's score), plus read-only feedback_score when votes exist"
  5. Changed1 schema field changed
    • addedInput schema / properties / namespace
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Org-allowlisted container. When set, semantic/episodic hits outside this slug are excluded (not merely demoted). Omit to keep shared-org recall. repo=/github= still boost. Unknown slugs fail. Example: github:acme/app or project:alpha."
      +}
  6. Changed1 schema field changed
    • changedInput schema / properties / explain / description
      Previous value: -"When true, include per-record retrieval attribution in metadata"New value: +"When true, include per-record retrieval attribution in metadata, plus read-only feedback_score when votes exist"
  7. Changed1 schema field changed
    • addedInput schema / properties / deadline_seconds
      Added value: +{
      +  "anyOf": [
      +    {
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional wall-clock budget for this call. Finished pillars are returned with errors_by_pillar timeout codes and degraded=true instead of letting the MCP client kill the whole call. Omit to use the server TEAMSHARED_RECALL_DEADLINE_SECONDS default (unset = no cutoff)."
      +}
  8. Changed1 schema field changed
    • addedInput schema / properties / filters
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional AND filter. Keys (all optional): kind (fact|preference|event|note|outreach|skill|procedure), pillar (semantic|episodic|procedural|skill|strategic|work), subject (exact, case-insensitive), tags (list; record must include every tag), since / until (ISO datetimes). Example: {\"kind\": \"fact\", \"subject\": \"HolderBrief\", \"tags\": [\"decision\"]}. Nested AND/OR/NOT is not supported — omit a key instead. Empty result retries once without the filter (filter_relaxed=true on the result). Not for named playbook/skill/entity — use get-by-name tools."
      +}
  9. Changed1 schema field changed
    • addedInput schema / properties / include_superseded
      Added value: +{
      +  "default": false,
      +  "description": "When true, also return superseded/merged history. Default is current truth only.",
      +  "type": "boolean"
      +}
  10. First observed

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so thoroughly: default scope is durable pillars only, default recall is current truth with superseded rows omitted, namespace excludes rather than demotes, provenance is metadata-only (never page HTML), and deadline_seconds degrades per-pillar instead of killing the call. These are meaningful behaviors beyond the name.

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-loads the cheap two-step pattern before the parameter-specific guidance. It is dense and somewhat long, and the detail="summary" explanation partially repeats the schema, but for a 15-parameter tool most sentences still earn their place.

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?

An output schema exists, so return values need not be re-explained, and the description still flags that results include org/bound and per-hit provenance. Combined with the coverage of defaults, scoping, filtering, point-in-time recall, and timeout behavior, an agent has everything needed to call it correctly.

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 description coverage is 100%, so the baseline is 3; the description adds cross-parameter workflow meaning (summary-first then get, when to set scope/agent/explain, short keyword anchors for entity queries) rather than merely restating fields. It stops short of adding full syntax detail, which the schema already provides.

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+resource (hybrid recall across memory pillars) with explicit org scope. It also distinguishes itself from the sibling memory_get by describing the intended two-step flow, so an agent can tell the two apart without opening schemas.

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 when-to-use guidance: call with detail="summary" first, then memory_get for chosen hits; scope=["working"] to include session turns; agent= to narrow semantic/episodic; short keyword anchor for entity questions; explain=true to prefer matched_keyword hits. It names the alternative (memory_get) and the conditions that select each path.

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.