← Back to directory
COMPARE UP TO 4 SERVERS

Compare MCP servers

Compare scores, permissions, risks, and fit in one decision-focused table.

DimensionMemoraPersistent, collective memory for your AI agentsCompartmentEncrypted, fully offline long-term memory for AI agents
FMRS60 / 100 · C75 / 100 · B
Reliability12 / 2012 / 20
Security and permissions11 / 2016 / 20
Maintenance11 / 2014 / 20
Documentation14 / 2018 / 20
Setup experience12 / 2015 / 20
Best for
  • Development teams using Claude Code, Codex CLI, or other MCP clients that need cross-session memory
  • Users who want to self-host SQLite or sync to Cloudflare D1/R2
  • Long-term memory use cases that need supersession lineage and deduplication rather than append-only text
  • Advanced users willing to configure embedding and LLM providers themselves (OpenAI, OpenRouter, Cloudflare Workers AI, etc.)
  • Individuals or teams who prioritise privacy and offline operation and do not want data leaving the machine
  • Users who share memory across multiple MCP clients such as Claude Code, Claude Desktop, Hermes Agent, OpenClaw, Cursor, Codex and Gemini CLI
  • Scenarios that need encrypted storage, a hash-chained audit log and verifiable vault migration
  • Users who want low-latency recall, a bundled embedding model and no extra LLM calls inside the memory layer
Not for
  • Users who want a zero-configuration setup — embeddings and the LLM require your own keys and endpoints
  • One-off question-answering tasks that do not need persistent memory
  • Environments that cannot absorb the operational cost of a long-running container or a LaunchAgent-managed proxy
  • Users expecting vendor support or an SLA — the project is community-maintained
  • Users who need cloud multi-device sync or a hosted team memory service; moving between machines means locking the vault and copying the file
  • Users who expect the server itself to run an LLM that extracts facts and decides what to remember; Compartment explicitly keeps no LLM inside and leaves that to the host model
  • Users who cannot keep a passphrase safe or who need a recovery path if it is lost, since Compartment never generates a password, seed or recovery phrase
  • Deployments that require network transports such as SSE or streamable-http; this server is stdio only and opens no ports
Required permissions
  • Local file access: creates and reads/writes a SQLite database file (default ~/.local/share/memora/memories.db) and a cache directory
  • Network access: calls the configured embedding endpoint and LLM endpoint (OpenAI, OpenRouter, Cloudflare Workers AI, etc.)
  • Cloud storage credentials: AWS_PROFILE and AWS_ENDPOINT_URL for S3/R2 sync, or CLOUDFLARE_API_TOKEN for D1
  • Local port binding: the graph server listens on 127.0.0.1:8765 by default; HTTP transport defaults to 127.0.0.1:8000
  • Container deployment requires running Apple's container CLI and installing a LaunchAgent-managed local proxy process
  • Read and write the vault file under the user's home directory, by default ~/.compartment/memory.vault, and its sibling settings file
  • Access the session directory holding the unlock credential (configurable with COMPARTMENT_SESSION_DIR), which also carries the shared embedding process's Unix socket
  • Optionally use the macOS keychain (compartment unlock --keychain is an explicit opt-in, and it survives reboots)
  • Write or merge an mcpServers entry into each MCP client's own configuration file, taking a byte-exact backup first
  • Install a PostToolUse hook for Claude Code that captures memory files the agent writes
  • Serve a read-only dashboard on 127.0.0.1 behind a one-time random URL token
Risks and side effects
  • If the embedding endpoint is misconfigured (for example pointed at OpenRouter), Memora silently falls back to TF-IDF keyword bags unless MEMORA_EMBEDDING_STRICT=1 is set, degrading vector quality while looking healthy
  • A wrong store name in MEMORA_DATABASES is undetectable by errors: reads succeed but writes land in another project's store; verify with the database field from memory_stats
  • Credentials are injected into the process via environment variables; an over-permissive credential file may be readable by other local accounts (the docs recommend chmod 600)
  • Memory content is sent to the configured embedding and LLM providers, which matters for sensitive data
  • The container runtime reassigns the container's IP on every start; connecting directly instead of through the proxy produces a permanent silent hang
  • LLM deduplication and absorb can merge or supersede memories; lineage is preserved, but wrong judgments still affect retrieval results
  • Document fragments are protected by integrity guards, but deleting the whole document deletes every fragment with it
  • A leaked passphrase means the encrypted content can be decrypted; Compartment generates no recovery phrase and cannot recover a lost passphrase
  • Enabling the memory_unlock tool places the passphrase in the model's context, which is why it is off by default
  • If a 2FA keyfile is lost, for example a USB stick, the vault cannot be opened even with the passphrase
  • `export --plaintext` writes the vault as unencrypted JSONL, so that file must be handled carefully
  • Memory content can come from untrusted sources; recall wraps memories with a notice that they are stored data and content can be marked quarantined, but the host agent must still treat memory as data to limit prompt-injection risk
  • The capture hook and client integration write into the user's own settings files, although the implementation backs up and merges rather than replacing
Supported clientsClaude Code, Codex, NeovimClaude Desktop, Claude Code, Hermes Agent, OpenClaw, Cursor, VS Code, Codex, Gemini CLI, Cline, Roo Code, Zed, OpenCode, LM Studio, AnythingLLM, BoltAI, Goose, Kiro
Tools3114