← All tools
Memory
Writing, reading, searching and tagging what Muninn remembers. The core of the system: everything else is built on these.
14Tools
47Parameters
2026-09-03Generated
muninn_memory_add
Writes
5 parameters
Store a new memory with text content and tags. Returns a compact {success, memoryId, length} — length is the stored character count, your self-verify signal (the full body is never echoed; you just sent it). Pass occurredAt only when logging something that happened at a different time than now (e.g. backfilling a past conversation) — otherwise it defaults to now.
| Parameter | Type | Required | Description |
| text |
string |
Required |
The memory content to store |
| tags |
string[] |
default [] |
Tags for categorization e.g. ['session-state'], ['person-log', 'sarah'] |
| occurredAt |
string |
— |
ISO 8601 datetime of when the event actually happened, if different from now. Used for chronological ordering of logs. Defaults to now. |
| project |
string |
— |
Project slug to scope this memory (e.g. 'writing-article'). Omit for user-global memories that apply in all projects. |
| preview |
string |
— |
1–2 sentence summary of this memory written by Claude before calling this tool. If omitted, falls back to an 80-char text truncation. |
muninn_memory_anchor_replace
Writes
5 parameters
Replace the span between beginAnchor and endAnchor (inclusive) with newText. Cheaper than resending the whole body when editing a large block — send only the two anchors and the replacement. Both anchors must appear EXACTLY ONCE in the current body; the server rejects if either is missing or appears more than once (never guesses). beginAnchor must precede endAnchor. To delete a span: pass newText as empty string. Returns {id, length} as self-verify. memoryId accepts a short-form 8-char prefix. Works on artifacts too (artifactId IS memoryId) — a published artifact's public link is refreshed automatically. Optional `expectedRev`: the `rev` from the read you based these anchors on — the write is REJECTED (nothing written) if the body moved since. Omit for a read-then-immediately-write.
| Parameter | Type | Required | Description |
| memoryId |
string |
Required |
Memory ID to edit (full UUID or unique 8-char prefix) |
| expectedRev |
integer |
— |
The `rev` from the read you based this edit on. Rejects the write if the body has changed since. Omit to skip the check. |
| beginAnchor |
string |
Required |
Exact string marking the START of the span to replace — must appear exactly once |
| endAnchor |
string |
Required |
Exact string marking the END of the span to replace — must appear exactly once and after beginAnchor |
| newText |
string |
Required |
Replacement text for the entire span (beginAnchor through endAnchor inclusive). Pass empty string to delete the span. |
muninn_memory_append
Writes
4 parameters
Append text to the END of a memory's body. Cheaper than resending the whole body — only send what's new. Use for growing changelogs, journals, session-state, or any memory that accumulates by accretion. separator defaults to '\n\n' (a blank line). Returns {id, length} as self-verify. memoryId accepts a short-form 8-char prefix. Works on artifacts too (artifactId IS memoryId) — a published artifact's public link is refreshed automatically. Optional `expectedRev`: the `rev` from your last read of this memory — the append is REJECTED (nothing written) if the body moved since, rather than landing on top of someone else's entry. Omit for a read-then-immediately-write, or when appending blind.
| Parameter | Type | Required | Description |
| memoryId |
string |
Required |
Memory ID to append to (full UUID or unique 8-char prefix) |
| expectedRev |
integer |
— |
The `rev` from the read you based this append on. Rejects the write if the body has changed since. Omit to skip the check. |
| text |
string |
Required |
Text to append |
| separator |
string |
default "\n\n" |
String inserted between the existing body and the new text. Default: '\n\n' (blank line). |
muninn_memory_delete
Writes
Destructive
1 parameter
Permanently delete a memory by ID from all storage layers.
| Parameter | Type | Required | Description |
| memoryId |
string |
Required |
The memory ID to delete |
muninn_memory_get
Read only
1 parameter
Retrieve a single memory by its ID. Accepts a short-form ID (a prefix of the full UUID) — it is resolved to the full ID first. Also returns `rev`, the body's revision number (null if never indexed): pass it back as `expectedRev` on a later muninn_memory_update / _anchor_replace / _append and that write FAILS instead of clobbering an edit someone made in between. Only worth carrying when you read now and write later; a read-then-immediately-write needs nothing.
| Parameter | Type | Required | Description |
| memoryId |
string |
Required |
The memory ID to retrieve (full UUID or a unique prefix of it) |
muninn_memory_list
Read only
3 parameters
List all memories for the current user with optional pagination. Use muninn_memory_list_by_tag for tag filtering or muninn_memory_search for semantic search.
| Parameter | Type | Required | Description |
| limit |
integer |
default 50 |
Maximum number of memories to return |
| cursor |
string |
— |
Pagination cursor from a previous response |
| project |
string |
— |
Project slug to filter results. Returns global + project-scoped memories. Omit to return all memories. |
muninn_memory_list_by_tag
Read only
3 parameters
Find memories by exact tag match using the D1 tag index. All specified tags must be present (AND logic). Use for session-state, carryover, person profiles, project logs etc.
| Parameter | Type | Required | Description |
| tags |
string[] |
Required |
Tags to filter by — all must match e.g. ['carryover'] or ['person-log', 'sarah'] |
| limit |
integer |
default 100 |
Maximum number of results |
| project |
string |
— |
Project slug to filter results. Returns global + project-scoped memories. Omit to return all memories. |
muninn_memory_list_tags
Read only
1 parameter
List every distinct tag for the current user with how many memories carry it, most-used first. The vocabulary/discovery counterpart to tag search — answers 'was it github-mirror or mirror-github?' in one call. Pass a project to scope counts to that project (plus global).
| Parameter | Type | Required | Description |
| project |
string |
— |
Project slug to scope counts. Returns global + project-scoped. Omit for all. |
muninn_memory_query
Read only
3 parameters
Query memories with composable filters: fetch by specific IDs, OR-tag match, AND-tag match, and tag exclusion. id and tag clauses are intersected — a memory must satisfy all provided clauses. Use for bundle content audits, convention checks, or any multi-condition fetch. IDs accept full UUIDs or unique 8-char prefixes; ambiguous/missing prefixes are reported in errors[], never silently dropped.
| Parameter | Type | Required | Description |
| id |
string[] |
— |
Fetch these specific memory IDs (full UUIDs or unique 8-char prefixes). |
| tag |
object |
— |
|
| limit |
integer |
default 100 |
|
muninn_memory_search
Read only
3 parameters
Semantically search memories using natural language. Returns the most relevant memories ranked by similarity. Pass project to search strictly within that project; omit it to search across all your memories.
| Parameter | Type | Required | Description |
| query |
string |
Required |
Natural language search query |
| limit |
integer |
default 5 |
Maximum number of results to return |
| project |
string |
— |
Project slug. When set, search is restricted to that project only (does not include global/no-project memories). Omit to search everything. |
muninn_memory_search_tags
Read only
3 parameters
Find memories by PARTIAL tag match — each pattern matches any tag CONTAINING it (substring, case-insensitive). Semantics: OR within a pattern, AND across patterns — e.g. ['brd','mirror'] finds memories that have some brd-ish tag AND some mirror-ish tag. Use when you don't recall the exact tag ('mirror' → github-mirror, gdrive-mirror). For exact tags use muninn_memory_list_by_tag; to see the tag vocabulary use muninn_memory_list_tags.
| Parameter | Type | Required | Description |
| patterns |
string[] |
Required |
Substring patterns, e.g. ['mirror'] or ['brd', 'mirror']. Each matches any tag containing it. |
| limit |
integer |
default 100 |
Maximum number of results |
| project |
string |
— |
Project slug to filter results. Returns global + project-scoped memories. Omit to search all. |
muninn_memory_tag
Writes
3 parameters
Add and/or remove tags on a memory WITHOUT touching its text. Pass deltas, not the full list: add:[...] inserts (deduped), remove:[...] strips. NEVER regenerates the embedding (text is untouched), and you don't resend the existing tags or the body — so this is far cheaper than muninn_memory_update for a tag-only change. Returns compact {id, tags} with the resulting tag list. Use muninn_memory_update instead only when you also need to change text/project/decay, or to REPLACE the whole tag list wholesale. memoryId accepts a short-form 8-char prefix.
| Parameter | Type | Required | Description |
| memoryId |
string |
Required |
The memory ID to retag (full UUID or unique 8-char prefix) |
| add |
string[] |
— |
Tags to add (deduped against existing). Omit if only removing. |
| remove |
string[] |
— |
Tags to remove. Omit if only adding. |
muninn_memory_tag_many
Writes
3 parameters
Apply tag adds and/or removes across MANY memories in one call. Body and embeddings are untouched. Use for project renames, bulk re-tagging, or applying a convention to a whole set. memoryIds accept full UUIDs or unique 8-char prefixes. Returns per-id results and any resolution errors.
| Parameter | Type | Required | Description |
| memoryIds |
string[] |
Required |
Memory IDs to retag (full UUIDs or unique 8-char prefixes) |
| add |
string[] |
— |
Tags to add to each memory (deduped against existing) |
| remove |
string[] |
— |
Tags to remove from each memory |
muninn_memory_update
Writes
9 parameters
Update an existing memory's text, tags, decay score, occurredAt, or project. memoryId may be a short-form (8-char) prefix. Two ways to change text: pass `text` to replace the WHOLE body, OR pass `replacements:[{old,new}]` for surgical find-and-replace — each `old` must match EXACTLY ONCE or the whole update is rejected atomically (nothing is written), so a two-line edit to a long memory costs one pair instead of resending thousands of words. Regenerates the embedding ONLY if text actually changes. tags REPLACES the whole list. Returns a compact {id, tags, project, updatedAt, embeddingRegenerated, length} — length is the stored char count, your self-verify signal (the body is never echoed back). When you used replacements, the result also carries replacements:<count> so you can confirm how many spots were hit. For a tags-only edit, prefer muninn_memory_tag. This is also how you EDIT AN ARTIFACT'S BODY — an artifact's artifactId IS its memoryId; there is no separate muninn_artifact_update. If the artifact is currently published, its public link is refreshed automatically. Optional `expectedRev`: pass the `rev` your last muninn_memory_get / muninn_artifact_get returned and the write is REJECTED (nothing written) if someone changed the body since you read it, instead of silently overwriting them. Omit it when you read and write in the same breath.
| Parameter | Type | Required | Description |
| memoryId |
string |
Required |
The memory ID to update (full UUID or unique 8-char prefix) |
| expectedRev |
integer |
— |
The `rev` from the read you based this edit on. Rejects the write if the body has changed since. Omit to skip the check. |
| text |
string |
— |
New text content — replaces the WHOLE body. Mutually exclusive with replacements. |
| replacements |
object[] |
— |
Surgical find-and-replace pairs applied in order. Each `old` must match exactly once or the entire update is rejected (atomic). Use instead of `text` to edit a few lines of a long memory cheaply. |
| tags |
string[] |
— |
New tags (replaces existing tags) |
| decayScore |
number |
— |
New decay score between 0 and 1 |
| occurredAt |
string |
— |
Corrected ISO 8601 datetime of when the event actually happened. Used for chronological ordering. |
| project |
string |
— |
New project slug. Pass empty string '' to clear back to global. Omit to leave unchanged. |
| preview |
string |
— |
Updated 1–2 sentence summary. Pass when text changed. If omitted, existing preview is preserved. |
← Back to all 70 tools