Skip to main content
Glama

Store Memory

engram_store

Save one durable lesson privately for future workspace agents; returns a confirmation. Use engram_reflect for a milestone with several lessons/outcomes and engram_report_outcome to assess an existing memory.

To correct knowledge, supply the complete replacement in content and old ids in supersedes_memory_ids; change_reason explains the replacement. Old entries retain history; this is not permanent deletion. Similar content may deduplicate and boost confidence, so retries can have effects. Consumes memory/call quota; rejects secrets and low-quality content. OAuth: memory:write.

Input Schema

NameRequiredDescriptionDefault
repoNoRepository slug, e.g. engram or billing-api, within the authenticated workspace. This is a memory filter, not a filesystem path or workspace selector.
tagsNoTopic labels for storing or filtering memory; omit when no useful labels apply.
typeYesKnowledge category: team rule, reusable pattern, pitfall, proven fix, design decision, or library/version quirk.
contentYesOne durable, self-contained lesson, up to 20,000 characters. State the decision/fix and why it matters; exclude secrets and transient debug logs.
contextNoNon-sensitive supporting metadata, e.g. {language: "typescript", component: "auth"}; never credentials or raw customer data.
agent_toolNoCalling client name for attribution, e.g. codex, claude-code, cursor, or gemini. Omit if unknown.
session_idNoExact journal id from start/rehydrate/list_sessions. Disambiguates parallel work; writing requires your active session. Rehydrate may read shared or closed history.
change_reasonNoWhy the supplied memories are superseded, up to 1,000 characters; used with supersedes_memory_ids.
supersedes_memory_idsNoUp to 20 accessible memory ids explicitly replaced by this lesson; omit for an ordinary new memory. Old entries retain their history.

Output Schema

NameRequiredDescriptionDefault
textYesThe same bounded payload as content[0].text; interpret it using format. JSON text contains the endpoint-specific fields described by this tool.
formatYesPayload encoding: Markdown context/checkpoint, serialized JSON data, or plain confirmation text.
truncatedYesTrue when the payload exceeded 120,000 characters and was cut with a notice. Narrow the request; truncated JSON is not parseable.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / session_id
      Added value: +{
      +  "description": "Exact journal id from start/rehydrate/list_sessions. Disambiguates parallel work; writing requires your active session. Rehydrate may read shared or closed history.",
      +  "type": "string"
      +}
  2. Changed12 schema fields changed
    • addedInput schema / properties / agent_tool / description
      Added value: +"Calling client name for attribution, e.g. codex, claude-code, cursor, or gemini. Omit if unknown."
    • addedInput schema / properties / change_reason / description
      Added value: +"Why the supplied memories are superseded, up to 1,000 characters; used with supersedes_memory_ids."
    • addedInput schema / properties / content / description
      Added value: +"One durable, self-contained lesson, up to 20,000 characters. State the decision/fix and why it matters; exclude secrets and transient debug logs."
    • addedInput schema / properties / content / maxLength
      Added value: +20000
    • addedInput schema / properties / context / description
      Added value: +"Non-sensitive supporting metadata, e.g. {language: \"typescript\", component: \"auth\"}; never credentials or raw customer data."
    • addedInput schema / properties / repo / description
      Added value: +"Repository slug, e.g. engram or billing-api, within the authenticated workspace. This is a memory filter, not a filesystem path or workspace selector."
    • addedInput schema / properties / supersedes_memory_ids / description
      Added value: +"Up to 20 accessible memory ids explicitly replaced by this lesson; omit for an ordinary new memory. Old entries retain their history."
    • addedInput schema / properties / supersedes_memory_ids / items / description
      Added value: +"Exact id from a recalled memory; do not substitute a repository name, URL, or the memory text."
    • addedInput schema / properties / tags / description
      Added value: +"Topic labels for storing or filtering memory; omit when no useful labels apply."
    • addedInput schema / properties / tags / items / description
      Added value: +"Searchable topic label, e.g. oauth or postgres."
    • addedInput schema / properties / type / description
      Added value: +"Knowledge category: team rule, reusable pattern, pitfall, proven fix, design decision, or library/version quirk."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "format": {
      +      "description": "Payload encoding: Markdown context/checkpoint, serialized JSON data, or plain confirmation text.",
      +      "enum": [
      +        "markdown",
      +        "json",
      +        "text"
      +      ],
      +      "type": "string"
      +    },
      +    "text": {
      +      "description": "The same bounded payload as content[0].text; interpret it using format. JSON text contains the endpoint-specific fields described by this tool.",
      +      "type": "string"
      +    },
      +    "truncated": {
      +      "description": "True when the payload exceeded 120,000 characters and was cut with a notice. Narrow the request; truncated JSON is not parseable.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "text",
      +    "format",
      +    "truncated"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare only the safety/idempotency profile; the description adds genuinely new behavior: dedup that can boost confidence so retries have side effects (consistent with idempotentHint=false), quota consumption, rejection of secrets/low-quality content, required OAuth scope memory:write, and the fact that superseding retains history rather than deleting. This is exactly the kind of context annotations cannot carry.

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?

Purpose and sibling routing are front-loaded in the first sentence, followed by the correction workflow, side effects, and auth scope. Every sentence carries distinct information, though the second paragraph strings several unrelated facts together and 'returns a confirmation' is mildly redundant given an output schema exists.

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 9-parameter, non-idempotent write tool with quota and auth requirements, the description covers the correction model, dedup side effects, rejection policy, and required scope, and it correctly defers return-value detail to the existing output schema. Nothing an agent needs before calling is missing.

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 goes beyond it by explaining how two parameters interact (content must hold the complete replacement when supersedes_memory_ids is supplied, and change_reason explains that replacement), which is relationship-level meaning the per-field schema text does not convey.

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 ('Save one durable lesson'), plus scope ('privately for future workspace agents'), and explicitly names the siblings it is not (engram_reflect, engram_report_outcome). An agent can distinguish it from the other 16 engram_* tools 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 routing: single lesson here, milestone with several lessons/outcomes via engram_reflect, assessment of an existing memory via engram_report_outcome. It also spells out the correction path (complete replacement in content + old ids in supersedes_memory_ids), which is a distinct usage mode.

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