mem-context
mem-context is an MCP server that provides persistent temporal memory for AI assistants, enabling storing, searching, recalling, and consolidating development history with vector search and multi-factor relevance scoring.
Remember memories (
remember): Store content with automatic embedding, scope detection, and metadata (tags, code diffs, file changes, error traces). Supports three memory types:episodic,semantic, andpermanent.Recall relevant memories (
recall): Query memories using natural language via vector search with multi-factor scoring (vector similarity, weight decay, recency, scope match, access count, type boost). Supports filtering by scope, type, minimum score, and token budget.Get a memory by ID (
get): Retrieve a single memory with all fields.Update memory metadata (
update): Modify tags, weight, review flags, or other fields on an existing memory.Archive a memory (
forget): Soft-delete by setting weight to 0 — excluded from search but retained in the database.Delete a memory (
delete_memory): Soft-delete (weight=0, kept for audit) or hard-delete (permanently removes from database).Bulk delete memories (
purge_memories): Delete multiple memories filtered by scope, type, or age, with dry-run support.Find consolidation candidates (
consolidation_candidates): Identify memories ready for conclusion extraction, merging, archiving, or decay — for the host model to process.Review flagged memories (
review): List memories marked for review (e.g., contradictions,needs_review=True).Check server status (
status): Get store-wide statistics (counts by type, scope, etc.), optionally scoped to a specific project.Export/import memories: Backup, migrate, or sync memories across devices.
mcp-name: io.github.turbyho/mem-context
mem-context — Temporal Memory MCP Server
Multi-modal RAG engine for AI assistants. Stores conversation history, conclusions, diffs, error traces, and other development artifacts in LanceDB with vector search, multi-factor scoring, and an LLM-driven consolidation pipeline.
Why
AI assistants lose context between sessions. mem-context persists what matters — decisions, patterns, bugs, architecture choices — and surfaces them when relevant via vector search. Memories decay over time unless reinforced by repeated access, mimicking human memory.
Related MCP server: alaya
Features
Vector search with dual backend — LanceDB ANN index for fast approximate nearest-neighbor queries. Primary embedding via Ollama
mxbai-embed-large(1024d, ~670 MB). Localall-MiniLM-L6-v2(384d) fallback when Ollama is unavailable — no GPU or network required. Embeddings are auto-padded to match schema dimension; switching backends is transparent.Multi-factor relevance scoring — six independent factors combine into a single 0–1 relevance score. Each factor models a different aspect:
vector_score(semantic similarity),weight_score(stored importance × time decay),recency_score(age in days),scope_score(project match),access_boost(usage reinforcement),type_boost(permanent > semantic > episodic). The model balances "what's relevant" with "what's still valid."Weight decay with natural memory model — each memory type has a configurable
decay_rate: 0.15/day for episodic (session captures fade fast), 0.03/day for semantic (extracted knowledge persists), 0 for permanent (never decays). Decay is exponential:weight × e^(−rate × days). Frequently accessed memories get a counteracting boost — the system reinforces what you use, archives what you don't.Deduplication by cosine similarity — new memories are compared against existing ones before insertion. At similarity > 0.82, the new memory is merged into the existing one (weight boost + content update) instead of creating a duplicate. Prevents memory fragmentation from repeated captures of the same conclusion across sessions.
LLM-driven consolidation pipeline — 3-phase: extract (3 days), merge (7 days), archive (30 days). The server prepares candidates and prompts; the host model (Claude, DeepSeek, GPT, or local Ollama) does the reasoning. Episodic session captures → extracted conclusions (semantic) → merged permanent knowledge → archived if unused. Runs in the background when
remember()orrecall()is called — no cron needed.Multi-modal storage — LanceDB columns for text content, code diffs, file lists, error traces, tags, and metadata. Each modality is indexed separately; vector search operates on the combined embedding. Stores not just "what happened" but the diff and stack trace that caused it.
Automatic conversation capture — hooks for Claude Code (Stop event) and manual capture for OpenCode. The wrapper binary finds the current session's transcript, parses it into structured messages, and imports them as episodic memories. No manual action needed — every session is archived automatically.
Portable export/import — JSON export strips embeddings (re-generated on import), keeps all metadata. Use for backup, cross-device sync, or migrating between machines. Import deduplicates by ID — safe to run multiple times.
One-command provisioning —
mem-context initdetects installed AI tools (Claude Code, OpenCode, Codex, Cursor), registers the MCP server, injects CLAUDE.md instructions, and installs slash-command skills (6 tools:recall,remember,forget,delete,purge,status).mem-context installadds capture hooks. Two commands, ready to use.
Installation
Linux
# 1. System dependencies
sudo pacman -S python3 python-pip # Arch / Manjaro
# nebo
sudo apt install python3 python3-pip python3-venv # Debian / Ubuntu
# nebo
sudo dnf install python3 python3-pip # Fedora
# 2. Install Ollama (for embedding)
curl -fsSL https://ollama.com/install.sh | sh
ollama serve & # Start Ollama in background
# 3. Install mem-context
python3 -m venv ~/.mem-context/.venv
~/.mem-context/.venv/bin/pip install mem-context
# 4. Add to PATH (add to ~/.bashrc or ~/.zshrc)
echo 'export PATH="$HOME/.mem-context/.venv/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# 5. Pull embedding model (~670 MB)
ollama pull mxbai-embed-large
# 6. Provision — registers MCP server + injects instructions
mem-context init # all detected AI tools
# or target a single tool:
mem-context init --tool claude-code # Claude Code only
mem-context init --tool opencode # OpenCode only
# 7. Install capture hooks (Claude Code, OpenCode)
mem-context install claude-code
mem-context install opencode # optional
mem-context install status # verify
# 8. Restart your AI assistantmacOS
# 1. System dependencies
brew install python@3.11
# 2. Install Ollama
brew install ollama
# Start Ollama: open Ollama.app or run `ollama serve &`
# 3-8. Same as Linux (steps 3-8 above)
python3 -m venv ~/.mem-context/.venv
~/.mem-context/.venv/bin/pip install mem-context
echo 'export PATH="$HOME/.mem-context/.venv/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
ollama pull mxbai-embed-large
mem-context init
mem-context install claude-codeVerify installation
# Check CLI works
mem-context status
# Check Ollama + embedding model
mem-context init --check-ollama
# List detected AI tools
mem-context init --list-tools
# Check capture hooks
mem-context install statusManual MCP registration
If mem-context init can't register the MCP server automatically:
Claude Code:
claude mcp add --scope user mem-context ~/.mem-context/.venv/bin/mem-context-mcpOpenCode: Add to ~/.config/opencode/opencode.json:
{
"mcp": {
"mem-context": {
"command": ["$HOME/.mem-context/.venv/bin/mem-context-mcp"],
"enabled": true,
"type": "local"
}
}
}Updating
When a new version is released, update all components:
# 1. Upgrade the package
~/.mem-context/.venv/bin/pip install --upgrade mem-context
# 2. Update instructions, skills, and agents for all detected tools
mem-context init --force
# Target a single tool:
mem-context init --tool claude-code --instructions-only --force
mem-context init --tool opencode --instructions-only --force
# 3. Reinstall capture hooks (picks up new hook types + absolute paths)
mem-context install claude-code
mem-context install opencode
# 4. Verify everything is current
mem-context install status
mem-context init --list-tools
# 5. Restart your AI assistantWhat gets updated:
Component | Command | What |
CLI + MCP server |
| Binary, libraries, entry points |
Instructions |
| CLAUDE.md, rules files, marked sections |
Skills |
| Slash commands (recall, remember, forget, …) |
Agents |
| Background agents (memory-manager) |
Plugins |
| Client plugins (OpenCode |
Capture hooks |
| Hook entries in settings.json / opencode.json |
Usage
MCP tools (from AI assistant)
Tool | Description |
| Store a memory with auto-embedding |
| Vector search with scoring |
| Archive (weight=0) |
| Retrieve one memory |
| Modify metadata |
| Memory store statistics |
| Flagged memories |
| Consolidation tasks for host model |
CLI
mem-context status # Store statistics
mem-context recall "query" --limit 5 # Search memories
mem-context get <id> # One memory
mem-context forget <id> # Archive
mem-context review # Flagged memories
mem-context consolidate --dry-run # Consolidation candidates
mem-context capture transcript <path> # Import conversation
mem-context export -o memories.json # Export all memories
mem-context import memories.json --re-embed # Import from export
mem-context init --list-tools # Show AI tools
mem-context install status # Hook statusHow It Works
Write path: capture → store → embed
Session ends
→ capture hook fires (Claude Code: Stop)
→ transcript parsed into structured messages
→ each message stored as episodic memory
→ content embedded via Ollama (1024d) or local model (384d)
→ cosine similarity check: > 0.82 → merge, else insertRead path: query → embed → search → score → return
recall("how do we handle auth?")
→ query embedded to 1024d vector
→ LanceDB ANN search (scope-filtered: same project + global)
→ raw candidates scored by 6-factor formula
→ sorted by final_score, filtered by min_score
→ token-budgeted: results accumulated until budget exhausted
→ returned to host model for useConsolidation path: age → candidate → LLM → write-back
remember() or recall() called
→ check last_consolidation > interval_hours (24h)?
→ build_task: scan for episodic > 3d, semantic clusters > 7d
→ send prompts + candidates to host model
→ host model extracts conclusions → new semantic memories
→ host model merges similar semantics → permanent
→ low-weight (< 0.1) memories archived (weight = 0)The host model does all reasoning — the server only prepares structured prompts and candidate lists. This means consolidation quality scales with the host model's capability (Fable 5 > Opus > Sonnet > local Ollama).
Architecture
mem-context/src/mem_context/
├── storage/lance.py LanceDB CRUD, ANN search, FTS, export/import
│ schemas.py PyArrow schemas: memories, relations, conversations
├── retrieval/embedder.py Dual-backend embedding (Ollama + local fallback)
│ scoring.py 6-factor scoring: vector × weight × decay × …
├── capture/formats.py Transcript parsers: Claude Code, OpenCode, JSON, generic
│ wrapper.py Hook entry-point: finds transcript, runs capture
├── consolidation/
│ pipeline.py Build tasks, run extract/merge/archive phases
│ templates.py Prompt templates for each consolidation phase
│ ollama.py Local model fallback for LLM tasks
├── mcp/server.py FastMCP server: 10 tools (remember, recall, forget, …)
├── provision.py AI tool detection, CLAUDE.md injection, skill install
├── config.py YAML + env config with auto-detection
└── scope.py Project scope resolution (config → path hash → global)Scoring
final = vector_score × weight_score × recency_score × scope_score × access_boost × type_boost
vector_score = exp(-cosine_distance)
weight_score = sqrt(weight × e^(-decay_rate × days))
recency_score = e^(-recency_decay_rate × days)
recency_decay_rate = permanent: 0.005, semantic: 0.02, episodic: 0.05
scope_score = same_project: 1.0, global: 0.8, other: 0.4
access_boost = min(2.0, 1.0 + 0.1 × access_count)
type_boost = permanent: 2.0, semantic: 1.2, episodic: 1.0Memory types
Type | Default weight | Decay rate | Use |
| 0.5 | 0.15/day | Session captures, debugging |
| 0.7 | 0.03/day | Extracted conclusions, patterns |
| 1.0 | 0.0 | Architecture decisions, conventions |
Consolidation pipeline
Phase | Trigger | Action |
Extract | 3 days | Episodic → host model extracts conclusions → semantic |
Merge | 7 days | Semantic cluster by embedding → host model merges |
Archive | 30 days | weight < 0.1 → weight = 0 |
The server prepares prompts and candidates; the host model (Claude, DeepSeek, GPT) does the reasoning and writes results back via MCP tools.
Automatic background consolidation
No cron needed — consolidation runs automatically in the background
when remember() or recall() is called, at most once per interval_hours
(default 24h).
Configuration
All parameters are configurable via ~/.mem-context/config.yaml,
.mem-context/config.yaml, or environment variables. See
Configuration docs for all options.
# Quick overrides
export MEM_CONTEXT_CONSOLIDATION_MODEL=qwen2.5-coder:14b # model
export MEM_CONTEXT_CONSOLIDATION_TEMPERATURE=0.1 # 0.0-1.0
export MEM_CONTEXT_CONSOLIDATION_TIMEOUT=300 # secondsParameter | Default | Env var | Description |
| auto-detect |
| 14b→7b→3b, or override |
| 8192 |
| Context window tokens |
| 0.2 |
| Determinism (0.0–1.0) |
| 120s |
| Ollama API timeout |
| 3 |
| Episodic → extraction |
| 7 |
| Semantic → merge |
| 30 |
| Low weight → archive |
| 20 |
| Candidates per run |
| 10 |
| Merge groups per run |
| 24 | — | Hours between runs |
Model auto-detection
If no model is configured, the system:
Detects GPU VRAM (NVIDIA, AMD, macOS Metal/Apple Silicon)
Picks the best model that fits:
14b(9+ GB) →7b(5+ GB) →3b(4+ GB)Auto-pulls it via Ollama if not installed
Falls back to smaller model on OOM errors
No GPU: Minimum qwen2.5-coder:3b (~4 GB system RAM, slow on CPU).
MCP path doesn't need a local model — host LLM does the work.
Scope detection
1. .mem-context/config.yaml → project_id → scope = "proj:" + hash
2. Fallback → scope = "path:" + hash(cwd)
3. `scope="global"` is explicit-only — never auto-detectedRequirements
Python 3.11+
Ollama (for embedding) —
mxbai-embed-large(~670 MB, recommended)Or:
sentence-transformerslocal fallback (all-MiniLM-L6-v2, 384d)Consolidation model: auto-detected and auto-installed (see above)
Installation options
mem-context init — instructions + skills (all 5 tools)
mem-context init # All detected AI tools
mem-context init --tool claude-code # Claude Code only
mem-context init --tool opencode # OpenCode only
mem-context init --tool codex # Codex only
mem-context init --tool cursor # Cursor only (project-scoped)
mem-context init --dry-run # Preview without changes
mem-context init --list-tools # Show what's detectedmem-context install — capture hooks (2 tools)
mem-context install claude-code # Stop hook → settings.local.json
mem-context install opencode # MCP server registration → opencode.json
mem-context install status # Check all
mem-context install uninstall -c claude-code # RemoveManual MCP registration
claude mcp add --scope user mem-context ~/.mem-context/.venv/bin/mem-context-mcpDocumentation
Document | Content |
Detailed setup, Ollama, config | |
Všechny parametry s vysvětlením | |
Tool reference with schemas and examples | |
Storage, scoring, retrieval pipeline | |
Pipeline phases, host model workflow | |
| |
Automatic transcript capture setup | |
28 sections, 100+ test cases |
Development
git clone ssh://git@git.montyho.com/turbyho/mem-context.git
cd mem-context
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
python3 -m pytest tests/ -q # 113 testsLicense
MIT
Available Tools
10 toolsconsolidation_candidatesA
Find memories due for consolidation across the 3-phase pipeline.
Returns structured candidate lists for the host model (Claude, DeepSeek, GPT, or local Ollama) to process. The server prepares prompts and candidates; the host does the reasoning and writes results back via remember()/update()/forget().
Phases:
Extract (3 days): episodic → host extracts conclusions → semantic
Merge (7 days): similar semantics → host merges → permanent
Archive (30 days): low-weight memories → weight = 0
Read-only: yes. Only returns candidates. The host model must explicitly call remember/update/forget to persist consolidation results.
Args: scope: Scope to consolidate. Auto-detected if omitted.
Returns: dict with keys: - to_extract: list of {memory, prompt} — episodic memories to extract - to_merge: list of {memories, prompt, similarity, count} — clusters - to_archive: list of memories with weight < 0.1 - to_decay: list of episodic memories > 7 days - meta: {total_candidates, scope, timestamp}
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Scope to find consolidation candidates for. Auto-detected if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: three phases with timings, division of labor (server prepares, host reasons), and that it does not persist. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points for phases and return keys, front-loaded with the main purpose. Could be slightly tighter but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity, no output schema, and no annotations, the description covers inputs, phases, return dict structure, and interaction with the host model. Fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for the sole parameter 'scope'. The description repeats 'Scope to consolidate. Auto-detected if omitted.' adding minimal value beyond the schema. The overall context helps but not directly for parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it finds memories due for consolidation across a 3-phase pipeline, with specific phases and return types. It distinguishes from sibling tools like remember/update/forget by emphasizing it is read-only and only returns candidates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Read-only: yes. Only returns candidates. The host model must explicitly call remember/update/forget to persist.' This tells when to use (to get candidates) and when not (for writing results).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_memoryA
Delete a memory — soft (archive) or hard (permanent removal).
Two modes:
Soft-delete (default, permanent=False): sets weight=0. Memory stays in LanceDB for audit trail but never surfaces in recall. Reversible via update().
Hard-delete (permanent=True): removes the row from LanceDB entirely. Irreversible. The ID cannot be reused.
Read-only: no. Mutates or removes a row. Prefer forget() for routine archiving; reserve permanent=True for data that must be erased.
Args: id: Memory ID to delete. permanent: False = soft-delete (weight=0), True = remove row from LanceDB permanently. Default: False.
Returns: dict: {'ok': True, 'id': , 'action': 'soft_deleted'} or {'ok': True, 'id': , 'action': 'deleted_permanently'}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID to delete. | |
| permanent | No | False = soft-delete (weight=0, reversible). True = permanent removal from LanceDB (irreversible). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations were provided, but the description thoroughly discloses the tool's mutational behavior, irreversibility of hard delete, and the effect of both modes (setting weight=0 vs removing row). No contradiction with any structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (overview, modes, args, returns). Front-loaded with purpose and key distinction. Could trim minor redundancy (e.g., 'Read-only: no' is implied by 'mutates or removes a row') but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only 2 parameters and no output schema, the description fully covers the tool: explains modes, parameters with defaults, return format, and usage guidance. No gaps remain for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the default behavior of 'permanent', the reversibility note for soft-delete, and the context for each parameter beyond the schema comments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool deletes a memory with two modes (soft/hard), clearly identifying the verb and resource. It distinguishes itself from sibling tools like 'forget' and 'purge_memories' by detailing the deletion behavior and reversibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use each mode: prefers 'forget' for routine archiving and reserves permanent=True for data that must be erased. Also notes reversibility of soft-delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgetA
Archive a memory by setting its weight to zero.
The memory row remains in LanceDB for audit but is excluded from all recall results (weight=0 → weight_score=0 → final_score=0). Use for outdated or incorrect memories. For permanent deletion use delete_memory with permanent=True. For bulk cleanup use purge_memories.
Read-only: no. Mutates the memory's weight to 0. Reversible via update() by setting weight back to a non-zero value.
Args: id: Memory ID (returned by remember() or recall()).
Returns: dict: {'ok': True, 'id': , 'action': 'forgotten'}
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID to archive (returned by remember() or recall()). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explains behavior: weight set to zero, remains in DB but excluded from recall results. States it's not read-only, mutates weight, reversible via update(). No annotations provided, so description carries full burden and does well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, well-structured with sections. Some redundancy in Args vs schema, but overall efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, no output schema, and no annotations, the description covers purpose, behavior, reversibility, return value, and usage alternatives. Complete for agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description repeats the parameter info from schema. Adds no new meaning beyond schema's 'Memory ID to archive (returned by remember() or recall()).' Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Archive a memory by setting its weight to zero.' It specifies the verb (archive), resource (memory), and mechanism. It distinguishes from siblings like delete_memory and purge_memories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use for outdated or incorrect memories.' Provides alternatives for permanent deletion and bulk cleanup, guiding when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getA
Retrieve a single memory by its ID with all metadata.
Read-only: yes. Use to inspect a memory returned by recall() or to verify the state of a memory after update().
Args: id: Memory ID (returned by remember(), recall(), or consolidation).
Returns: dict: Full memory object (content, type, weight, tags, timestamps, embedding excluded), or None if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID to retrieve (returned by remember() or recall()). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully discloses behavior: declares 'Read-only: yes,' details what the return dict includes and excludes (e.g., embedding excluded), and specifies None if not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with a clear purpose line, read-only note, usage contexts, args section, and returns section. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with one parameter, explicit return structure, and no output schema needed, the description is complete and covers all necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'id' is described in the schema and the description adds value by stating it is 'returned by remember(), recall(), or consolidation,' which enriches the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve a single memory by its ID with all metadata,' specifying the verb (retrieve) and resource (memory by ID). This distinguishes it from sibling tools like recall (which likely returns multiple memories) and update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use to inspect a memory returned by recall() or to verify the state of a memory after update().' This guides the agent on appropriate contexts and implies not for listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purge_memoriesA
Selective bulk delete of memories by type, scope, or age.
Removes matching rows from LanceDB permanently. Always use dry_run=True first to preview what would be deleted — this is irreversible.
Read-only: no. Irreversibly removes rows from LanceDB. At least one filter is required to prevent accidental full-table deletion.
Args: scope: Only delete memories in this scope (e.g. 'proj:abc123'). type: Only delete memories of this type — 'episodic', 'semantic', or 'permanent'. older_than_days: Only delete memories older than N days. dry_run: If True, preview count without deleting (default False). Always test with dry_run=True first.
Returns: dict: If dry_run: {'dry_run': True, 'current_total': , 'filters': {...}}. If executed: {'ok': True, 'deleted': , 'remaining': }.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Only delete memories in this scope. | |
| type | No | Only delete memories of this type: 'episodic', 'semantic', or 'permanent'. | |
| older_than_days | No | Only delete memories older than N days. | |
| dry_run | No | If True, preview what would be deleted without actually deleting. Always test with True first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Clearly states deletion is permanent and irreversible, uses strong language ('irreversibly', 'permanently'), and emphasizes safety with dry_run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with overview, safety warnings, parameter list, and return format. No fluff; every sentence contributes essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive bulk delete with multiple filters), the description is comprehensive. Covers purpose, usage, parameters, return values, and safety. No output schema but return values are described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). Description adds value by listing parameter examples and constraints: e.g., type values 'episodic', 'semantic', 'permanent'; emphasizing dry_run for preview. Improves over schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it is a selective bulk delete of memories by type, scope, or age. Distinguishes from siblings like delete_memory (likely single deletion) and forget (different mechanism). Verb 'purge' is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use dry_run=True first and warns that deletion is irreversible. Notes that at least one filter is required to prevent full-table deletion. Does not explicitly compare to siblings but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallA
Search for relevant memories using vector search and six-factor scoring.
Primary read path — call before every non-trivial response to surface past decisions, patterns, and pitfalls. Combines vector similarity (LanceDB ANN), weight decay, recency, scope match, access count, and type boost into a single relevance score.
Read-only: yes. No side effects. May trigger background consolidation (non-blocking) if interval has elapsed.
Args: query: Natural language description of what you're looking for. 5-15 words works best. E.g. "how do we handle API auth?" scope: Scope to search. Auto-detected from project config or CWD. Use 'global' to search only cross-project memories. token_budget: Maximum tokens for returned content across all results (default 2000). Results accumulated until budget exhausted. min_score: Minimum final relevance score 0.0–1.0 (default 0.3). Score ≥ 0.6 = directly applicable, 0.4-0.6 = hint/context, < 0.4 = ignore. limit: Maximum candidates to score from ANN search (default 30). type_filter: Restrict to specific memory types, e.g. ['semantic', 'permanent'] to exclude ephemeral session captures.
Returns: list[dict]: Scored, deduplicated memory objects sorted by final_score descending. Embeddings and binary fields stripped. Empty list if no results above min_score.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language query. 5-15 words works best. E.g. 'how do we handle API auth?' | |
| scope | No | Scope to search. Auto-detected if omitted. Use 'global' for cross-project only. | |
| token_budget | No | Maximum total tokens for returned content across all results. | |
| min_score | No | Minimum relevance threshold 0.0–1.0. >=0.6 directly applicable, 0.4-0.6 hint/context, <0.4 ignore. | |
| limit | No | Maximum candidates to score from ANN search. | |
| type_filter | No | Restrict to specific memory types, e.g. ['semantic', 'permanent']. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly discloses behavior: read-only, no side effects, potential non-blocking background consolidation. It also explains the scoring factors. Given no annotations, the description fully carries the burden of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading the core purpose and usage. Every sentence is informative, though slightly verbose in parameter descriptions which are also in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, an output schema described in text, and no annotations, the description is comprehensive. It covers purpose, behavior, parameter details, return format, and potential background effects, enabling an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema by providing optimal query length (5-15 words), score thresholds for applicability, and details on auto-detection for scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches memories using vector search and six-factor scoring, and identifies itself as the primary read path. This distinguishes it from sibling tools like get (direct retrieval) and remember (storage).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends calling the tool before every non-trivial response, providing strong usage guidance. However, it does not explicitly state when not to use it or directly compare with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rememberA
Store a new memory with automatic embedding and deduplication.
Primary write path — call after a significant decision, tricky bug fix, or new pattern discovery. Auto-generates embeddings via Ollama (1024d) or local all-MiniLM-L6-v2 (384d fallback). Detects project scope from CWD. Deduplicates at cosine similarity > 0.82 — boosts existing memory instead of creating duplicates.
Read-only: no. Creates or updates a row in LanceDB. Triggers background consolidation if interval has elapsed (non-blocking, fire-and-forget).
Args: content: Full memory content in Markdown. Required. First 200 chars auto-summarized if summary is omitted. summary: One-line summary shown in recall results. Default: auto-generated. type: 'episodic' (session captures, decay 0.15/day), 'semantic' (extracted knowledge, decay 0.03/day), or 'permanent' (decisions/ conventions, never decays). Default: 'episodic'. scope: Isolation prefix. Auto-detected from project config or CWD path hash. Use 'global' for cross-project memories. weight: Initial importance 0.0–1.0 (default 0.5). Decays exponentially per type's decay_rate. Frequently-accessed memories get counteracting boost. tags: Optional labels for filtering, e.g. ['testing', 'api', 'pitfall']. embedding: Pre-computed vector. Auto-generated from first 2000 chars of content if omitted. Padding/truncation handled automatically. diff_text: Optional unified diff for code-change memories. diff_files: Optional list of changed file paths. error_trace: Optional stack trace for error/bug memories.
Returns: dict: {'id': , 'summary': , 'action': 'created'} On dedup match: action='boosted' with existing ID and similarity score.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Full memory content in Markdown. Required. First 200 chars auto-summarized if summary omitted. | |
| summary | No | One-line summary for recall display. Auto-generated from first 200 chars of content if omitted. | |
| type | No | Memory type: 'episodic' (session captures, decay 0.15/day), 'semantic' (extracted knowledge, decay 0.03/day), or 'permanent' (conventions/decisions, never decays). | episodic |
| scope | No | Scope prefix for isolation. Auto-detected from project config or CWD. Use 'global' for cross-project memories. | |
| weight | No | Initial importance 0.0–1.0. Decays exponentially per type. Frequently accessed memories get counteracting boost. | |
| tags | No | Optional labels for filtering, e.g. ['testing', 'api', 'pitfall']. Auto-detected from content if omitted. | |
| embedding | No | Pre-computed embedding vector. Auto-generated from first 2000 chars of content via Ollama or local model if omitted. | |
| diff_text | No | Optional unified diff text for code-change memories. | |
| diff_files | No | Optional list of changed file paths for code-change memories. | |
| error_trace | No | Optional stack trace for error/bug memories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and thoroughly discloses behaviors: write operation, creates or updates rows, triggers non-blocking background consolidation, deduplication at cosine similarity > 0.82, embedding generation via Ollama or local model, and decay rates per memory type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but well-structured, with clear sections and front-loaded purpose. It contains valuable details, though slightly verbose; still, every sentence adds meaning and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 parameters and no output schema, the description explains the return dict and covers complex behaviors like dedup, consolidation, and embedding. It provides enough context for an agent to invoke correctly without gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant value beyond schema: details on embedding model (Ollama 1024d, fallback 384d), dedup threshold, decay rates, auto-summarization of first 200 chars, and default behaviors for optional parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it stores a new memory with automatic embedding and deduplication, and specifies it's a write path for significant decisions, tricky bug fixes, or new pattern discovery. It effectively distinguishes from sibling tools like recall (read) and delete_memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends when to use: after significant decisions, bug fixes, or pattern discovery. It implies its write-only nature but does not explicitly state when not to use, though the context is clear given sibling tools. The auto-dedup and background consolidation notes guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reviewA
Return memories flagged for review — contradictions, stale data, etc.
The consolidation pipeline flags memories when it detects conflicts, contradictions, or data that looks stale. Use this to surface issues that need human attention.
Read-only: yes. No side effects. Call periodically to catch data quality issues.
Returns: list[dict]: Memory objects with needs_review=True. May be empty.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explicitly states 'Read-only: yes. No side effects', fully disclosing behavioral traits in the absence of annotations. It also mentions the return may be empty, adding transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with the core purpose, followed by usage guidance, behavioral note, and return format. Every sentence is informative and no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an output schema (implied), the description fully covers what the tool does, when to use it, its side-effect-free nature, and the return structure, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With no parameters and 100% schema coverage, the description adds value by explaining the return type and behavior, though no parameter details are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Return' and resource 'memories flagged for review', clearly stating the tool's purpose. It distinguishes itself from siblings like 'get' (retrieve specific) and 'recall' by focusing on flagged items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises 'Use this to surface issues that need human attention' and 'Call periodically to catch data quality issues', providing clear usage context but lacking explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusA
Return memory store statistics — total, by type, weights, counts.
Read-only: yes. No side effects. Call at session start to check if relevant context exists, or before purge to confirm scope contents.
Args: scope: Optional scope filter. Returns global stats if omitted.
Returns: dict: {total_memories, episodic_count, semantic_count, permanent_count, avg_weight, total_relations, conversation_count, last_consolidation}
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Scope to get statistics for. All scopes if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavior: read-only, no side effects, and returns a dict with specific fields. It also explains the scope parameter's effect. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: summary, behavioral note, usage advice, parameter section, return section. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description details the return dict schema. It covers parameter usage, behavior, and use cases. Fully informs an agent on how and when to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema describes the 'scope' parameter. The description adds value by explaining usage ('Returns global stats if omitted') and linking to use cases (before purge). This provides context beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns memory store statistics with a specific verb ('Return'). It distinguishes from siblings like 'get' or 'recall' by emphasizing aggregate stats rather than individual memories. The read-only and no-side-effects affirmations further clarify its non-destructive nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to call the tool: 'at session start to check if relevant context exists, or before purge to confirm scope contents.' This provides clear guidance versus alternatives and implies not to use for specific memory retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateA
Update memory metadata — tags, weight, needs_review flag, etc.
Cannot change the embedding vector or id (filtered for safety). Use after consolidation or to manually adjust a memory's importance.
Read-only: no. Mutates memory row in LanceDB.
Args: id: Memory ID to update. fields: Dict of field→value pairs. Allowed: tags, weight, summary, content, needs_review, boost_factor, type, scope. Blocked: embedding, id (silently ignored).
Returns: dict: Updated memory object (embedding excluded), or {'error': 'not found'} if ID doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Memory ID to update. | |
| fields | Yes | Field→value pairs. Allowed: tags, weight, summary, content, needs_review, boost_factor, type, scope. Blocked: embedding, id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it mutates the memory row in LanceDB, lists allowed and blocked fields, states that blocked fields are silently ignored, and describes the return value including error case ('not found'). This is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured into sections (purpose, constraints, behavior, args, returns). Every sentence adds value, and there is no redundancy or fluff. It is concise yet informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return structure (updated memory object or error). It fully covers the id and fields parameters, lists allowed values, and addresses error handling. No gaps remain for a mutation tool with these parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds significant meaning beyond the schema by explicitly listing allowed and blocked fields for the 'fields' parameter. This clarifies permissible values and constraints not evident from the schema's additionalProperties: true.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool updates memory metadata including tags, weight, needs_review flag. It distinguishes from sibling tools by mentioning it is used 'after consolidation or to manually adjust a memory's importance.' The verb 'update' and resource 'memory metadata' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use ('after consolidation or to manually adjust a memory's importance') and explicitly states what cannot be done ('Cannot change the embedding vector or id'). However, it does not explicitly contrast with sibling tools like 'delete_memory' or 'forget' for when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.1.3- Changed
consolidation_candidates1 field changed- added
Input schema / properties / scope / description"Scope to find consolidation candidates for. Auto-detected if omitted."
- Changed
delete_memory2 fields changed- added
Input schema / properties / id / description"Memory ID to delete."
- added
Input schema / properties / permanent / description"False = soft-delete (weight=0, reversible). True = permanent removal from LanceDB (irreversible)."
- Changed
forget1 field changed- added
Input schema / properties / id / description"Memory ID to archive (returned by remember() or recall())."
- Changed
get1 field changed- added
Input schema / properties / id / description"Memory ID to retrieve (returned by remember() or recall())."
- Changed
purge_memories4 fields changed- added
Input schema / properties / dry_run / description"If True, preview what would be deleted without actually deleting. Always test with True first."
- added
Input schema / properties / older_than_days / description"Only delete memories older than N days."
- added
Input schema / properties / scope / description"Only delete memories in this scope."
- added
Input schema / properties / type / description"Only delete memories of this type: 'episodic', 'semantic', or 'permanent'."
- Changed
recall6 fields changed- added
Input schema / properties / limit / description"Maximum candidates to score from ANN search."
- added
Input schema / properties / min_score / description"Minimum relevance threshold 0.0–1.0. >=0.6 directly applicable, 0.4-0.6 hint/context, <0.4 ignore."
- added
Input schema / properties / query / description"Natural language query. 5-15 words works best. E.g. 'how do we handle API auth?'"
- added
Input schema / properties / scope / description"Scope to search. Auto-detected if omitted. Use 'global' for cross-project only."
- added
Input schema / properties / token_budget / description"Maximum total tokens for returned content across all results."
- added
Input schema / properties / type_filter / description"Restrict to specific memory types, e.g. ['semantic', 'permanent']."
- Changed
remember10 fields changed- added
Input schema / properties / content / description"Full memory content in Markdown. Required. First 200 chars auto-summarized if summary omitted."
- added
Input schema / properties / diff_files / description"Optional list of changed file paths for code-change memories."
- added
Input schema / properties / diff_text / description"Optional unified diff text for code-change memories."
- added
Input schema / properties / embedding / description"Pre-computed embedding vector. Auto-generated from first 2000 chars of content via Ollama or local model if omitted."
- added
Input schema / properties / error_trace / description"Optional stack trace for error/bug memories."
- added
Input schema / properties / scope / description"Scope prefix for isolation. Auto-detected from project config or CWD. Use 'global' for cross-project memories."
- added
Input schema / properties / summary / description"One-line summary for recall display. Auto-generated from first 200 chars of content if omitted."
- added
Input schema / properties / tags / description"Optional labels for filtering, e.g. ['testing', 'api', 'pitfall']. Auto-detected from content if omitted."
- added
Input schema / properties / type / description"Memory type: 'episodic' (session captures, decay 0.15/day), 'semantic' (extracted knowledge, decay 0.03/day), or 'permanent' (conventions/decisions, never decays)."
- added
Input schema / properties / weight / description"Initial importance 0.0–1.0. Decays exponentially per type. Frequently accessed memories get counteracting boost."
- Changed
status1 field changed- added
Input schema / properties / scope / description"Scope to get statistics for. All scopes if omitted."
- Changed
update2 fields changed- added
Input schema / properties / fields / description"Field→value pairs. Allowed: tags, weight, summary, content, needs_review, boost_factor, type, scope. Blocked: embedding, id."
- added
Input schema / properties / id / description"Memory ID to update."
10 tool updates
v0.1.2- First observed
consolidation_candidates - First observed
delete_memory - First observed
forget - First observed
get - First observed
purge_memories - First observed
recall - First observed
remember - First observed
review - First observed
status - First observed
update
TDQS
Most tools have clear distinct purposes like recall, remember, get, status. However, there is notable overlap between forget, delete_memory (soft-delete), and purge_memories, which all deal with removing or archiving memories, potentially causing confusion.
Naming conventions are mixed: some are single verbs (forget, recall, update), some are verb_noun (delete_memory, purge_memories), and one is a noun phrase (consolidation_candidates). This inconsistency may reduce predictability.
10 tools is well-scoped for a memory management server, covering creation, retrieval, search, updates, deletion, status, and consolidation. Each tool serves a necessary function without being excessive.
The toolset covers the full CRUD lifecycle plus consolidation and review. One minor gap is the lack of a direct 'list all memories' tool, though recall can approximate it with a broad query. Overall, no significant missing operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Long-term memory for AI assistants. Hybrid retrieval, query expansion, auto-topics.
Universal memory for AI agents and tools. Save, organize and search context anywhere.
Persistent memory for AI agents. Search, store, and recall across sessions.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides local vector-based semantic memory storage for AI assistants to persist context and decisions across sessions using local embeddings and LanceDB. It enables private semantic search and session handoff capabilities to maintain long-term project context.705MIT
- AlicenseNot gradedqualityCmaintenanceA local memory engine for AI agents. Stores conversation episodes, consolidates knowledge through a neuroscience-inspired lifecycle, and builds a personal knowledge graph — all in a local SQLite database.14MIT
- AlicenseAqualityBmaintenanceCognitive prosthetic for AI agents. Indexes conversation history from ChatGPT, Claude Code, Cursor, and Gemini CLI into searchable embeddings. 25 MCP tools including tunnel_state (resume where you left off), switching_cost (quantify context-switch penalty), thinking_trajectory (track idea evolution), and alignment_check (decisions vs principles). LanceDB + Parquet, 12ms recall, local-first.2568MIT
- AlicenseAqualityAmaintenancePersistent memory MCP server for AI coding agents (Claude Code, Codex, Gemini CLI). Hybrid retrieval (vector + BM25), cross-encoder reranking, knowledge graph, session checkpoint/resume, and multi-scope isolation. Local-first with LanceDB.3027615MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/turbyho/mem-context'
If you have feedback or need assistance with the MCP directory API, please join our Discord server