1. Conduid
  2. Data
  3. Mempalace
MCP server · Data

Mempalace

A Rust reimplementation of MemPalace/mempalace

44Fair

Scored yesterday · breakdown

About Mempalace

Mempalace is an MCP server published by bunkerlab-net in the Data category: a Rust reimplementation of MemPalace/mempalace.

The repository has 63 stars and 12 forks, with the last commit 2 days ago. Recent commit activity is the strongest signal that reported issues will get attention.

Install

From source
git clone https://github.com/bunkerlab-net/mempalace

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Ask AI

✦

Ask AI about Mempalace

Powered by Claude · Grounded in docs

I know everything about Mempalace. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

Static checks derived from the repository yesterday. Heuristics on the source, not an audit.

  • ✓README presentThe repository ships documentation.
  • ✓License declaredUsable under a stated license.
  • ✓Tests presentA test suite exists in the repository.
  • ✓Dependencies pinnedA lockfile pins dependency versions.
  • ✓No dynamic code executionSource scan found no eval, dynamic Function, or shell execution.

1 check has not been run yet.

README

Mempalace

A local-first memory palace for AI assistants. Single static binary backed by embedded SQLite (turso). No Python, no ChromaDB, no API keys.

Drop-in replacement for MemPalace/mempalace with a ~13MB binary instead of a ~100MB Python environment.

codecov


Why

The Python version used ChromaDB + SQLite. Under multiple simultaneous MCP clients, SQLite locking caused dropped writes. ChromaDB also carried a large dependency footprint and required Python to be installed.

This reimplementation:

  • Ships as a single self-contained binary
  • Replaces ChromaDB semantic search with a keyword inverted index (BM25-style scoring via drawer_words)
  • Fixes the concurrency problem at the turso layer
  • Keeps all MCP tools and all CLI commands fully compatible

Trade-off: Keyword search instead of embedding-based semantic search. Semantic search is deferred until an embedded model is available without network dependencies.


Installation

git clone https://github.com/bunkerlab-net/mempalace.git
cd mempalace
cargo build --release
# binary is at: target/release/mempalace

Optionally copy to a location on your PATH:

cp target/release/mempalace ~/.local/bin/mempalace

Precompiled binaries (GitHub Actions Artifacts)

Each artifact on the GitHub Actions page lists a sha256 digest. Verify the downloaded zip against that digest before extracting:

# macOS
shasum -a 256 mempalace-macos-<git-short-sha>.zip

# Linux
sha256sum mempalace-linux-<git-short-sha>.zip

The output should match the digest shown on the Artifacts page (strip the leading sha256: prefix before comparing).

On macOS, the extracted binary will also be quarantined because it was not distributed through the App Store or a notarised installer. After extracting, remove the quarantine attribute before running:

xattr -d com.apple.quarantine ./mempalace

MCP Setup (Claude Code)

claude mcp add mempalace -- /path/to/mempalace mcp

The MCP server runs as a JSON-RPC 2.0 process over stdio. All 26 tools are available immediately after the server starts.

On first use, call mempalace_status — it returns the full memory protocol and AAAK dialect spec in the response, so the AI learns how to use the palace during wake-up.


Quick Start

# 1. Initialise a project (creates mempalace.yaml)
mempalace init ~/my-project

# 2. Mine project files into the palace
mempalace mine ~/my-project

# 3. Mine conversation transcripts
mempalace mine ~/.claude/projects/ --mode convos

# 4. Search
mempalace search "chromadb locking"

# 5. Generate wake-up context (L0 identity + L1 essential story)
mempalace wake-up

See USAGE.md for the full CLI reference, configuration options, and MCP tool descriptions.


Architecture

src/
  main.rs              Entry point: clap dispatch → open_palace() → handler
  db.rs                open_db(), query_all() helpers over turso::Connection
  schema.rs            DDL: 6 tables + indexes, ensure_schema()
  config.rs            MempalaceConfig ($XDG_DATA_HOME/mempalace/config.json) + ProjectConfig (mempalace.yaml)
  error.rs             thiserror Error enum

  cli/                 One file per subcommand
    init.rs            Entity discovery + optional LLM refinement + room detection → write mempalace.yaml
    search.rs          CLI search output
    wakeup.rs          L0 + L1 assembly and print
    compress.rs        AAAK batch compression
    split.rs           Mega-file session splitter
    status.rs          Palace stats display
    sync.rs            Gitignore-aware drawer prune (mempalace sync)
    repair.rs          Backup + rebuild inverted index

  llm/                 LLM provider abstraction (optional, used by init --llm)
    client.rs          LlmProvider trait + Ollama / OpenAI-compat / Anthropic impls
    refine.rs          Batched entity refinement: classify, drop, reclassify via LLM

  palace/
    miner.rs           Project file scanner + chunker + drawer writer; MineParams struct
    convo_miner.rs     Conversation file scanner + normaliser + drawer writer
    drawer.rs          add_drawer(), file_already_mined(), inverted index maintenance
    chunker.rs         chunk_text(): 800-char chunks with 100-char overlap
    search.rs          search_memories(): inverted index query with relevance scoring
    room_detect.rs     70+ folder-to-room mappings, detect_room(), detect_rooms_from_folders()
    query_sanitizer.rs 4-step sanitizer: strip system-prompt contamination from search queries
    entities.rs        Shared DetectedEntity type used by entity_detect and project_scanner
    entity_detect.rs   Person vs project heuristic classifier for prose files
    entity_confirm.rs  Interactive / --yes entity confirmation UX
    known_entities.rs  Global entity registry (~/.local/share/mempalace/known_entities.json)
    project_scanner.rs Manifest parsing + git author scanning → DetectedDict
    session_scanner.rs Claude Code project dir scanning for entity discovery
    corpus_origin.rs   Heuristic + LLM detection of whether corpus is AI conversation
    layers.rs          L0 identity + L1 essential story assembly
    graph.rs           BFS traversal, auto-tunnel detection, explicit tunnel CRUD

  kg/
    mod.rs             Entity + triple CRUD
    query.rs           query_entity(), kg_timeline()

  normalize/           Chat export parsers → canonical transcript text
    claude_code.rs     JSONL (Claude Code); strip_noise() removes UI chrome / system-reminder tags
    claude_ai.rs       JSON array (Claude.ai) + privacy export format
    codex.rs           JSONL (OpenAI Codex CLI)
    chatgpt.rs         ChatGPT export JSON
    slack.rs           Slack export JSON
    gemini_cli.rs      Gemini CLI JSONL (detects via session_metadata sentinel)

  dialect/             AAAK compression
    mod.rs             compress(): header + content line assembly
    emotions.rs        38 emotion codes, keyword → code mapping
    topics.rs          Topic extraction with proper-noun frequency boost

  extract/             Memory type classifier (used in general extraction mode)
    mod.rs             5-type classifier: decision, preference, milestone, problem, emotional
    markers.rs         ~80 regex patterns

  mcp/
    mod.rs             Async stdio JSON-RPC 2.0 event loop
    protocol.rs        PALACE_PROTOCOL, AAAK_SPEC, 26 tool schemas (diary tools include optional wing)
    tools.rs           Tool dispatch + all 26 handler implementations

Differences from mempalace-py

Area Python Rust
Search ChromaDB semantic / embedding Keyword inverted index (BM25-style)
mempalace_search score field similarity (0–1 cosine) similarity (word hit count)
Storage ChromaDB + SQLite Single turso (SQLite) file
Binary size ~100MB Python env ~13MB binary
Concurrency SQLite locking issues WAL mode; resolved at turso layer
Duplicate detection 0.9 cosine threshold Keyword overlap threshold
Entity registry Wikipedia lookups Heuristic only (deferred)
Onboarding wizard Interactive Interactive (mempalace onboard)
ChromaDB import N/A Not implemented (deferred)
Gitignore support Full (projects) Full (ignore crate)
Repair command Yes Yes (mempalace repair)
Conversation formats Limited Extended (+ Codex CLI, Gemini CLI)
MCP error responses Generic Generic
Query sanitizer Yes (issue #333) Yes (ported from mempalace-py)

Code Style

See STYLEGUIDE.md for the full coding conventions: assertions, loop bounds, no-abbreviation naming, function length limits, clippy configuration, and the "always say why" comment rule.


Tests

cargo nextest run

README fetched from the repository yesterday. The original is authoritative.

Questions

About Mempalace

How do I install Mempalace?

No package has been published for this server, so install it from source: clone the repository and follow its README.

Is Mempalace safe to use with an AI agent?

Its trust score is 44 out of 100 (fair). It passes 5 of the 5 static security checks run so far. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Mempalace still maintained?

Yes — the last commit was 2 days ago. The repository has 63 stars and 12 forks and 3 open issues.