Skip to main content
Glama

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.

Python MCP License Tests Glama

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). Local all-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() or recall() 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 provisioningmem-context init detects 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 install adds 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 assistant

macOS

# 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-code

Verify 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 status

Manual 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-mcp

OpenCode: 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 assistant

What gets updated:

Component

Command

What

CLI + MCP server

pip install --upgrade

Binary, libraries, entry points

Instructions

mem-context init

CLAUDE.md, rules files, marked sections

Skills

mem-context init

Slash commands (recall, remember, forget, …)

Agents

mem-context init

Background agents (memory-manager)

Plugins

mem-context init

Client plugins (OpenCode .ts files)

Capture hooks

mem-context install

Hook entries in settings.json / opencode.json

Usage

MCP tools (from AI assistant)

Tool

Description

remember(content, type?, weight?, tags?)

Store a memory with auto-embedding

recall(query, scope?, token_budget?, min_score?, limit?, type_filter?)

Vector search with scoring

forget(id)

Archive (weight=0)

get(id)

Retrieve one memory

update(id, fields)

Modify metadata

status(scope?)

Memory store statistics

review()

Flagged memories

consolidation_candidates(scope?)

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 status

How 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 insert

Read 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 use

Consolidation 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.0

Memory types

Type

Default weight

Decay rate

Use

episodic

0.5

0.15/day

Session captures, debugging

semantic

0.7

0.03/day

Extracted conclusions, patterns

permanent

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               # seconds

Parameter

Default

Env var

Description

model

auto-detect

CONSOLIDATION_MODEL

14b→7b→3b, or override

num_ctx

8192

CONSOLIDATION_NUM_CTX

Context window tokens

temperature

0.2

CONSOLIDATION_TEMPERATURE

Determinism (0.0–1.0)

timeout

120s

CONSOLIDATION_TIMEOUT

Ollama API timeout

extract_after_days

3

CONSOLIDATION_EXTRACT_AFTER_DAYS

Episodic → extraction

merge_after_days

7

CONSOLIDATION_MERGE_AFTER_DAYS

Semantic → merge

archive_after_days

30

CONSOLIDATION_ARCHIVE_AFTER_DAYS

Low weight → archive

max_extract

20

CONSOLIDATION_MAX_EXTRACT

Candidates per run

max_merge

10

CONSOLIDATION_MAX_MERGE

Merge groups per run

interval_hours

24

Hours between runs

Model auto-detection

If no model is configured, the system:

  1. Detects GPU VRAM (NVIDIA, AMD, macOS Metal/Apple Silicon)

  2. Picks the best model that fits: 14b (9+ GB) → 7b (5+ GB) → 3b (4+ GB)

  3. Auto-pulls it via Ollama if not installed

  4. 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-detected

Requirements

  • Python 3.11+

  • Ollama (for embedding) — mxbai-embed-large (~670 MB, recommended)

  • Or: sentence-transformers local 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 detected

mem-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  # Remove

Manual MCP registration

claude mcp add --scope user mem-context ~/.mem-context/.venv/bin/mem-context-mcp

Documentation

Document

Content

Installation

Detailed setup, Ollama, config

Configuration

Všechny parametry s vysvětlením

MCP Tools

Tool reference with schemas and examples

Architecture

Storage, scoring, retrieval pipeline

Consolidation

Pipeline phases, host model workflow

Provisioning

mem-context init, client support

Capture

Automatic transcript capture setup

Test Scenarios

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 tests

License

MIT

Available Tools

10 tools
consolidation_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:

  1. Extract (3 days): episodic → host extracts conclusions → semantic

  2. Merge (7 days): similar semantics → host merges → permanent

  3. 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}

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoScope to find consolidation candidates for. Auto-detected if omitted.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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'}

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory ID to delete.
permanentNoFalse = soft-delete (weight=0, reversible). True = permanent removal from LanceDB (irreversible).

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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'}

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory ID to archive (returned by remember() or recall()).

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory ID to retrieve (returned by remember() or recall()).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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': }.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoOnly delete memories in this scope.
typeNoOnly delete memories of this type: 'episodic', 'semantic', or 'permanent'.
older_than_daysNoOnly delete memories older than N days.
dry_runNoIf True, preview what would be deleted without actually deleting. Always test with True first.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language query. 5-15 words works best. E.g. 'how do we handle API auth?'
scopeNoScope to search. Auto-detected if omitted. Use 'global' for cross-project only.
token_budgetNoMaximum total tokens for returned content across all results.
min_scoreNoMinimum relevance threshold 0.0–1.0. >=0.6 directly applicable, 0.4-0.6 hint/context, <0.4 ignore.
limitNoMaximum candidates to score from ANN search.
type_filterNoRestrict to specific memory types, e.g. ['semantic', 'permanent'].

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesFull memory content in Markdown. Required. First 200 chars auto-summarized if summary omitted.
summaryNoOne-line summary for recall display. Auto-generated from first 200 chars of content if omitted.
typeNoMemory type: 'episodic' (session captures, decay 0.15/day), 'semantic' (extracted knowledge, decay 0.03/day), or 'permanent' (conventions/decisions, never decays).episodic
scopeNoScope prefix for isolation. Auto-detected from project config or CWD. Use 'global' for cross-project memories.
weightNoInitial importance 0.0–1.0. Decays exponentially per type. Frequently accessed memories get counteracting boost.
tagsNoOptional labels for filtering, e.g. ['testing', 'api', 'pitfall']. Auto-detected from content if omitted.
embeddingNoPre-computed embedding vector. Auto-generated from first 2000 chars of content via Ollama or local model if omitted.
diff_textNoOptional unified diff text for code-change memories.
diff_filesNoOptional list of changed file paths for code-change memories.
error_traceNoOptional stack trace for error/bug memories.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoScope to get statistics for. All scopes if omitted.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory ID to update.
fieldsYesField→value pairs. Allowed: tags, weight, summary, content, needs_review, boost_factor, type, scope. Blocked: embedding, id.

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 9 tool updatesv0.1.3
    • Changedconsolidation_candidates1 field changed
      • addedInput schema / properties / scope / description
        "Scope to find consolidation candidates for. Auto-detected if omitted."
    • Changeddelete_memory2 fields changed
      • addedInput schema / properties / id / description
        "Memory ID to delete."
      • addedInput schema / properties / permanent / description
        "False = soft-delete (weight=0, reversible). True = permanent removal from LanceDB (irreversible)."
    • Changedforget1 field changed
      • addedInput schema / properties / id / description
        "Memory ID to archive (returned by remember() or recall())."
    • Changedget1 field changed
      • addedInput schema / properties / id / description
        "Memory ID to retrieve (returned by remember() or recall())."
    • Changedpurge_memories4 fields changed
      • addedInput schema / properties / dry_run / description
        "If True, preview what would be deleted without actually deleting. Always test with True first."
      • addedInput schema / properties / older_than_days / description
        "Only delete memories older than N days."
      • addedInput schema / properties / scope / description
        "Only delete memories in this scope."
      • addedInput schema / properties / type / description
        "Only delete memories of this type: 'episodic', 'semantic', or 'permanent'."
    • Changedrecall6 fields changed
      • addedInput schema / properties / limit / description
        "Maximum candidates to score from ANN search."
      • addedInput 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."
      • addedInput schema / properties / query / description
        "Natural language query. 5-15 words works best. E.g. 'how do we handle API auth?'"
      • addedInput schema / properties / scope / description
        "Scope to search. Auto-detected if omitted. Use 'global' for cross-project only."
      • addedInput schema / properties / token_budget / description
        "Maximum total tokens for returned content across all results."
      • addedInput schema / properties / type_filter / description
        "Restrict to specific memory types, e.g. ['semantic', 'permanent']."
    • Changedremember10 fields changed
      • addedInput schema / properties / content / description
        "Full memory content in Markdown. Required. First 200 chars auto-summarized if summary omitted."
      • addedInput schema / properties / diff_files / description
        "Optional list of changed file paths for code-change memories."
      • addedInput schema / properties / diff_text / description
        "Optional unified diff text for code-change memories."
      • addedInput schema / properties / embedding / description
        "Pre-computed embedding vector. Auto-generated from first 2000 chars of content via Ollama or local model if omitted."
      • addedInput schema / properties / error_trace / description
        "Optional stack trace for error/bug memories."
      • addedInput schema / properties / scope / description
        "Scope prefix for isolation. Auto-detected from project config or CWD. Use 'global' for cross-project memories."
      • addedInput schema / properties / summary / description
        "One-line summary for recall display. Auto-generated from first 200 chars of content if omitted."
      • addedInput schema / properties / tags / description
        "Optional labels for filtering, e.g. ['testing', 'api', 'pitfall']. Auto-detected from content if omitted."
      • addedInput 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)."
      • addedInput schema / properties / weight / description
        "Initial importance 0.0–1.0. Decays exponentially per type. Frequently accessed memories get counteracting boost."
    • Changedstatus1 field changed
      • addedInput schema / properties / scope / description
        "Scope to get statistics for. All scopes if omitted."
    • Changedupdate2 fields changed
      • addedInput schema / properties / fields / description
        "Field→value pairs. Allowed: tags, weight, summary, content, needs_review, boost_factor, type, scope. Blocked: embedding, id."
      • addedInput schema / properties / id / description
        "Memory ID to update."
  2. 10 tool updatesv0.1.2
    • First observedconsolidation_candidates
    • First observeddelete_memory
    • First observedforget
    • First observedget
    • First observedpurge_memories
    • First observedrecall
    • First observedremember
    • First observedreview
    • First observedstatus
    • First observedupdate

TDQS

A4.5/5.0
Disambiguation4/5

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 Consistency3/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 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.
    70
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    14
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Cognitive 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.
    25
    68
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Persistent 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.
    30
    276
    15
    MIT

Latest Blog Posts

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