memory
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Long-term memory that persists across sessions and is shared by every agent connected to it. Search it (search_memory, find_by_entity, get_thread) when past context could help, and save decisions, findings and facts worth keeping with save_memory; prefer append_memory over saving a near-duplicate. search_memory returns snippets; use get_memory (or full_content=true) for the full text. Pass save_memory entities as a JSON array of objects, e.g. [{"type":"service","value":"billing-api"}].
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| save_memoryA | Save a piece of context/memory for future conversations. Warns about likely duplicates (consider append_memory instead) and adds configured auto-tags. Args: topic: Short title (e.g. "billing-api Postgres migration decision", "AAPL stock analysis") content: Detailed context to remember — include conclusions, data, links, action items category: One of: conversation, decision, incident, research, person, project, howto, config, other tags: Comma-separated tags (e.g. "postgres,database,billing") importance: One of: low, normal, high, critical source: Where this came from (default: the connected client's name, e.g. "claude-code") thread_id: Link related memories together with the same thread ID (e.g. "incident-2026-03-24") entities: JSON array of objects, e.g. [{"type":"service","value":"billing-api"},{"type":"person","value":"alice"}] expires_at: Optional expiry date (YYYY-MM-DD) after which this memory is less relevant |
| append_memoryA | Append additional context to an existing memory without replacing it. The new content is added with a timestamp separator. History is tracked. Args: memory_id: The ID of the memory to append to content: New content to add (will be appended with a timestamp) source: Where this update came from (default: the connected client's name) |
| search_memoryA | Search memories by relevance: full-text search with stemming (topic and tag matches rank highest), falling back to substring matching. Returns a snippet per memory; use get_memory for the full text. Expired memories are excluded by default. Args: query: Search query — plain words, hyphenated names, IDs, or FTS5 syntax (e.g. "tags:aws", "datadog OR sentry") category: Filter by category (optional) importance: Filter by minimum importance: low, normal, high, critical (optional) limit: Maximum number of results (default: 10, max: 100) include_expired: Set to true to include expired memories (default: false) full_content: Set to true to return full content instead of snippets (default: false) |
| list_memoriesA | List saved memories with optional filters. Expired memories excluded by default. Args: category: Filter by category (optional) tag: Filter by a single tag, case-insensitive (optional) thread_id: Filter by thread ID to see all related memories (optional) limit: Maximum number of results (default: 25, max: 200) include_expired: Set to true to include expired memories (default: false) |
| get_memoryB | Get the full content of a specific memory including linked entities and edit history. Args: memory_id: The ID of the memory to retrieve |
| update_memoryA | Update an existing memory. Only provided fields are updated. Use append_memory to add context without replacing. Replaced content is kept in the memory's history (see get_memory_history). Args: memory_id: The ID of the memory to update topic: New topic (leave empty to keep existing) content: New content (leave empty to keep existing) category: New category (leave empty to keep existing) tags: New tags (leave empty to keep existing) importance: New importance (leave empty to keep existing) thread_id: New thread ID (leave empty to keep existing) expires_at: New expiry (leave empty to keep existing) |
| delete_memoryB | Delete a memory and its linked entities. Args: memory_id: The ID of the memory to delete |
| find_by_entityA | Find all memories linked to a specific entity (person, service, account, etc.). Args: entity_type: Type of entity (e.g. "person", "service", "account", "bucket", "ticket") entity_value: Value to search, substring match (e.g. "alice", "billing-api", "prod-db") limit: Maximum results (default: 25, max: 200) |
| list_entitiesA | List all unique entities, optionally filtered by type. Useful to see what/who has been referenced. Args: entity_type: Filter by type (optional, e.g. "person", "service") |
| get_threadA | Get all memories in a conversation thread, in chronological order. Args: thread_id: The thread ID to retrieve (e.g. "incident-2026-03-24", "stock-analysis-march") |
| list_threadsA | List all conversation threads with their memory counts and latest activity. |
| get_daily_summaryA | Get memories created or updated on a specific local date, with new ones grouped by category. Args: date: Date in YYYY-MM-DD format, in this machine's local timezone (default: today) |
| get_memory_historyB | Get the full edit/append history of a memory, including content replaced by update_memory. Args: memory_id: The ID of the memory |
| cleanup_expiredA | Find and optionally delete expired memories. Args: dry_run: If true (default), only lists expired memories without deleting. Set to false to actually delete. |
| find_duplicatesA | Find potentially duplicate memories. If topic is provided, finds memories similar to it. If no topic, finds groups of memories whose topics share most of their significant words. Args: topic: Topic to check for duplicates (optional — if empty, scans all memories) limit: Maximum results or groups (default: 10, max: 100) |
| get_statsA | Get overview stats: total memories, breakdown by category, importance, top entities, active threads, expired count. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 16 tools
Most tools have clearly distinct roles (search vs. list vs. entity lookup vs. duplicate detection vs. stats), and descriptions explicitly cross-reference each other (e.g. append_memory vs. update_memory). The main overlap is between list_memories with a thread_id filter and get_thread, which retrieve similar data, plus get_memory vs. get_memory_history which differ only by whether history is included.
Every name follows a predictable snake_case verb_noun pattern (list_memories, get_memory, save_memory, update_memory, delete_memory, find_by_entity). The lone slight variation is cleanup_expired (verb + adjective, no noun), but it is still clear and idiomatic.
16 tools is at the upper edge for a well-scoped set, but each earns its place: core CRUD, search, entity lookup, threads, history, duplicates, stats, and expiry cleanup. A few aggregation tools (get_stats, list_threads, get_daily_summary) could arguably be folded into list/search filters, keeping it just shy of ideal.
Full lifecycle coverage: create (save_memory), read (get_memory, list_memories, search_memory), update (update_memory, append_memory), delete (delete_memory), plus history, entity linking/search, thread grouping, stats, duplicate detection, and expiry cleanup. No obvious dead ends for a memory-store domain.