Skip to main content
Glama

remember

Store one or more new memories (concepts, decisions, findings). Before filing, search for related content first — use the search results to infer the domain: if related memories exist in a domain, file there. Prefer existing domains over creating new ones; only propose a new domain if no related content is found anywhere. Single: pass fields directly — returns {memory, suggested_connections, applicable_standing_rules}. Batch: pass {items:[{label,domain,...},...]} — returns {memories:[{memory,suggested_connections,applicable_standing_rules},...]}. After filing, review applicable_standing_rules first — these are domain-scoped standing rules surfaced independently of semantic distance so they cannot be crowded out; any with a linkback directive (e.g. "connect each shipped story back here") must be connected immediately. Then review suggested_connections for agreement or contradiction with what you just filed — not only for connect opportunities. Semantic similarity reflects aboutness, not agreement; the server surfaces candidates that may warrant your review but never asserts they conflict. When a filed memory is close enough to an existing memory that they may be worth comparing, the response also includes possible_contradicts=true and possible_contradicts_candidates (id, node_kind, semantic_distance, authority_severity) — same aboutness-not-agreement caveat: the server flags these as worth your attention, never as confirmed contradictions. Review them and call connect(relationship=contradicts) if you judge they actually conflict. ALWAYS call connect for any suggested_connections you accept before ending your session (batch: connect each accepted candidate). On failure, content[0].text is JSON: {"error_class": "conflict|retryable|forbidden|validation|internal", "message": "..."}. Switch on error_class: retry on retryable, surface message on validation, treat conflict as duplicate.

Input Schema

NameRequiredDescriptionDefault
idNoOptional caller-supplied id instead of an auto-generated one. For idempotent external imports: if a memory with this id already exists, remember fails with error_class=conflict rather than overwriting it — call recall(id) to check first, or treat a conflict response as already-imported.
tagsNo
itemsNo
labelNo
domainNo
node_kindNoClassification of this memory. One of: 'transient' (temporary, will expire), 'decision' (a specific decision made, default), 'standing' (a durable rule or principle), 'reference' (a person, system, or org — referential rather than propositional knowledge), 'issue' (an open question or problem), 'option' (a considered alternative), 'assumption' (an unverified premise), 'finding' (an observed fact or result), or 'goal' (a desired outcome). Absent defaults to 'decision'. Takes precedence over the transient bool field when both are supplied.
transientNo
related_toNo
descriptionNo
occurred_atNoWhen this event actually happened (not when it is being filed). Format: YYYY-MM-DD or RFC3339. Two cases: (a) Events you directly witnessed during the current session (e.g. a decision made in the live conversation) — set occurred_at without asking; if the user did not specify a date, use today. (b) Inferred or back-dated historical events you did not directly observe — propose+confirm: state the date and your reasoning, ask the user to confirm, and only set occurred_at once confirmed. Never guess a historical date and never infer it silently from context. Turn-boundary rule: when proposing to file something as significant, the proposal must be the only action in that turn — do not include occurred_at in any remember or revise call in the same message as the proposal. Only set occurred_at in a subsequent call, after the user has replied. Always set why_matters when using occurred_at.
why_mattersNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare non-read-only, non-destructive, closed-world. The description adds far more: a structured failure contract with error_class values and remediation, conflict-as-duplicate semantics (no silent overwrite), the three-part return payload, standing-rule surfacing rationale, and the possible_contradicts flag with its 'flag not assertion' semantics. This is rich behavior beyond 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and search-first guidance are front-loaded, but the body is a dense wall of run-on sentences, and the 'aboutness, not agreement' caveat is repeated near-verbatim for both suggested_connections and possible_contradicts. Much earns its place; the structure and duplication cost it.

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?

With no output schema, the description usefully documents the return payloads for single and batch modes, plus the error envelope — exactly what would otherwise be missing. Given a 15-sibling namespace and 11 params, it is close to complete, with the residual gap being per-field semantics.

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 coverage is 27% across 11 parameters, so the description must compensate. It explains the single-call vs batch {items:[...]} shapes and the id/conflict behavior, but fields like tags, description, related_to, why_matters, and transient are unexplained in both schema and description. Partial compensation only.

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?

Opens with a specific verb+resource+scope: 'Store one or more new memories (concepts, decisions, findings).' It names the sibling it complements ('search for related content first') and distinguishes storage from retrieval, so an agent can place it against recall/search/connect without opening the 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 when-to-use workflow: search before filing, infer the domain from results, prefer existing domains, propose new ones only when nothing related exists. It also states post-filing obligations (review standing rules, connect accepted candidates) and how to switch on error_class, which is unusually complete routing guidance.

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