Release Overview
MemPalace v3.0.0 marked the first public release of the project, published on April 6, 2026 after several months of development. The release is production-ready, not an alpha or beta. Its defining achievement is 96.6% R@5 on the LongMemEval benchmark using only ChromaDB on your local machine — no API key, no cloud service, no ongoing cost. That score was independently reproduced by a community member on an M2 Ultra Mac in under five minutes.
The release ships five interconnected systems: a full MCP server, a temporal knowledge graph, specialist agent support, auto-save hooks for Claude Code, and the AAAK compression dialect.
The MCP Server — 19 Tools Across Five Groups
The MCP server is the core interface between MemPalace and any AI tool. After a one-time connection step, your AI automatically calls the correct tool for each task. The 19 tools are split across five functional groups:
Group 1 — Palace Reading (7 tools)
These tools let your AI understand the structure and contents of your palace without performing a search:
mempalace_status— returns a complete palace overview including wing counts, the AAAK dialect specification, and the memory protocol. This is always the first tool a newly connected AI calls so it learns how to use the system.mempalace_list_wings— lists every wing with a count of how many drawers it containsmempalace_list_rooms— lists rooms within a specified wingmempalace_get_taxonomy— returns the full wing → hall → room → drawer count hierarchymempalace_search— runs a semantic vector search with optional wing and room filters applied firstmempalace_check_duplicate— checks whether a piece of content already exists before filingmempalace_get_aaak_spec— retrieves the current AAAK dialect reference
Group 2 — Palace Writing (2 tools)
mempalace_add_drawer— stores verbatim content into a specified wing, hall, and roommempalace_delete_drawer— removes a stored memory by its unique ID
Group 3 — Knowledge Graph (5 tools)
The knowledge graph stores temporal entity-relationship triples — facts about people, projects, and decisions that have a start date and optionally an end date.
mempalace_kg_query— retrieves all relationships for an entity, with optional filtering by datemempalace_kg_add— records a new entity-relationship triple with a validity start datemempalace_kg_invalidate— marks a previously recorded fact as no longer true, with an end datemempalace_kg_timeline— reconstructs the chronological history of an entity across all recorded factsmempalace_kg_stats— returns graph-level statistics: total triples, active triples, entity count
Group 4 — Navigation (3 tools)
mempalace_traverse— follows connections from a starting room outward across wings via tunnelsmempalace_find_tunnels— identifies rooms that appear in two different wings simultaneouslymempalace_graph_stats— reports on the palace graph: wing count, room count, tunnel count
Group 5 — Agent Diary (2 tools)
mempalace_diary_write— appends an AAAK-formatted entry to a specialist agent's diarymempalace_diary_read— retrieves the most recent N entries from a specialist agent's diary
Temporal Knowledge Graph
The knowledge graph is stored entirely in SQLite — a zero-cost, zero-configuration, locally-hosted alternative to Zep's Graphiti which uses Neo4j and requires cloud hosting. Facts are stored with a valid_from date, and when they stop being true, an ended date is applied. Historical queries respect these windows, so asking "what was Maya working on in January?" correctly returns the state of the world at that time, not the current state.
from mempalace.knowledge_graph import KnowledgeGraph kg = KnowledgeGraph() kg.add_triple("Maya", "assigned_to", "auth-migration", valid_from="2026-01-15") kg.add_triple("Maya", "completed", "auth-migration", valid_from="2026-02-01") # Historical query — what was Maya doing in January? kg.query_entity("Maya", as_of="2026-01-20") → [Maya → assigned_to → auth-migration (active)]
Specialist Agents
Specialist agents are domain-focused AI roles — code reviewer, system architect, ops engineer — each defined by a short JSON configuration file and assigned their own wing in the palace. Each agent maintains a personal diary written in AAAK format. When the AI starts a session, it reads the diary to access accumulated expertise from every previous session.
A typical code reviewer diary entry compresses a complete finding into a single compact line: PR#42|auth.bypass.found|missing.middleware.check|pattern:3x.this.quarter|★★★★
Your CLAUDE.md file stays a single line regardless of agent count: "You have MemPalace agents. Run mempalace_list_agents to discover them."
Auto-Save Hooks
Two shell scripts provide automatic memory saving during Claude Code sessions:
- Save Hook (
hooks/mempal_save_hook.sh) — triggers every 15 messages. Captures the current session's topics, decisions, notable quotes, and code changes. Then regenerates the Layer 1 critical facts to reflect the latest state. - PreCompact Hook (
hooks/mempal_precompact_hook.sh) — fires immediately before Claude Code performs context compression. Runs synchronously to guarantee that nothing in the current window is lost before the window shrinks.
Three Mining Modes
The mempalace mine command accepts three modes depending on what you are ingesting:
- projects — reads source code, documentation, notes, and configuration files from a directory tree
- convos — ingests conversation exports. The normaliser handles five formats: ChatGPT JSON, Claude.ai JSON, Claude Code JSONL, Slack JSON, and plain-text transcripts with speaker prefixes
- general — applies auto-classification after the convos pass, sorting content into five hall types: decisions, preferences, milestones, problems, and emotional context
AAAK Dialect
AAAK is an abbreviation system built for the Layer 1 context-loading phase. It assigns short entity codes to frequently appearing names and uses structural separators to compress repeated information. It is readable by any LLM that can read English text — no decoder is needed.
Two important caveats: AAAK is lossy, not lossless; and it does not reduce token counts on short text. At small scales the structural overhead costs more tokens than the abbreviation saves. The benefit only materialises at scale — hundreds of sessions mentioning the same team of five people, for example. On the LongMemEval benchmark, AAAK mode scores 84.2% R@5 against raw mode's 96.6%. Use raw mode for storage and retrieval; reserve AAAK for context loading when token budget matters.
Benchmark Scores
| Benchmark | Mode | Score | API Calls |
|---|---|---|---|
| LongMemEval R@5 | Raw — ChromaDB only | 96.6% | Zero |
| LongMemEval R@5 | Hybrid + Haiku rerank | 100% | ~500 |
| LongMemEval R@5 | AAAK compression mode | 84.2% | Zero |
| LoCoMo R@10 | Raw, session level | 60.3% | Zero |
| Wing+Room filtered | Metadata pre-filter | 94.8% R@10 | Zero |