Skip to main content
Glama

Forget memory

well_forget_memory

Forget memory lines, when the user asks to forget or correct something Well remembers. In Well chat, use all: true to forget every line; for one line, use well_delete_memory_line. Over MCP, name a line with the ids well_get_memory returns, in the same scope: "personal" for the user's own lines, "workspace" for the lines every member shares, which only an owner or admin can forget. When the user asks to forget everything, pass all: true instead of ids, with no well_get_memory read first: it forgets every line of that scope the user sees on the Memory settings page, the newest 1000 per call. Its count leaves out the lines past their expiry, which Well no longer recalls, but they go with the others. Use scope "personal" for it; use "workspace" only when the user names the business or workspace memory. It does not reach the lines Well read from notes, the lines about a company, or the user's lines in their other workspaces: Well can still recall those. A memory with no line to forget is refused (over MCP with the code MEMORY_NOTHING_TO_FORGET): say there is nothing to forget. For a correction, forget the old line, then save the new one with well_remember in the same scope.

lines_fingerprint is set only on a confirmation replay in Well's own chat or on WhatsApp: leave it out, and when a replay carries it, pass it exactly as it is. It ties a forget of everything to the lines the card showed: when the memory changed since, nothing is forgotten and the code is "memory_lines_changed", so call again without it and the person gets a new card.

In Well's own chat the lines go after the user's yes on the confirm card. From an outside assistant, nothing is forgotten by the call: it returns an approval link. Give it to the user, say the change applies only after they approve it in Well, and never claim it is done before they have.

Input Schema

NameRequiredDescriptionDefault
allNotrue to forget every line of the scope the user manages on the Memory settings page (the newest 1000 per call), when the user asks to forget everything ("oublie tout", "delete all my memory"). Omit memory_unit_ids then. Use scope personal; use workspace only when the user names the business or workspace memory.
scopeYesworkspace: shared by every member of the workspace (an owner or admin approves it). personal: only the user's own memory.
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.
conversation_idNoThe conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.
idempotency_keyNoOptional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.
memory_unit_idsNoThe ids of the memory lines to forget, as well_get_memory returns them. Omit it with all.
workspace_scopeNoRestrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.
lines_fingerprintNoSet only on a confirmation replay in Well's own chat or on WhatsApp: leave it out, and when a replay carries it, pass it exactly as it is. It ties a forget of everything to the lines the confirmation showed.

Output Schema

NameRequiredDescriptionDefault
codeNo
errorNo
scopeNo
statusNoFrom an outside assistant: the state of the offer the person approves in Well.
messageNoFrom an outside assistant: the line to give the person, with the link.
missingNoThe ids that name no line of this memory.
successYes
archivedNoThe ids of the lines now forgotten.
expires_atNo
reply_linesNo
approval_urlNoFrom an outside assistant: the link where the person approves it.
lines_remainNoIn Well's chat, for a forget of every line: true when the Memory settings page still lists lines of this memory (one call forgets the newest 1000). Say so, and offer to forget the rest.
not_forgottenNoIn Well's chat, for a forget of every line: what Well can still recall. Say it in one line.
archived_countNoIn Well's chat, for a forget of every line: how many lines are now forgotten. Say this number.
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
near_candidatesNo
newly_connectedNoTools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.
approval_requiredNo
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
flow_action_offer_idNo
conversation_id_sourceNoWhere the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.
near_candidates_truncatedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • removedOutput schema / properties / approval_url / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / approval_url / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / code
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / expires_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / expires_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / flow_action_offer_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / flow_action_offer_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / near_candidates
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "company_id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "company_id",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / near_candidates_truncated
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / reply_lines
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. Changed2 schema fields changed
    • changedOutput schema / properties / archived / description
      Previous value: -"In Well's chat, for a forget by id: the ids of the lines now forgotten."New value: +"The ids of the lines now forgotten."
    • changedOutput schema / properties / missing / description
      Previous value: -"In Well's chat: the ids that name no line of this memory."New value: +"The ids that name no line of this memory."
  3. Changed8 schema fields changed
    • addedInput schema / properties / all
      Added value: +{
      +  "const": true,
      +  "description": "true to forget every line of the scope the user manages on the Memory settings page (the newest 1000 per call), when the user asks to forget everything (\"oublie tout\", \"delete all my memory\"). Omit memory_unit_ids then. Use scope personal; use workspace only when the user names the business or workspace memory.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / lines_fingerprint
      Added value: +{
      +  "description": "Set only on a confirmation replay in Well's own chat or on WhatsApp: leave it out, and when a replay carries it, pass it exactly as it is. It ties a forget of everything to the lines the confirmation showed.",
      +  "pattern": "^[0-9a-f]{32}$",
      +  "type": "string"
      +}
    • changedInput schema / properties / memory_unit_ids / description
      Previous value: -"The ids of the memory lines to forget, as well_get_memory returns them."New value: +"The ids of the memory lines to forget, as well_get_memory returns them. Omit it with all."
    • changedInput schema / required
      Previous value: -[
      -  "scope",
      -  "memory_unit_ids"
      -]New value: +[
      +  "scope"
      +]
    • changedOutput schema / properties / archived / description
      Previous value: -"In Well's chat: the ids of the lines now forgotten."New value: +"In Well's chat, for a forget by id: the ids of the lines now forgotten."
    • addedOutput schema / properties / archived_count
      Added value: +{
      +  "description": "In Well's chat, for a forget of every line: how many lines are now forgotten. Say this number.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / lines_remain
      Added value: +{
      +  "description": "In Well's chat, for a forget of every line: true when the Memory settings page still lists lines of this memory (one call forgets the newest 1000). Say so, and offer to forget the rest.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / not_forgotten
      Added value: +{
      +  "description": "In Well's chat, for a forget of every line: what Well can still recall. Say it in one line.",
      +  "type": "string"
      +}
  4. Changed10 schema fields changed
    • addedOutput schema / properties / approval_url / description
      Added value: +"From an outside assistant: the link where the person approves it."
    • addedOutput schema / properties / archived
      Added value: +{
      +  "description": "In Well's chat: the ids of the lines now forgotten.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / error
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / error_code
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • addedOutput schema / properties / message
      Added value: +{
      +  "description": "From an outside assistant: the line to give the person, with the link.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / missing
      Added value: +{
      +  "description": "In Well's chat: the ids that name no line of this memory.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / resolved_workspace
      Removed value: -{
      -  "additionalProperties": false,
      -  "description": "The workspace that answered, when the caller named none and the token authorizes several.",
      -  "properties": {
      -    "name": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "workspace_id": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "workspace_id",
      -    "name"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / scope
      Added value: +{
      +  "enum": [
      +    "workspace",
      +    "personal"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / status / description
      Added value: +"From an outside assistant: the state of the offer the person approves in Well."
    • changedOutput schema / required
      Previous value: -[
      -  "success",
      -  "status",
      -  "approval_required",
      -  "approval_url",
      -  "flow_action_offer_id",
      -  "expires_at",
      -  "error_code"
      -]New value: +[
      +  "success"
      +]
  5. Changed1 schema field changed
    • changedOutput schema / properties / newly_connected / description
      Previous value: -"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. Start the reply with one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."New value: +"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."
  6. Changed1 schema field changed
    • addedInput schema / properties / workspace_scope
      Added value: +{
      +  "description": "Restrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.",
      +  "enum": [
      +    "family"
      +  ],
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • addedOutput schema / properties / newly_connected
      Added value: +{
      +  "description": "Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. Start the reply with one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "name": {
      +        "type": "string"
      +      },
      +      "service_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "service_id"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  8. Added

TDQS

A4.7/5.0
Behavior5/5

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

Goes far beyond the annotations: discloses the 1000-line-per-call cap, that expired lines are excluded from the count but still forgotten, the explicit exclusions (lines from notes, company lines, the user's lines in other workspaces), the approval-link flow for outside assistants, and the lines_fingerprint replay semantics including the "memory_lines_changed" code. It also resolves the destructiveHint=false ambiguity by stating that from an outside assistant nothing is forgotten until the user approves — consistent with, not contrary to, the annotation.

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 is front-loaded, but the text is long and repeats itself: the personal-vs-workspace rule appears both in the body and again inside the "all" schema description, and the fingerprint guidance is stated twice in the body. Most sentences carry real edge-case value, yet a third of the length could be trimmed without losing instruction.

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 an 8-parameter, confirmation-gated mutation with an output schema, the description covers everything an agent needs to act correctly: scope selection, ids vs all, error codes, the approval gate and the instruction not to claim completion before approval. Return values are correctly left to the output schema.

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 coverage is 100%, so the schema already documents all 8 parameters; the description still adds decision-level meaning — pass all: true *instead of* ids and with no prior well_get_memory read, and leave lines_fingerprint out except on a confirmation replay where it must be passed verbatim. It adds less for workspace_id, conversation_id and idempotency_key, which are left to the schema.

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 ("Forget memory lines") and immediately scopes it to the user intent ("when the user asks to forget or correct something Well remembers"). It names the sibling tools it is not — well_delete_memory_line for a single line in Well chat, well_get_memory for the ids — so an agent can route without reading 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?

Explicit branching: all: true for bulk forget, memory_unit_ids for named lines, personal vs workspace scope with the owner/admin caveat, and "workspace only when the user names the business or workspace memory." It also gives the exact correction recipe (forget the old line, then well_remember in the same scope) and the negative case (nothing to forget → MEMORY_NOTHING_TO_FORGET).

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