Memory Engine MCP

Official registry Data and databases

Local-first graph memory for AI assistants with SQLite, semantic search, and MCP tools.

What can you do with Memory Engine MCP?

  • Local-first — SQLite database, optional local embeddings via Ollama, no required cloud API.
  • MCP-native — exposes 35 tools through FastMCP.
  • Graph-aware recall — expands top hits through bidirectional bonds for richer context.
  • Semantic search — meaning-based retrieval with nomic-embed-text.
  • Markdown coexistence — import existing notes one-way without replacing your human-readable memory.
  • Error memory — remembers mistakes and corrections, with auto-promotion to preferences after repeated failures.
  • Cognitive curator — non-destructive maintenance pass for compaction, bond suggestions, duplicate detection, and isolated atom classification.
  • Session watcher — canonical OpenClaw SQLite ingestion (schema 17), reset-aware digests, and JSONL legacy fallback.

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

OCI package ghcr.io/simoneb79/memory-engine-mcp:1.5.3
Claude Code
claude mcp add memory-engine-mcp -e 'MEMORY_DB_PATH=<MEMORY_DB_PATH>' -e 'MARKDOWN_SOURCE=<MARKDOWN_SOURCE>' -e 'MEMORY_PORT=<MEMORY_PORT>' -- docker run -i --rm ghcr.io/simoneb79/memory-engine-mcp:1.5.3
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "memory-engine-mcp": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "ghcr.io/simoneb79/memory-engine-mcp:1.5.3"
            ],
            "env": {
                "MEMORY_DB_PATH": "<MEMORY_DB_PATH>",
                "MARKDOWN_SOURCE": "<MARKDOWN_SOURCE>",
                "MEMORY_PORT": "<MEMORY_PORT>"
            }
        }
    }
}

Environment variables

  • MEMORY_DB_PATH SQLite database path inside the container.
  • MARKDOWN_SOURCE Optional directory for one-way markdown import.
  • MEMORY_PORT SSE server port. Default: 8085.

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. 🧠 Memory Engine MCP
  2. Why Memory Engine?
  3. Highlights
  4. Architecture
  5. MCP Tools
  6. Web UI (optional)
  7. Quick start with Docker
  8. Local Python
  9. Configuration
  10. Memory model
  11. Example usage
  12. Security
  13. Publishing and registries
  14. Repository status
  15. License

🧠 Memory Engine MCP

Local-first, graph-aware long-term memory for AI assistants.

SQLite + semantic search + knowledge graph + MCP tools for agents that need continuity.

Works with Claude Desktop · Claude Code · Cursor · Cline · Windsurf · OpenClaw · any MCP client


Why Memory Engine?

Most MCP memory servers are either simple key-value stores or plain text search wrappers.

Memory Engine is different: it models memory as typed atoms connected by typed bonds, then retrieves context with a hybrid ranking pipeline that combines:

  • full-text search (SQLite FTS5)
  • semantic similarity via local Ollama embeddings
  • confidence, recency, and weight
  • graph expansion from related memories

The goal is not just storage. The goal is a memory system that can recall, connect, decay, curate, and learn over time.

Highlights

  • Local-first — SQLite database, optional local embeddings via Ollama, no required cloud API.
  • MCP-native — exposes 35 tools through FastMCP.
  • Graph-aware recall — expands top hits through bidirectional bonds for richer context.
  • Semantic search — meaning-based retrieval with nomic-embed-text.
  • Markdown coexistence — import existing notes one-way without replacing your human-readable memory.
  • Error memory — remembers mistakes and corrections, with auto-promotion to preferences after repeated failures.
  • Cognitive curator — non-destructive maintenance pass for compaction, bond suggestions, duplicate detection, and isolated atom classification.
  • Session watcher — canonical OpenClaw SQLite ingestion (schema 17), reset-aware digests, and JSONL legacy fallback.
  • Backup & restore — full SQLite snapshots, JSON export/import, verified restores with automatic safety backups.
  • Auth & hardening — optional API token, secure bind, input validation, rate limiting.
  • Test suite — 144 tests covering CRUD, ranking, migrations, auth, backup, concurrency, and transcript ingestion.
  • Benchmark — CLI recall quality suite with Precision@K, MRR, latency percentiles.

Architecture

AI assistant / MCP client
        │
        ▼
FastMCP server — 35 tools
        │
        ▼
Memory engine — hybrid ranking, graph recall, decay, learning
        │
        ├── SQLite — atoms, bonds, FTS5, JSON metadata, versions
        ├── Ollama — optional local embeddings
        ├── Curator — conservative maintenance
        └── Session watcher — OpenClaw SQLite + JSONL fallback

MCP Tools

Memory
ToolPurpose
rememberCreate or update an atom
recallSmart hybrid recall with graph expansion
working_setBuild a task-oriented context pack
semantic_searchPure semantic search
get_atomRead one atom with bonds
list_atomsBrowse atoms by domain/type/status
merge_atomsMerge duplicate atoms
export_atomExport one atom as markdown
Knowledge graph
ToolPurpose
link / unlinkCreate or remove typed bonds
search_graphTraverse the graph from one atom
suggest_bondsSuggest bonds for one atom
suggest_bonds_allSuggest or create bonds in bulk
Learning and maintenance
ToolPurpose
curator_runConservative curation pass
cognitive_statusGraph and memory health metrics
learning_runDetect contradictions, weak atoms, merge candidates, gaps
ask_pending / answer_humanHuman-in-the-loop clarification
decay_runRun decay cycle
cleanup_sessionsRemove expired session atoms
cleanup_duplicatesRemove duplicate session atoms
reindex_embeddingsRebuild embeddings
Error memory and preferences
ToolPurpose
error_checkCheck past failures before doing a task
error_logRecord a mistake and the correction
error_listBrowse unresolved/resolved errors
preference_searchSearch structured preferences
Import and introspection
ToolPurpose
import_markdownImport markdown notes into atoms
memory_summary3-level summary: global → domain → detail
statsDatabase statistics
versionServer version
recall_sessionSearch one OpenClaw session
session_summarySummarize one OpenClaw session
memory_contradictSupersede an old atom with a newer contradictory one
list_contradictionsList explicit contradiction/supersession records
classify_memory_tierInfer the 3-tier class (episodic/semantic/procedural)
memory_impactImpact analysis: what depends on this atom
Backup, restore & export
ToolPurpose
backup_databaseCreate, list, verify, or clean up SQLite snapshots
restore_databaseRestore from a backup (with automatic safety backup)
export_allExport all memory data as portable JSON
import_dataImport from JSON (merge or replace mode)

Web UI (optional)

Memory Engine includes an optional web UI for graph exploration, atom inspection, contradiction browsing, and impact analysis.

# In docker-compose.yml, add:
#   environment:
#     - MEM_UI_PORT=6000
#   expose:
#     - "6000"

Or run standalone:

python3 web_ui.py
# Open http://localhost:6000

Web UI: interactive graph, atom details, contradiction browser, stats dashboard

Quick start with Docker

# docker-compose.yml
services:
  memory-engine:
    image: ghcr.io/simoneb79/memory-engine-mcp:2.1.0
    ports:
      - "8085:8085"
    volumes:
      - memory-data:/data
    restart: unless-stopped

volumes:
  memory-data:
docker compose up -d

Pin the version. Use an explicit tag like :1.7.0 in production. Avoid :latest — it can change without notice.

Option B — Build from source
git clone https://github.com/SimoneB79/memory-engine-mcp.git
cd memory-engine-mcp
cp docker-compose.yml docker-compose.local.yml
# Edit volume paths in docker-compose.local.yml if needed
docker compose -f docker-compose.local.yml up -d --build

Default endpoint:

http://localhost:8085/sse

Example MCP client config:

{
  "mcpServers": {
    "memory-engine": {
      "url": "http://localhost:8085/sse",
      "transport": "sse"
    }
  }
}

See docs/INSTALL.md for Docker, local Python, Claude Desktop, Cursor, and OpenClaw examples.

Local Python

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python server.py

Configuration

Main configuration file: config.json

Important environment variables:

VariableDefaultPurpose
MEMORY_DB_PATH/data/memory.dbSQLite database path
MARKDOWN_SOURCE/workspace/memoryMarkdown directory for import
MEMORY_HOST127.0.0.1Server bind address (secure default)
MEMORY_PORT8085SSE port
MEMORY_API_TOKEN(none)Optional API token for auth (see Security)
OPENCLAW_AGENT_DB(none)Preferred per-agent OpenClaw SQLite DB (schema 17)
OPENCLAW_SESSIONS_DIR/sessionsLegacy JSONL fallback when no agent DB is configured
SESSION_DIGEST_DIR/data/session_digestsOptional session digest output

For the SQLite mount, WAL/SHM handling, filtering, and security boundary, see OpenClaw transcript ingestion.

Semantic search requires Ollama reachable from the container or host. Default:

{
  "ollama": {
    "enabled": true,
    "host": "http://ollama:11434",
    "model": "nomic-embed-text"
  }
}

If you do not use Ollama, set ollama.enabled to false; FTS recall still works.

Memory model

Atoms have:

  • title
  • body
  • type: fact, decision, event, preference, log, procedure, note, etc.
  • domain: project or topic namespace
  • confidence
  • weight
  • tags
  • optional TTL

Bonds connect atoms with relation types:

is_a · part_of · depends_on · contradicts · refines · derived_from · detail_of · related_to

Example usage

remember(
    title="Use PostgreSQL for analytics",
    body="SQLite is kept for local memory, PostgreSQL is used for multi-user analytics.",
    type="decision",
    domain="project:analytics",
    confidence=0.9,
    tags=["database", "architecture"]
)
recall(query="what database did we choose for analytics?", limit=5)
working_set(
    query="continue the analytics backend work",
    domain="project:analytics",
    limit=8,
    graph_depth=1
)

Security

By default, Memory Engine runs in open mode (no auth) — safe for stdio or trusted local environments.

To enable API token auth:

// config.json
{
  "security": {
    "api_token": "your-secret-token",
    "allow_remote": false
  }
}

Or via environment variable:

MEMORY_API_TOKEN=your-secret-token

When auth is enabled:

  • MCP SSE requests must include Authorization: Bearer <token>
  • Web UI API endpoints require ?token=<token> or Bearer header
  • Server binds to 127.0.0.1 unless allow_remote: true
  • Input validation (title/body size limits) and rate limiting are always active

See CHANGELOG.md for the full list of security features.

Publishing and registries

This repository is prepared for MCP discovery:

  • MCP Registry name: io.github.simoneb79/memory-engine-mcp
  • Registry metadata: server.json
  • Docker/OCI verification label: included in Dockerfile
  • Client config example: mcp.json

See docs/PUBLISHING.md for the publication checklist.

Repository status

License

MIT — see LICENSE.


Made with 🧠 by SimoneB79

Frequently asked questions

What is Memory Engine MCP?

Local-first graph memory for AI assistants with SQLite, semantic search, and MCP tools.

How do I install Memory Engine MCP?

It runs on your machine. In Claude Code: claude mcp add memory-engine-mcp -e 'MEMORY_DB_PATH=<MEMORY_DB_PATH>' -e 'MARKDOWN_SOURCE=<MARKDOWN_SOURCE>' -e 'MEMORY_PORT=<MEMORY_PORT>' -- docker run -i --rm ghcr.io/simoneb79/memory-engine-mcp:1.5.3. For other clients, paste the JSON configuration from this page into their MCP settings.

Does Memory Engine MCP need an API key?

Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.

Is Memory Engine MCP open source?

Yes. Its code is on GitHub under the MIT license.

Who maintains Memory Engine MCP?

It is published by SimoneB79. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.