Skip to main content
Glama
total-agent-memory

total-agent-memory

Persistent, local memory for AI coding agents: Claude Code, Codex CLI, Cursor and any MCP client.

Website and documentation: totalmemory.dev · Quick start · Claude Code guide · Benchmarks · Compare with other tools

Version PyPI npm Docker GHCR MCP License

total-agent-memory (TAM) is an open-source memory server for AI coding agents. Coding agents start every session without memory of earlier ones, so decisions, fixes and project conventions have to be explained again. TAM stores decisions, solutions, facts, errors and session summaries on your machine and returns them through the Model Context Protocol (MCP), so any MCP client can use it without code changes.

Each store is one directory built around a SQLite database. Recall combines full-text BM25, dense embeddings computed locally, fuzzy matching and a knowledge graph, and fuses the ranked lists with reciprocal rank fusion. A local cross-encoder then reranks the result: by default it starts as soon as its model has loaded in the background, and MEMORY_CROSS_RERANK=off turns it off. The default profile makes no LLM call on write or search, so retrieval can be measured offline. With the cross-encoder off, reruns on fresh stores returned the same ranking for every LoCoMo question. With the default setting the first queries of a process can run before the model has loaded, so reruns are not guaranteed to match. Facts can carry validity intervals (kg_add_fact, kg_at), and a newer value of a single-valued fact can retire the older one.

TAM is for developers who use coding agents daily and for researchers who need a memory baseline they can run locally, inspect and change. The same package can also run as a team server: personal, department and company areas are separate stores behind one gateway, with roles, authorship and an audit trail (team server).

Installation

TAM needs Python 3.11 or newer. CI tests Python 3.11, 3.12 and 3.13 on Ubuntu, Windows and macOS.

From PyPI (use a virtual environment, or pipx / uvx):

pip install total-agent-memory          # or: pipx install total-agent-memory
uvx total-agent-memory                  # run once without installing

This installs the total-agent-memory (alias tam) MCP server and the tam-team, tam-remote and lookup-memory commands. The default cross-encoder runs on ONNX through fastembed and needs no extra. A separate sentence-transformers reranker pulls in PyTorch and is an extra: pip install "total-agent-memory[rerank]". The PostgreSQL backend of the team server is the [postgres] extra.

Register it with your clients. Run tam setup at a terminal. The wizard asks "Just me" or "Company server", detects Claude Code, Claude Desktop, Codex, Cursor, Windsurf, Gemini CLI, Cline and OpenCode, and registers the server with the ones you pick (setup wizard).

First start. With no command, tam starts the MCP server on stdio, which is how MCP clients run it. tam --help lists the commands and tam --version prints the version (from 14.11; earlier versions start the server for any argument, so use tam setup --help there). The first start downloads about 330 MB of models: the text embedder (about 240 MB) and the cross-encoder (about 90 MB). The cross-encoder loads in the background, so a short script that exits after a few queries gets the fused order without it. fastembed keeps the models in the system temp directory, which macOS clears from time to time; set TAM_MODEL_CACHE=~/.tam/models to keep them.

Other channels:

Channel

Command

Docker (linux/amd64, linux/arm64)

docker run -p 127.0.0.1:3737:3737 -p 127.0.0.1:37737:37737 -v ~/.tam:/data ghcr.io/vbcherepanov/total-agent-memory:14.10.0 — MCP over HTTP on :3737/mcp, dashboard on :37737; both need the token in ~/.tam/state/http-token (Authorization: Bearer, dashboard: open /login#token=..., the token stays in the URL fragment and is exchanged for an opaque session cookie)

npx connector

npx -y total-agent-memory connect claude-code (or codex, cursor, cline, continue, aider, windsurf, gemini-cli, opencode)

Claude Code plugin (server, skill and capture hooks)

/plugin marketplace add vbcherepanov/total-agent-memory/plugin install total-agent-memory@vbcherepanov

Plugin for Claude Code and Cowork, from the plugin repository (server and skill, no hooks; needs uv)

/plugin marketplace add vbcherepanov/total-agent-memory-plugin/plugin install total-agent-memory@vbcherepanov

The same plugin for Codex CLI

codex plugin marketplace add vbcherepanov/total-agent-memory-plugincodex plugin add total-agent-memory@vbcherepanov

Source checkout with IDE hooks and background services

git clone https://github.com/vbcherepanov/total-agent-memory.git && cd total-agent-memory && ./install.sh --ide claude-code (Windows: install.ps1 -Ide claude-code)

Use one of the two Claude Code plugins, not both. Per-platform details, WSL2, the IDE matrix, uninstalling and troubleshooting are in the installation guide.

Related MCP server: umo-memory

Quick start

  1. Install the package and run tam setup, or add the server to your client by hand. For Claude Code:

    claude mcp add memory -- total-agent-memory

    For clients that use an mcpServers file:

    { "mcpServers": { "memory": { "command": "total-agent-memory" } } }

    If you installed into a virtual environment, use the full path to its total-agent-memory executable.

  2. Restart the client. Memory is stored in ~/.tam/ unless TAM_MEMORY_DIR points elsewhere.

  3. Ask the agent to remember something ("remember that we chose PostgreSQL for billing because of row-level security"). It calls memory_save. In a later session, ask "which database did we choose for billing?"; it calls memory_recall and gets the record back.

To try the server without an agent, this script starts it over stdio with the MCP Python SDK (installed as a dependency), saves one record and recalls it. The SDK passes only a few variables to the server by default, so the script hands over the full environment, including TAM_MEMORY_DIR:

import asyncio
import os

from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client


async def main() -> None:
    server = StdioServerParameters(command="total-agent-memory", env=dict(os.environ))
    async with stdio_client(server) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            await session.call_tool("memory_save", {
                "type": "decision",
                "content": "Chose PostgreSQL over MySQL for the billing service",
                "context": "WHY: row-level security per tenant",
                "project": "demo",
            })
            result = await session.call_tool("memory_recall", {
                "query": "which database for billing", "project": "demo", "limit": 3,
            })
            print(result.content[0].text)


asyncio.run(main())
TAM_MEMORY_DIR="$(mktemp -d)" python quickstart.py

The first run downloads the default embedding model. The output is JSON with the saved decision under results.decision. More examples: tools and interfaces.

Running the tests

The tests run from a source checkout. These commands mirror the CI workflows in .github/workflows:

git clone https://github.com/vbcherepanov/total-agent-memory.git
cd total-agent-memory
python3 -m venv .venv
.venv/bin/pip install -e . -r requirements-dev.txt

export FASTEMBED_CACHE_PATH="$PWD/.tam-models" TAM_MEMORY_DIR="$PWD/.tam-test-memory"
.venv/bin/python tests/smoke/prewarm_models.py   # downloads the text and code embedding models and the cross-encoder (~940 MB) once
.venv/bin/python -m pytest tests -q

The tests need no API keys and no LLM; the full suite takes 15 to 20 minutes on a laptop. Do not set MEMORY_LLM_ENABLED=false for the full suite: the configuration tests check LLM auto-detection. Tests that need services you do not have are skipped:

  • PostgreSQL (team server backend): install the extra with .venv/bin/pip install -e ".[postgres]", then run .venv/bin/python -m pytest tests -m postgres --backend=postgres or --backend=both. Without TAM_TEST_PG_URL the fixtures start a pgvector container through Docker. See CONTRIBUTING.md and .github/workflows/postgres.yml.

  • Browser tests (tests/browser, Playwright with Chromium, Firefox and WebKit) run in the image built from docker/Dockerfile.browser; see the browser job in .github/workflows/smoke.yml.

  • Installed-package smoke test: python tests/smoke/installed_runtime.py checks an installed wheel over local and remote MCP.

Reproducing the benchmarks

The retrieval benchmarks (LoCoMo, LongMemEval, BEAM) need no API key and run with scripts in benchmarks/ once the public datasets are downloaded. The table below was measured on v13.0.0, before the cross-encoder became the default in 14.5, so it describes retrieval without the cross-encoder and not a default install of the current version:

Benchmark

Metric

Result

LongMemEval (470 questions)

R@5 (recall_any)

95.1%

LoCoMo (1,536 questions)

R@5

0.607

BEAM, 1M-token scale (625 probes)

R@5

0.448

Default settings score higher on LoCoMo and take much longer per query. In the JOSS review of v14.6.0 the editor measured R@5 of about 0.745 at about 495 ms median with the defaults, against 0.607 at about 18 ms with MEMORY_CROSS_RERANK=off. Our own runs of v14.6.0, three on a fresh store per setting, gave R@5 0.611 with the cross-encoder off and 0.746 with the default and with on, at about 0.95-1.0 s median per query on an Apple M2 Max; the median depends on the CPU. Each setting returned the same ranking for every question in all three runs. With the default, the first query of a process can arrive before the cross-encoder has loaded and keeps the fused order; in these runs that changed one question out of 1,986 (rows, reports and commands).

Dataset locations, commands, end-to-end (LLM-judged) accuracy, negative controls, latency and the 14.x studies are in docs/benchmarks.md.

Documentation

Citation

A paper describing TAM is under review at the Journal of Open Source Software (paper/paper.md). Until it is published, please cite the software and the preprint:

Cherepanov, V. total-agent-memory (version 14.10.0) [software]. https://github.com/vbcherepanov/total-agent-memory

Preprint: doi:10.5281/zenodo.23011523

Citation metadata for the software is in CITATION.cff.

Contributing

Issues, pull requests and benchmark reproductions are welcome. See CONTRIBUTING.md for the development setup, the rules for a pull request and the commit convention. Report security issues privately as described in SECURITY.md. Donations to support development: PayPal.

License

MIT. See LICENSE. Third-party licenses are listed in THIRD-PARTY-LICENSES.md.

Available Tools

79 tools
analogizeB
Read-onlyIdempotent

Find past solutions/lessons from OTHER projects whose feature set overlaps with the given problem text (Jaccard similarity).

Inputs: text (required), limit, min_score, only_types, +1 more.

benchmarkA
Read-onlyIdempotent

Run the eval harness: recall_at_k, prevention_rate, latency percentiles. Loads scenarios from evals/scenarios/*.json by default.

Inputs: scenarios_path.

classify_taskC
Read-onlyIdempotent

v8.0: classify task into L1-L4 complexity + suggested phases.

Inputs: description (required), project.

file_contextA
Read-onlyIdempotent

BEFORE editing a file, call this to surface past errors, lessons, and related rules for that file path. Returns risk_score ∈ [0, 1].

Inputs: path (required), limit, project.

ingest_codebaseB

Parse a file or directory into semantic AST chunks (functions, classes, methods) across 8 languages. Returns chunk count + sample.

Inputs: path (required), include, sample_limit.

kg_add_factB

Record a temporal fact assertion (subject, predicate, object). Supersedes any prior assertion with same (s,p) and different object — full history is preserved. Use for evolving architectural decisions.

Inputs: object (required), subject (required), predicate (required), context, +4 more.

kg_atB
Read-onlyIdempotent

Point-in-time query: return fact assertions valid at timestamp (ISO 8601). Omit timestamp for currently-valid facts.

Inputs: limit, object, project, subject, +2 more.

kg_invalidate_factB
Destructive

Close a currently-valid fact assertion. History is retained.

Inputs: object (required), subject (required), predicate (required), at, +2 more.

kg_timelineB
Read-onlyIdempotent

Full chronological history of assertions for a subject.

Inputs: subject (required), limit, project, predicate.

learn_errorC

Structured error capture: file, error, root_cause, fix, pattern. After N (default 3) errors share the same pattern, a prevention rule is auto-synthesized into the rules table.

Inputs: fix (required), file (required), error (required), pattern (required), +4 more.

list_intentsA
Read-onlyIdempotent

List recent user prompts from the intents table, newest first. Filter by project and/or session. Max 500 rows.

Inputs: limit, project, session_id.

memory_answerA

Generate and verify a cited answer using the configured reasoning LLM. Evidence carries recording dates; when records about the same subject disagree, the latest one gives the current value and the answer names the value it replaced. First runs negative retrieval: a contradiction-seeking second search; a score >= 0.60 hands both sides to the reader and answers with a caveat (MEMORY_CONTRADICTION_POLICY=abstain refuses instead), 0.30-0.60 answers with a caveat (see negative); MEMORY_CONTRADICTION_SCORER=jev scores the pairs with TypeSafe's Jev instead of the LLM. Up to one missing-relation retrieval and eight LLM calls including inversion retry and bounded quote repair. Explicit project required. Citation offsets refer to returned evidence content. Ordinary recall remains local.

Inputs: query (required), project (required), type, limit, +3 more.

memory_associateA

Associative recall — brain-like spreading activation through knowledge graph. Finds memories through concept resonance, not keyword search. In 'composition' mode, finds minimum set of memories covering all needed concepts.

Inputs: query (required), mode, project, max_results, +1 more.

memory_conceptsC
Read-onlyIdempotent

List or search concepts in the knowledge graph.

Inputs: type, limit, query, include_memories.

memory_consolidateA

Find and merge duplicate/similar knowledge records. Keeps the longest version, supersedes shorter duplicates. Reduces noise in recall results.

Inputs: dry_run, project, threshold.

memory_consolidate_statusA
Read-onlyIdempotent

v11.0 W2-G: report the consolidation daemon state — per-project last-run, active locks, recent activity. Use to verify the idle-project worker is making progress without interfering with active work.

Inputs: no named parameters.

memory_context_buildC
Read-onlyIdempotent

Build optimal context for a query. Combines: spreading activation + knowledge graph + episodes + skills + self-model. The 'brain thinking' tool.

Inputs: query (required), project, max_tokens.

memory_deleteA
DestructiveIdempotent

Delete a knowledge record. By default a soft delete: the record leaves search results and vectors but stays in the database. hard=true erases it for good, with its earlier versions, derived rows and its text in the raw call log (use for personal data or anything that must not be kept).

Inputs: id (required), hard.

memory_entity_resolveB
Idempotent

v11.0 W1-F: resolve a mention to its canonical entity within a project+type. Cross-session coreference via name/alias index + embedding cosine. Returns canonical_id, matched_via, and is_new flag. Pronouns return -1.

Inputs: mention (required), type, project, threshold, +1 more.

memory_episode_recallB
Read-onlyIdempotent

Find past episodes (experiences). Search by concepts, outcome, project, or impact.

Inputs: limit, query, outcome, project, +2 more.

memory_episode_saveA

Save an episode — narrative of WHAT HAPPENED and HOW. Not just facts, but the journey: what was tried, what failed, what worked.

Inputs: outcome (required), narrative (required), project, concepts, +4 more.

memory_eval_contradictionsB
Read-onlyIdempotent

v11.0 Phase 8: runs contradiction_detector against a labelled fixture. Requires balanced/deep mode (LLM). Returns {status: 'not_implemented', ...} if module is unavailable.

Inputs: mode, fixture_path.

memory_eval_entity_consistencyC
Read-onlyIdempotent

v11.0 Phase 8: verifies entity_dedup canonicalization is stable across repeated saves of variant tag spellings.

Inputs: mode.

memory_eval_locomoB
Read-onlyIdempotent

v11.0 Phase 8: run the LongMemEval-style recall+prevention scenario suite (loaded from evals/scenarios/) against the live store. Forces MEMORY_MODE=fast by default. Returns {scenarios_total, scenarios_passed, recall_at_5, recall_at_10, latency_ms, mode, llm_calls_during_eval, network_calls_during_eval}.

Inputs: mode, limit, top_k, scenarios_path.

memory_eval_long_contextC
Read-onlyIdempotent

v11.0 Phase 8: large-context recall scenario. Saves N records and queries them at the tail. Reuses eval_harness scenarios tagged 'long_context' if present.

Inputs: mode, top_k, n_records.

memory_eval_recallC
Read-onlyIdempotent

v11.0 Phase 8: generic recall benchmark on a dataset path or a small built-in fixture. Same payload shape as memory_eval_locomo.

Inputs: mode, limit, top_k, dataset_path.

memory_eval_temporalC
Read-onlyIdempotent

v11.0 Phase 8: temporal recall using temporal_kg + temporal_filter. Returns {status: 'not_implemented', ...} when modules are missing.

Inputs: mode, limit.

memory_exploration_recallA
Read-onlyIdempotent

Before re-reading files to answer a codebase question, look up earlier exploration conclusions. Results are ranked by question similarity; each carries status 'fresh' (every source file is byte-identical to when the conclusion was recorded: reuse it) or 'stale' (changed_files / missing_files list what to re-read).

Inputs: project (required), question (required), root, limit, +1 more.

memory_exploration_recordA
Idempotent

Record the conclusion of a codebase exploration together with the SHA-256 of every file read to reach it. Call it after answering a structural question by reading files (how X is wired, where Y is decided). Paths are stored relative to root (default: the server's working directory); files outside root are refused. Up to 64 files of at most 32 MB each. Recording the same question again for the project replaces the earlier memo.

Inputs: files (required), project (required), question (required), conclusion (required), +1 more.

memory_exportA
Read-onlyIdempotent

Export all knowledge as JSON for backup or migration. Includes knowledge, sessions, relations and the agent action log.

Inputs: project, save_to_file.

memory_extract_sessionA

Get pending session transcripts for knowledge extraction. Previous sessions are auto-captured on exit. Use action='list' to see pending, 'get' to read transcript, then save knowledge via memory_save, then 'complete' to mark as processed.

Inputs: action (required), chunk, session_id.

memory_forgetA
DestructiveIdempotent

Apply retention policy: archive stale records (>180d, never recalled, low confidence), purge very old archived records (>365d), prune the agent action log past TAM_ACTION_LOG_RETENTION_DAYS. Keeps memory clean.

Inputs: dry_run.

memory_getA
Read-onlyIdempotent

Batched fetch by ID — complement to memory_recall(mode='index'). Returns full content for ONLY the IDs the caller chose after inspecting an index. Typical 3-layer flow: recall(mode='index') → pick IDs → memory_get(ids=[...]).

Inputs: ids (required), detail.

memory_graphB
Read-onlyIdempotent

Query the unified knowledge graph. Returns neighborhood of a node: connected rules, skills, memories, concepts, entities.

Inputs: node (required), depth, types.

memory_graph_indexA
Idempotent

Reindex CLAUDE.md rules and skills into the knowledge graph. Run after modifying CLAUDE.md or adding new skills.

Inputs: target.

memory_graph_statsA
Read-onlyIdempotent

Knowledge graph statistics: nodes, edges, communities, top concepts, health metrics.

Inputs: no named parameters.

memory_historyB
Read-onlyIdempotent

View version history for a knowledge record. Shows the chain of superseded versions (newest → oldest), enabling time-travel through knowledge evolution.

Inputs: id (required).

memory_index_passagesB

Build local passage indexes before evidence searches. Repeat using next_after_id until remaining=0.

Inputs: project (required), limit, after_id.

memory_observeA

Save a lightweight observation (auto-capture). No dedup, no ChromaDB — fast and cheap. Use for tracking file changes, tool usage, and session activity. Observations auto-cleanup after 30 days.

Inputs: summary (required), tool_name (required), project, files_affected, +1 more.

memory_perf_reportA
Read-onlyIdempotent

v11.0: dump in-process telemetry counters (search_total_ms, embed_ms, fts_ms, vector_ms, llm_calls, network_calls) plus persistent embedding_cache stats. Use to verify the fast hot path stays clean.

Inputs: no named parameters.

memory_rebuild_embeddingsA
DestructiveIdempotent

v11.0: re-encode every record (or every record in a given embedding space) and update the binary + float32 vectors. Idempotent. Pass embedding_space='code' to refresh only code rows after switching the code embedder. Returns {rebuilt: int, skipped: int}.

Inputs: limit, project, batch_size, embedding_space.

memory_rebuild_ftsA
DestructiveIdempotent

v11.0: drop and rebuild the SQLite FTS5 virtual table from knowledge rows. Useful after migrations or content_type column changes that the FTS triggers didn't see. Returns {rebuilt: int}.

Inputs: no named parameters.

memory_recallA
Read-onlyIdempotent

Search ALL memory: decisions, solutions, facts, lessons from ALL past sessions. 6-stage pipeline: FTS5+BM25 → semantic → fuzzy → graph → (optional) CrossEncoder → (optional) MMR. Default: hybrid mode (BM25 + semantic + RRF). Use BEFORE starting any task. v11.0: routes to fast hot path when MEMORY_MODE=fast (default). Use memory_search_fast / memory_explain_search for explicit fast routing.

Inputs: query (required), mode, type, as_of, +18 more.

memory_recall_iterativeA
Read-onlyIdempotent

v11.0 W1-B: IRCoT-style iterative retrieval. Decomposes the query into sub-questions, retrieves per sub-question, and asks a planner LLM whether more retrieval is needed. Best for multi-hop questions. Returns unified evidence + provenance per iteration.

Inputs: query (required), project, llm_model, max_iters, +1 more.

memory_reflect_nowB

Run reflection (the 'sleep' process). Consolidates knowledge, finds patterns, generates skill proposals, updates self-model.

Inputs: scope.

memory_relateB

Create a typed relation between two knowledge records. Enriches graph expansion in Tier 4 search. Types: causal, solution, context, related, contradicts.

Inputs: type (required), to_id (required), from_id (required).

memory_reportA
Idempotent

Activity report for a project (or all projects) over a period: today (period=day), this week (week, ISO Monday-Sunday), this month (month), all time (all) or custom since/until dates; offset=-1 gives the previous day/week/month ('last week'). Sections: summary numbers with deltas against the previous equal period, key decisions with their WHY, solutions and fixes, errors with recurring patterns and lessons, open next steps and pitfalls from session summaries, most touched files, entities/technologies, and a day-by-day timeline. Every item carries source IDs (#id -> memory_get). Built deterministically from stored records, no LLM; include_llm_summary=true adds an optional paragraph from the configured LLM. Periods use the local timezone (or tz). save=true writes the Markdown to /reports//-.md. Use it when the user asks what happened, for a status/progress report, a weekly summary or a retrospective.

Inputs: tz, save, limit, since, +6 more.

memory_saveA

Save knowledge explicitly. Types: decision (MUST include WHY in context), solution, lesson, fact, convention. Saving the same words again (case and punctuation aside) replaces the stored record, so it carries the latest date; any other text, including a changed value, is stored as a new record. v10: a quality gate scores the record before save; below-threshold records are rejected with a rejected_by_quality_gate: true response (override with MEMORY_QUALITY_GATE_ENABLED=false). Use importance to surface critical decisions at recall time (boosts the final RRF score). v11.0: routes to fast hot path when MEMORY_MODE=fast (default). Use memory_save_fast for explicit fast routing.

Inputs: type (required), content (required), tags, coref, +9 more.

memory_save_fastA

v11.0: same as memory_save but routes through the fast hot path (skip_quality=True, no LLM, no async-blocking). Use when you want to bypass the v10 quality gate without flipping the env flag.

Inputs: type (required), content (required), tags, branch, +8 more.

memory_search_by_tagA
Read-onlyIdempotent

Search knowledge by tag. Returns all active records with matching tag (partial match). Useful for categorical browsing.

Inputs: tag (required), project.

memory_search_fastA
Read-onlyIdempotent

v11.0: like memory_recall but with rerank=False, diverse=False forced. Deterministic fast path — zero LLM, FastEmbed-only.

Inputs: query (required), type, limit, branch, +4 more.

memory_self_assessB
Read-onlyIdempotent

Self-assessment: how competent am I in given domains? Shows level, confidence, blind spots.

Inputs: concepts, full_report.

memory_skill_getC
Read-onlyIdempotent

Find skills matching a trigger. Skills are learned procedures — HOW to do things.

Inputs: name, trigger, list_all.

memory_skill_updateA

Record skill usage or refine a skill. Updates success rate and metrics.

Inputs: success (required), skill_id (required), notes, new_steps, +1 more.

memory_statsA
Read-onlyIdempotent

Memory statistics with health metrics: sessions, knowledge by type/project, retention zones (active/archived/consolidated), stale records, storage size, config, write path (embedding backfill queue, outbox intents, swallowed errors by component over 24h, importance budget clamps).

Inputs: no named parameters.

memory_temporal_queryB
Read-onlyIdempotent

v11.0 W1-C: deterministic temporal reasoning — Allen interval relations, duration arithmetic (days/weeks/months/years), and natural-language date normalization (en + ru). Pass op=relation|duration_between|normalize.

Inputs: op (required), a, b, lang, +6 more.

memory_timelineB
Read-onlyIdempotent

Browse session history. sessions_ago=N for 'N sessions ago', session_number=1 for first session, date_from/date_to for date ranges.

Inputs: limit, query, date_to, project, +3 more.

memory_updateA
Destructive

Update existing knowledge. Replaces the record id, or the best match for find (within project when given): supersedes it and creates a new version.

Inputs: new_content (required), id, find, reason, +1 more.

memory_warmupA
Idempotent

v11.0: pre-load FastEmbed model and open the vector store, so the first save/search after process start doesn't pay model-load latency.

Inputs: no named parameters.

memory_wiki_generateA
Idempotent

v10 — Render the per-project wiki digest (top decisions, active solutions, conventions, recent changes) as Markdown. Pass project to refresh one wiki, omit it to refresh all active projects. Files land in <MEMORY_DIR>/wikis/.md and are deterministic (no LLM call).

Inputs: project.

phase_transitionC

v8.0: advance a task to the next phase.

Inputs: task_id (required), new_phase (required), notes, artifacts.

rule_set_phaseA
Idempotent

Attach or remove a phase scope on a rule (v8.0 lazy rule loading). Tag-based: manages 'phase:' on the rule's tags. phase=null clears the phase tag (rule becomes core — applies to every phase). Valid phases: van, plan, creative, build, reflect, archive.

Inputs: rule_id (required), phase.

save_decisionA

v8.0: save a structured architectural decision (options + criteria matrix + rationale + discarded). Adds structured tag and a JSON blob in context. Use for Creative-phase outputs; plain type=decision memory_save still works.

Inputs: title (required), options (required), selected (required), rationale (required), +4 more.

save_intentA

Persist one user prompt into the intents table (same source as the UserPromptSubmit hook). Use when programmatically seeding intents — the hook covers normal interactive usage. Dedupes same prompt within 5 min per session.

Inputs: prompt (required), project, session_id.

search_intentsA
Read-onlyIdempotent

Substring search over user prompts (LIKE). Returns newest match first. Useful for 'what did I ask about X' without mining transcripts.

Inputs: query (required), limit, project.

self_error_logA

Log an error/failure for pattern analysis. Call AUTOMATICALLY when: bash command fails, wrong assumption discovered, API returns error, config issue found, loop detected, or any mistake occurs. System detects patterns (3+ same category) and suggests insights.

Inputs: category (required), description (required), fix, tags, +3 more.

self_insightA

Manage insights from error patterns (ExpeL-style). Actions: add (create, importance=2), upvote (+1), downvote (-1, auto-archive at 0), edit, list, promote (to rule when importance>=5 AND confidence>=0.8). Call 'add' when pattern detected. Call 'upvote' when insight confirmed again.

Inputs: action (required), id, tags, content, +4 more.

self_patternsA
Read-onlyIdempotent

Analyze error patterns and self-improvement stats. Views: error_patterns (frequency, repeating 3+), insight_candidates (ready for promotion), rule_effectiveness (success rates, stale rules), improvement_trend (weekly errors), full_report (all). Call periodically to track improvement.

Inputs: days, view, project.

self_reflectA

Save a verbal self-reflection (Reflexion pattern). Call after completing a task or encountering difficulty. NOT for errors (use self_error_log). For meta-observations about strategy, approach effectiveness, process improvements.

Inputs: reflection (required), task_summary (required), tags, outcome, +1 more.

self_rulesA

Manage behavioral rules (SOUL). Rules are promoted insights that shape agent behavior. Actions: list, fire (record relevance), rate (success=true/false), suspend, activate, retire, add_manual, followed (surface_id from self_rules_context(query=...): was the rule followed?), report (follow-rate effectiveness with Wilson CIs, measurement only). success_rate = success / (success + fail). Auto-suspend: 5+ ratings and the 95% upper bound of success_rate < 0.4.

Inputs: action (required), id, note, tags, +10 more.

self_rules_contextA
Read-onlyIdempotent

Get active behavioral rules for current session. Call at SESSION START to load rules. Returns rules filtered by project and scope. v8.0: pass phase to lazy-load rules relevant to current task phase — core rules (no phase tag) + rules tagged phase:. Cuts prompt tokens ~70%. After task completion, rate rules: self_rules(action='rate', id=X, success=true/false).

Inputs: phase, query, project, categories, +1 more.

session_endA

End-of-session capture: summary + highlights + pitfalls + next_steps so the next session can resume cleanly. Set auto_compress=true to have the LLM generate the missing summary/next_steps/pitfalls from stored session artifacts (or from an optional transcript).

Inputs: session_id (required), project, summary, pitfalls, +5 more.

session_initC

At session start: return the most recent unconsumed end-of-session summary with highlights / pitfalls / next_steps.

Inputs: project, mark_consumed.

task_createC

v8.0: start a task in van phase (auto-classifies level if missing).

Inputs: task_id (required), description (required), level.

task_phases_listB
Read-onlyIdempotent

v8.0: list all phases of a task in chronological order.

Inputs: task_id (required).

workflow_learnB

Record a learned workflow (named sequence of steps) for future reuse.

Inputs: name (required), steps (required), context, project, +2 more.

workflow_predictA
Read-onlyIdempotent

Predict outcome (success probability, avg duration) for a workflow by id OR by trigger keyword. Uses Laplace-smoothed success rate.

Inputs: project, trigger, workflow_id.

workflow_trackA

Record a workflow execution outcome. Outcome ∈ {success|failure|partial|aborted}. Aggregates update automatically.

Inputs: outcome (required), workflow_id (required), notes, duration_ms, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 79 tools

    Disambiguation2/5

    Many tools overlap in retrieval, consolidation, and evaluation purposes: memory_recall, memory_search_fast, memory_explain_search, memory_recall_iterative, memory_associate, memory_context_build, and multiple memory_eval_* tools have unclear boundaries. Fast-path duplicates (memory_save_fast vs memory_save) and several stats/status/report tools further blur selection.

    Naming Consistency4/5

    Names are mostly snake_case with clear categorical prefixes (memory_, self_, kg_, workflow_, session_), which is predictable. Minor inconsistency appears in prefix+part-of-speech patterns, e.g. memory_history (noun) vs memory_save (verb), but overall the convention is readable.

    Tool Count1/5

    With 79 tools, the server is far beyond the ideal 3-15 range and exceeds the 50+ threshold for extreme mismatch. Many tools are redundant variants (fast paths, eval suites, debug utilities) that could be consolidated without losing core functionality.

    Completeness4/5

    Coverage of the memory lifecycle is extensive: save, get, update, delete, recall, relate, export, statistics, rules, graph, skills, workflows, and sessions are all present. A minor gap is the lack of an import counterpart to memory_export, and some overlapping query variants add noise rather than fill gaps.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Persistent memory for AI coding agents that stores and recalls preferences, decisions, and conventions via semantic similarity, with zero cloud dependencies and plug-and-play MCP integration for Claude Code.
      Apache 2.0
    • A
      license
      A
      quality
      B
      maintenance
      Persistent memory for AI agents across Claude Code, Cowork, Codex, Cursor and Hermes Agent. Saves, searches and recalls sessions from a local SQLite store through 40+ MCP tools, with auto-save and auto-load hooks, project tagging and export/import. Also a Hermes Agent memory provider plugin in the official catalog. Free: keyword search, 50 sessions. Pro ($8/mo): semantic search and team memory.
      33
      197 PyPI
      12
      Business Source 1.1
    • A
      license
      A
      quality
      B
      maintenance
      Persistent memory for AI coding agents, storing decisions, bug fixes, conventions, and discoveries in a local SQLite database and automatically recalling them when relevant. Works with Claude Code, Codex, Cursor, Gemini CLI, and other MCP-compatible agents.
      22
      4
      MIT