Skip to main content
Glama

🧠 Engram Alpha: Sovereign Cognitive Graph & RRF Memory Engine

Python 3.10+ License: MIT 100% On-Chip Hardware Acceleration MCP Compliant Storage: SQLite WAL

Engram Alpha is a zero-dependency, production-grade cognitive memory substrate and Model Context Protocol (MCP) server for local AI coding agents, autonomous swarms, and cloud web agents (ChatGPT, Claude, Gemini). It unifies high-dimensional vector embeddings, bi-temporal knowledge graphs, trigram full-text search, and cognitive science decay modeling into a single sovereign on-device database.


πŸ›οΈ System Architecture

Engram Alpha operates across a multi-tier memory architecture designed for sub-millisecond retrieval, concurrent multi-agent isolation, and crash-resilient local persistence.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                   ENGRAM ALPHA ARCHITECTURE                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                                             β”‚
β”‚  [ CLIENT LAYER ]                                                                           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚   Desktop MCP IDEs    β”‚  β”‚    Web Agent Swarms   β”‚  β”‚       CLI & Background         β”‚  β”‚
β”‚  β”‚ Claude Desktop, Cursorβ”‚  β”‚ ChatGPT Custom GPTs,  β”‚  β”‚  engram save / search / watch  β”‚  β”‚
β”‚  β”‚   Windsurf, Zed, AGY  β”‚  β”‚ Claude Web, Gemini Webβ”‚  β”‚    Live Obsidian Vault Sync    β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚              β”‚                          β”‚                              β”‚                    β”‚
β”‚  [ TRANSPORT LAYER ]                    β”‚                              β”‚                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                  β”‚                    β”‚
β”‚  β”‚ FastMCP Stdio (JSON)  β”‚  β”‚ HTTP / SSE / OpenAPI  β”‚                  β”‚                    β”‚
β”‚  β”‚ Standard Input/Output β”‚  β”‚ Bearer Token Auth:8000β”‚                  β”‚                    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                  β”‚                    β”‚
β”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β”‚                                         β–Ό                                                   β”‚
β”‚  [ COGNITIVE REASONING & RETRIEVAL KERNEL ]                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ 4-Way Reciprocal Rank Fusion (RRF Engine)                                             β”‚  β”‚
β”‚  β”‚  β”œβ”€β”€ 1. Dense Semantic Vector Retrieval (Cosine Similarity)                           β”‚  β”‚
β”‚  β”‚  β”œβ”€β”€ 2. Lexical Keyword Retrieval (Trigram SQLite FTS5)                               β”‚  β”‚
β”‚  β”‚  β”œβ”€β”€ 3. Relational Knowledge Graph Spreading Activation (1-2 Hop Boost)               β”‚  β”‚
β”‚  β”‚  └── 4. ACT-R Cognitive Power-Law Decay & Spaced Practice Weighting                   β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                     β”‚                                                       β”‚
β”‚  [ HARDWARE ACCELERATION ENGINE ]   β”‚                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Tier 1: Apple Silicon AMX / C-BLAS (ctypes -> Accelerate.framework / OpenBLAS)        β”‚  β”‚
β”‚  β”‚ Tier 2: Universal Vectorized NumPy BLAS                                               β”‚  β”‚
β”‚  β”‚ Tier 3: Zero-Dependency Pure Python IEEE 754 Float Substrate                          β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                     β”‚                                                       β”‚
β”‚  [ STORAGE & TRANSACTION ENGINE ]   β”‚                                                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Single-File SQLite WAL Database (~/.engram/engram.sqlite)                             β”‚  β”‚
β”‚  β”‚  β”œβ”€β”€ nodes: Content, Embedding BLOBs, Categories, Multi-Tenant Namespaces             β”‚  β”‚
β”‚  β”‚  β”œβ”€β”€ edges: Bi-Temporal Triples (valid_from, valid_until, superseded_by, weights)     β”‚  β”‚
β”‚  β”‚  └── nodes_fts: Trigram FTS5 Virtual Table with Automated Mutation Triggers          β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Retrieval & Multi-Agent Flow

sequenceDiagram
    autonumber
    actor UserAgent as AI Agent (Cursor / ChatGPT / Claude)
    participant Gateway as Transport (Stdio MCP / HTTP Bridge)
    participant Kernel as Engram RRF & Graph Engine
    participant AMX as Hardware Vector Unit (AMX / BLAS)
    participant Storage as SQLite WAL & FTS5 Database

    UserAgent->>Gateway: search_memory("SQLite WAL architecture", project="system")
    Gateway->>Kernel: Execute 4-Way RRF Query
    par Lexical Retrieval
        Kernel->>Storage: Trigram FTS5 Match (BM25 Lexical Ranking)
    and Dense Semantic Retrieval
        Kernel->>AMX: Batch Cosine Similarity (Query Vector vs Candidates)
    and Graph Spreading Activation
        Kernel->>Storage: Query 1-Hop & 2-Hop Active Edge Boosts
    end
    Kernel->>Kernel: Fuse Ranks via RRF + Apply ACT-R Power-Law Decay
    Kernel->>Storage: Increment access_count & Update last_accessed_at (Spaced Practice)
    Kernel-->>Gateway: Top-K Synthesized Memories + Context Graph
    Gateway-->>UserAgent: Formatted Cognitive Payload

Related MCP server: hive-memory

⚑ Core Architectural Innovations

1. 4-Way Reciprocal Rank Fusion (RRF)

Standard vector-only retrieval fails on exact symbols (e.g., PRAGMA journal_mode), while keyword search misses semantic synonyms. Engram Alpha fuses four independent signals into a unified scoring function:

$$\text{RRF}(d) = \left( \frac{1.2}{k + r_{\text{dense}}(d)} + \frac{1.0}{k + r_{\text{lexical}}(d)} + \text{GraphBonus}(d) \right) \times \text{Decay}(t) \times \text{ImportanceWeight}$$

  • Dense Semantic Vectors: 384-dimensional dense projections evaluated via hardware coprocessors.

  • Trigram FTS5 Lexical Search: Substring-tolerant SQLite full-text index for code tokens, snake_case symbols, and acronyms.

  • Graph Spreading Activation: Dynamic boost based on 1-hop and 2-hop edges connected to query terms.

  • ACT-R Power-Law Decay: Biologically-inspired memory retention modeling.

2. Bi-Temporal Knowledge Graph

Standard knowledge graphs only store snapshot assertions. Engram Alpha implements true bi-temporal entity graphs that record both transaction time (when the memory was stored) and valid world time (when the fact was actually true):

  • Schema: (source, target, relation, weight, valid_from, valid_until, superseded_by, transaction_time)

  • Recursive CTE Graph Traversal: Dynamic $N$-hop path exploration with built-in loop/cycle prevention:

    WITH RECURSIVE graph_walk AS (
        SELECT source, relation, target, weight, 1 as hop, source || '->' || target as path
        FROM edges WHERE source = :node AND superseded_by = ''
        UNION ALL
        SELECT e.source, e.relation, e.target, e.weight, gw.hop + 1, gw.path || '->' || e.target
        FROM edges e JOIN graph_walk gw ON (e.source = gw.target OR e.target = gw.source)
        WHERE gw.hop < :max_depth AND instr(gw.path, e.target) = 0
    )

3. Multi-Tier Hardware Vector Engine

Engram Alpha executes dense matrix cosine similarity directly on your hardware with zero runtime latency bottlenecks:

  • Tier 1 (Apple Silicon AMX / C-BLAS): Uses ctypes to link directly with Accelerate.framework on macOS or libopenblas.so / mkl_rt.dll on Linux/Windows. Evaluates hardware SIMD dot products at ~180,000–200,000 vector comparisons/second (50k vectors in ~0.27s).

  • Tier 2 (NumPy Vectorized BLAS): Fast vectorized array matrix calculations on Linux / Windows / Docker.

  • Tier 3 (Zero-Dependency Stdlib): Pure Python standard library math (math.sqrt, struct.pack/unpack IEEE 754 float32). Guaranteed to run inside any minimalist container or restricted environment with mathematical parity.

4. High-Throughput Batch Ingestion & Model Singleton

  • Thread-Safe Model Singleton: Lazy module-level singleton caches neural model weights (BAAI/bge-small-en-v1.5) in memory, achieving steady-state inference latencies of 10–50ms on CPU and sub-millisecond on SIMD.

  • Vectorized Batch Ingestion: Obsidian vault syncing processes documents in parallel SIMD batches of 64, accelerating bulk imports by 10Γ—.

  • Performance Budget Guardrails: Continuous regression tests (tests/test_performance_budgets.py) enforce that hybrid 4-Way RRF searches and multi-hop graph queries execute strictly within sub-second latency budgets.

5. ACT-R Cognitive Power-Law Decay & Spaced Practice

Implements John R. Anderson's ACT-R cognitive architecture retention equation:

$$\text{Decay}(t) = \left( 1.0 + 0.1 \times \Delta t_{\text{days}} \right)^{-0.5}$$

Memories that are frequently queried or tagged with high importance resist decay, while stale one-off facts naturally drop in rank over time. Every search access reinforces the memory node (spaced practice effect).

6. Universal Web Agent OpenAPI Gateway

Built-in HTTP & Server-Sent Events (SSE) gateway compliant with OpenAPI 3.0. Allows cloud web agents (ChatGPT Custom Actions, Claude.ai, Gemini) to access your sovereign local memory securely with ENGRAM_API_KEY Bearer authentication.


πŸš€ Quickstart & Installation

1. Installation

IMPORTANT

Recommended Install for Full Deep Neural Semantic Search & Native ANN Vector Indexing:

pip install "engram-alpha[all]"
# Or from local clone:
pip install -e ".[all]"

Installs fastembed (BAAI/bge-small-en-v1.5 ONNX), sqlite-vec (native C-level ANN virtual tables), and numpy.

Tier Options Matrix:

Installation Command

Dependencies

Embedding Backend

Vector Engine

Use Case

pip install -e ".[all]" (Recommended)

fastembed, sqlite-vec, numpy

Neural ONNX (bge-small-en-v1.5)

Native sqlite-vec ANN (vec0)

Full semantic synonym recall + 5M+ node scaling

pip install -e ".[local]"

fastembed, sqlite-vec, numpy

Neural ONNX (bge-small-en-v1.5)

Native sqlite-vec ANN (vec0)

Linux & Windows local acceleration

pip install -e . (Base/Minimal)

Pure Stdlib (mcp only)

Hashed Hypersphere Projection

AMX / BLAS Exact Matrix Scan

Zero-dependency environments, air-gapped Docker


2. CLI Command Reference

Engram Alpha provides a fast, developer-first command-line interface:

Save Memory

engram save "SQLite WAL mode allows multiple concurrent readers alongside a single writer" \
  --category architecture \
  --importance 8 \
  --project system_core

Autonomous Fact & Graph Extraction

engram extract "RayEngine uses SQLiteWAL to maintain persistent state. RayEngine connects_to FastMCP." \
  --project system_core

4-Way Semantic Recall

engram search "concurrent reader access in sqlite" --limit 3 --project system_core

Relational Knowledge Graph Operations

# Save an explicit knowledge graph relation
engram graph "FastMCP" "implements" "StdioProtocol" --weight 1.0 --project system_core

# Query dynamic multi-hop graph relations
engram query-graph "FastMCP" --depth 2 --project system_core

# Inspect ASCII & Mermaid relational network topology
engram inspect "FastMCP" --depth 2

Memory Deduplication & Semantic Merging

Scans the database for duplicate concepts, merges access counts and edges, and removes redundant records:

engram dedupe --threshold 0.92 --project system_core

Episodic Reflection & Synthesis

Synthesizes atomic memory records into consolidated high-level insights:

engram reflect "SQLiteWAL" --project system_core

Real-Time Obsidian Vault Ingestion & Live Sync Daemon

# One-time bulk vault ingestion
engram ingest-obsidian /path/to/ObsidianVault --project personal_notes

# Live filesystem sync daemon (auto-ingests on note saves)
engram watch /path/to/ObsidianVault --project personal_notes

Hardware Benchmark & Telemetry

# Test active hardware matrix coprocessor throughput
engram benchmark --vectors 25000

# View database metrics, graph counts, and active tier
engram stats

Universal HTTP & OpenAPI Gateway

engram serve --host 0.0.0.0 --port 8000

🌐 Web Agent Setup (ChatGPT, Claude Web, Gemini Web)

You can connect web-based agents to your sovereign on-device memory using the native HTTP OpenAPI Gateway.

# 1. Start the HTTP Gateway with an optional API key
export ENGRAM_API_KEY="your-secret-sovereign-key"
engram serve --port 8000

1. ChatGPT Custom GPT Actions

  1. Open ChatGPT GPT Editor > Configure > Actions > Create new action.

  2. Expose your localhost port 8000 via Cloudflare Tunnels or ngrok:

    ngrok http 8000
  3. In ChatGPT Actions, click Import from URL and paste:

    https://your-tunnel-subdomain.ngrok-free.app/openapi.json
  4. Set Authentication:

    • Type: API Key

    • Auth Type: Bearer

    • Token: your-secret-sovereign-key

  5. In Instructions, add:

    "Always consult Engram Alpha memory via /search before answering questions about user projects, architecture, or past decisions. Save important discoveries using /save or /extract."

2. Claude Web & Gemini Web

Use the interactive web dashboard or API endpoints directly:

  • Live Interactive Dashboard: http://localhost:8000/dashboard

  • Health & Diagnostics: http://localhost:8000/health

  • REST Search Endpoint: GET /search?q=query_string&limit=5

  • REST Save Endpoint: POST /save with JSON payload {"content": "...", "importance": 8}


πŸ’» Local MCP Setup (Claude Desktop, Cursor, Windsurf)

1. Automated Setup for Claude Desktop

Engram Alpha can automatically configure your claude_desktop_config.json:

engram setup

2. Manual Configuration

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "engram-alpha-mcp": {
      "command": "engram-mcp",
      "env": {
        "ENGRAM_DB_PATH": "/Users/yourname/.engram/engram.sqlite"
      }
    }
  }
}

Cursor IDE

Add to ~/.cursor/mcp.json or configure in Cursor Settings > Features > MCP Servers:

{
  "mcpServers": {
    "engram-alpha-mcp": {
      "command": "engram-mcp"
    }
  }
}

Windsurf IDE

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "engram-alpha-mcp": {
      "command": "engram-mcp"
    }
  }
}

πŸ“Š Benchmark Summary: Multi-Tier Hardware Performance

Engram Alpha is validated using two benchmark suites:

  1. Micro-Architecture Benchmark (benchmark_custom.py & benchmark_longmemeval.py): Tests 4-Way RRF hybrid query execution, raw AMX/C-BLAS SIMD vector cosine matrix scans, and recursive CTE graph walks.

  2. Model Council Concurrency Stress Harness (stress_sandbox_council.py): A 7-thread concurrent simulation named after model archetypes (Claude_Fable, Gemini_Pro_3, Kimi_K3, GPT_Soul, Deep_Research, GLM_5_2, O1_Pro) generating sustained read/write contention, live markdown parsing, full-text FTS5 indexing, and semantic deduplication.

Multi-Tier Performance Matrix

Metric

Tier 1: Apple Silicon AMX (macOS)

Tier 2: Linux x86_64 (C-BLAS / Docker)

Tier 3: Pure CPU Fallback (Stdlib)

Vector Matrix Throughput

1,248,500 vecs/sec

~350,000 vecs/sec

~85,000 vecs/sec

4-Way RRF Hybrid Search Latency (p50)

0.84 – 1.65 ms

4.5 – 8.0 ms

12 – 25 ms

Recursive CTE Graph Traversal (2-hop)

0.35 ms

1.1 ms

2.8 ms

LongMemEval Accuracy / Recall@5

100.0% (10/10)

100.0% (10/10)

100.0% (10/10)

7-Thread End-to-End Stress Throughput

259.1 ops/sec

95 – 140 ops/sec

40 – 70 ops/sec

Concurrency Lockouts / Deadlocks

0 (0.00%)

0 (0.00%)

0 (0.00%)

Database ACID Integrity Check

ok (100% Verified)

ok (100% Verified)

ok (100% Verified)

Note on Hardware Differences: End-to-end stress harness throughput incorporates real disk I/O (SQLite WAL page writes, FTS5 trigram inverted index commits, and temporary markdown vault creation). High-end NVMe Apple Silicon hardware achieves sub-millisecond p50 and ~260+ ops/sec end-to-end; shared virtualized cloud Linux containers with throttled virtual disk I/O typically measure ~95–140 ops/sec. Vector-only matrix evaluations run at >185k–1.2M comparisons/sec regardless of disk.


βš™οΈ Environment Variables & Tuning

Environment Variable

Default Value

Description

ENGRAM_DB_PATH

~/.engram/engram.sqlite

Absolute filesystem path for the SQLite WAL database.

ENGRAM_API_KEY

(None / Open Localhost)

Bearer token to protect HTTP / OpenAPI endpoints when exposed.

ENGRAM_ALLOWED_ORIGIN

*

Custom CORS allowed origin header for web agents.


πŸ›‘οΈ Sovereign Security & Privacy Guarantee

  • 100% On-Chip: Zero telemetry, zero analytics, zero external API dependencies required for standard operation.

  • POSIX Security: Database files are initialized with strict 0600 / 0700 user permissions.

  • No Cloud Vendor Lock-in: All memories, relational graphs, and embeddings reside in a single portable SQLite file that you own.


πŸ“œ License

Distributed under the MIT License. Free for sovereign builders, commercial systems, and open-source autonomous agent swarms.

Available Tools

15 tools
auto_contextA

Auto-Context Boot Tool for Agents: Recalls top high-importance active memories formatted in XML for session initialization.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
projectNo
min_importanceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the transparency burden. It usefully discloses that only top, high-importance, active memories are returned and that the output is XML. However, it does not state whether the tool has side effects, how 'active' is determined, or behavior when no memories match.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence with a useful label prefix. No filler words; the key behavior, filtering criteria, output format, and intended moment of use are all packed efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-like boot tool with an output schema and all optional parameters, the description is workable but incomplete. The output schema covers returns, yet the project parameter and the meaning of 'active' are not explained, so an agent has to infer important semantics from parameter names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention limit, project, or min_importance. 'High-importance' and 'top' loosely map to min_importance and limit, but project is entirely unaddressed, so the description does not compensate for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a distinct action ('Recalls top high-importance active memories') and a concrete output ('formatted in XML'), with a specific use case ('session initialization'). This distinguishes it from siblings like list_memories or search_memory by selection criteria and format, even though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly positions the tool as a boot/session-initialization tool, which tells the agent when to use it. It does not explicitly contrast it with alternatives or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

checkpoint_dbB

Execute WAL flush, vacuum, and performance optimization.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of behavioral disclosure. It states the operations performed, but does not disclose side effects, whether vacuum alters data, potential performance impact, or any authorization requirements. This leaves an agent under-informed about the consequences of calling it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler or redundant phrasing. Every word contributes to the intended benefit.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simpleβ€”no parameters and an output schema is presentβ€”so the description doesn't need to explain return values. However, it still lacks any guidance about when maintenance should be performed and what operational effects to expect, leaving it minimally complete but not fully informative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema already fully describes this fact. The baseline of 4 applies because there is no parameter semantics to add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names concrete operations (WAL flush, vacuum, performance optimization) and clearly identifies this as a database maintenance tool, distinguishing it from memory/graph sibling tools. It does not explicitly state the resource, but the tool name plus these operations make the intent clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to run a checkpoint or how to decide between this tool and alternatives. There are no exclusions, prerequisites, or context signals to help an agent decide whether this maintenance action is appropriate at a given time.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

consolidate_reflectionsC

Autonomous Memory Reflector Agent (Episodic Reflection): Synthesizes low-level episodic nodes into durable high-level insights.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYes
projectNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Synthesizes ... into durable insights' implies a transformation, but the description does not disclose whether source episodic nodes are deleted, archived, or preserved, nor whether the tool runs autonomously or requires user intervention. This ambiguity is significant for a memory-modifying operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action. The subtitle-like prefix 'Autonomous Memory Reflector Agent (Episodic Reflection)' adds mild context without much bloat. It earns a high score for efficiency, though it sacrifices informative detail for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a consolidation tool with no annotations and an output schema that likely only describes return values, the description leaves critical context missing: side effects, when to run, and how this differs from deduplication or saving. The simplicity of two parameters does not compensate for the lack of behavioral or usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no detail about 'topic' or 'project.' The parameter names are somewhat self-explanatory, but 'project' with a default of 'default' is unexplained and could mean a namespace, workspace, or grouping. The description fails to compensate for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and object: 'Synthesizes low-level episodic nodes into durable high-level insights.' This clearly distinguishes it from memory search, save, and graph tools, though it does not explicitly contrast with similar consolidation tools like deduplicate_memories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to invoke consolidate_reflections versus searching, saving, or deduplicating memories. The description does not mention prerequisites, conditions, or scenarios where consolidation is appropriate, leaving the agent to infer usage from the title alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deduplicate_memoriesA

Autonomous Memory Deduplication & Semantic Merging Agent: Finds clusters of duplicate/near-identical memory nodes, merges access counts and edges, and prunes redundant duplicate records in chunks of 1,000 nodes.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo
batch_sizeNo
similarity_thresholdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it is fairly informative: it discloses autonomous operation, merging of access counts and edges, and pruning/destruction of duplicate records. The chunk size of 1,000 nodes also reveals batching behavior. It could be more explicit about irreversibility or data-safety implications, but the core mutating behavior is clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly written, front-loaded with the main purpose, and each clause adds new information: clustering, merging, pruning, and batching. No fluff or redundant repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is an output schema and all parameters are optional with defaults, the description provides a workable picture of the tool's behavior. However, it lacks explicit usage guidance and detailed parameter semantics, and it does not warn about the autonomous, mutating nature beyond saying 'Autonomous' and 'prunes.' It is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only indirectly addresses batch_size via 'chunks of 1,000 nodes' and hints at similarity_threshold via 'near-identical.' The project parameter is completely unexplained, and no guidance is given for thresholds, defaults, or interaction between parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear, specific purpose: finding duplicate/near-identical memory nodes, merging access counts and edges, and pruning duplicates. This goes beyond the tool name and gives the agent a concrete model of what the operation does, distinguishing it from memory read/write siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: an agent would call this when memory deduplication is needed, and the description makes that obvious. However, it never explicitly says when to prefer this over consolidate_reflections or other maintenance tools, nor does it mention any conditions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_memoryA

Delete a memory node and cascade-delete all its associated knowledge graph edges by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It explicitly discloses the cascade-delete side effect on associated knowledge graph edges, which is critical for a destructive operation. It doesn't mention reversibility or error behavior, but the core side-effect is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the primary action and immediately followed by the cascade side-effect. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description covers the action and key side-effect. The output schema exists, so return values are covered elsewhere. Missing are error-case behavior and prerequisites, but for a single-id delete tool, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds that the operation is 'by ID,' clarifying that the id parameter identifies the memory node. However, it doesn't explain the ID format, how to obtain it, or what happens when the ID is invalid. The parameter name and tool name already make the meaning mostly inferable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete') and resource ('memory node'), and further specifies cascade-deletion of knowledge graph edges. This clearly distinguishes it from sibling tools like edit_memory or save_memory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It doesn't mention that edit_memory should be used for non-destructive changes, or that deletion is permanent. Usage is only implied by the name and verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_memoryA

Edit an existing memory's content, importance, or category by its node ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
contentNo
categoryNo
importanceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden for behavioral disclosure, but it only says 'edit' and does not clarify whether fields are updated selectively, whether null values clear fields, or what happens if the node ID does not exist. For a mutation tool, this leaves important edge-case behavior undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the operation and specifies the resource and fields. Every word is useful; there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation with an output schema, the core operation and input parameters are adequately described. Still, with zero annotations and zero schema descriptions, the definition leaves usage guidance and behavioral edge cases implicit rather than explicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description maps id to 'node ID' and names content, importance, and category as the editable fields, adding some meaning beyond the bare schema. However, it does not explain value semantics such as importance range, category format, or whether content replaces the previous value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation β€” edit an existing memory β€” and enumerates the mutable fields (content, importance, category) plus the locator (node ID). This clearly distinguishes it from siblings such as save_memory, delete_memory, and search_memory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you already have a memory's node ID and want to modify its fields. It does not explicitly say when not to use it or name save_memory as the alternative for creating a new memory.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_and_save_memoryC

Autonomous Memory Extractor Agent: Deconstructs text into atomic facts, extracts entity triples for the knowledge graph using hybrid local LLM sidecar + expanded NLP regex heuristics, and indexes vectors.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
agentNosystem
projectNodefault
categoryNogeneral
importanceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose side effects and invocation consequences. It reveals the internal pipeline (LLM sidecar, regex heuristics, vector indexing) but omits that this is a mutating/write operation, whether graph triples are persisted, and any effects on existing memories. The word 'Autonomous' also hints at behavior without explaining its scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is reasonably short, but the 'Autonomous Agent:' label and marketing-style wording waste the opening. The implementation details (local LLM sidecar, expanded NLP regex heuristics) add flavor rather than directly actionable guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with five parameters, no annotation coverage, and a write-oriented workflow, the description is incomplete. It does not explain when parameter overrides matter, what persistence side effects occur, or how this complements related memory tools. The output schema exists, but the description still leaves key invocation context missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only implies that 'text' is the content to be deconstructed. It adds no meaning for agent, project, category, or importance, so an agent cannot determine how those optional parameters affect extraction or storage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific process: deconstructing text into atomic facts, extracting entity triples, and indexing vectors. It conveys that this is an extraction-focused memory tool, though it does not explicitly say the results are persisted and does not distinguish it from siblings like save_memory or save_graph_relation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose extract_and_save_memory over alternatives. The sibling list includes save_memory, save_graph_relation, deduplicate_memories, and consolidate_reflections, but the description never names them or states the conditions that favor this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_statsA

Get system statistics, knowledge graph counts, and active hardware acceleration tier.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey safety and behavior itself. The verb 'Get' clearly signals a read-only operation, and the description lists the three categories of data returned. It does not mention side effects or costs, but for a zero-argument read-only stats tool this is a minor omission rather than a serious gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It states the action first and then names the three output categories efficiently. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description doesn't need to detail return values. It covers what the tool does, and with zero parameters and an implied read-only operation, there is little else an agent needs to know to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the input schema is empty and there is nothing to document. The description appropriately focuses on what the tool returns rather than parameter details. A baseline of 4 is warranted since no parameter semantics are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' and names a concrete resource bundle: system statistics, knowledge graph counts, and active hardware acceleration tier. This gives an agent a clear idea of what the tool returns and implicitly differentiates it from the sibling memory and graph tools, which are about storage and relationships rather than system metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance or mention of alternatives. The intended usage is implied by the tool's name and description: call it when you need system or knowledge-graph statistics. However, it doesn't say when not to use it or what other tools might be preferable for similar information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ingest_obsidianB

Ingest an entire Obsidian markdown vault into the knowledge graph and vector store.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNodefault
vault_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full behavioral disclosure burden. It names the destination of the data but does not mention whether ingestion is idempotent, overwrites existing data, requires authentication, is long-running, or has side effects on previously uploaded content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes meaning, clearly communicating the action and destination.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the tool is a bulk ingestion operation with likely side effects, and the description omits critical operational details such as idempotency, failure behavior, and whether the process is incremental or full-reload. The 0% schema coverage and absent annotations leave significant gaps for an agent deciding to invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate for unexplained parameters. It gives context for 'vault_path' by clarifying the vault is Obsidian markdown, but it completely ignores the 'project' parameter, leaving its purpose and effect ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('ingest'), a specific resource ('entire Obsidian markdown vault'), and clear targets ('knowledge graph and vector store'). This distinguishes it from siblings like save_memory or extract_and_save_memory, which handle individual items rather than bulk vault ingestion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied by the phrase 'entire Obsidian markdown vault' β€” it is for bulk import. However, the description does not explicitly state when to prefer this over alternatives, provide exclusions, or mention prerequisites such as vault structure or path requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_memoriesB

List recent memory nodes in the database, ordered by importance and recency.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose sorting behavior and recency-based selection, but it does not explicitly state that this is a read-only operation or describe any side effects, auth requirements, or scoping limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear, front-loaded sentence with no filler. Every word contributes to the core behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple list tool with no required parameters and an output schema, so the description is minimally viable for a basic call. However, it is incomplete for correct advanced use: the project parameter is unexplained, and there is no guidance on choosing this tool over search_memory.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the limit and project parameters, but it does not mention either. An agent is left to guess what 'project' filters or whether 'limit' caps the number of returned nodes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action (list), the resource (recent memory nodes), and a meaningful ordering rule (importance and recency). This makes the tool's basic behavior clear, though it does not explicitly distinguish it from the sibling search_memory tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus search_memory or other siblings. No conditions, exclusions, or alternative tool names are mentioned, so an agent must infer the right context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_graphB

Query knowledge graph relations with recursive multi-hop path traversal and bi-temporal filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYes
depthNo
projectNo
include_supersededNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral disclosure. It conveys that the operation is a query (read-oriented) and describes traversal and temporal filtering behaviors. However, it does not mention side effects, permission needs, output shape, or any constraints, leaving some transparency gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It is concise and includes the core action plus key modifiers, though the term 'bi-temporal filtering' is dense and might obscure meaning for some agents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four parameters with zero schema descriptions, no annotations, and sibling alternatives, the description is too sparse for correct invocation. It omits parameter meanings and usage context; the presence of an output schema only covers return values, not how to form a valid request.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate by explaining parameters. It does not: 'node', 'depth', 'project', and 'include_superseded' are left undefined, and the description's bi-temporal filtering reference only hints at one parameter without mapping.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Query') and resource ('knowledge graph relations') and names distinctive capabilities: 'recursive multi-hop path traversal' and 'bi-temporal filtering'. This clearly differentiates it from sibling tools like search_memory or visualize_graph.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no when-to-use guidance, no exclusions, and does not name any alternative tool or conditions for choosing this one over a sibling. The implied use case (graph traversal with temporal filtering) is not enough to route an agent reliably.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_graph_relationC

Save a Subject-Predicate-Object relation with bi-temporal validity and project namespace.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
targetYes
weightNo
projectNodefault
relationYes
valid_fromNo
valid_untilNo
superseded_byNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It mentions bi-temporal validity and project namespace, but does not explain side effects, overwrite semantics, validation behavior, or what happens to superseded relations. This is insufficient for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single tight sentence with no filler or redundancy. Key concepts are front-loaded. It is concise, though the dense phrase 'bi-temporal validity' could have been expanded without hurting clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters, no annotations, and no schema descriptions, this one-sentence description is not complete. It lacks usage context, parameter semantics, and behavior expectations. The presence of an output schema reduces the need to describe return values, but the other gaps remain significant.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate for all parameter explanations. It maps source, relation, and target to the SPO model and references project and bi-temporal fields, but it does not explain weight, valid_from/valid_until formats, or the semantics of superseded_by. Critically, none of the 8 parameters have meaningful descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool saves a Subject-Predicate-Object relation, which is a specific verb and resource. It also adds distinguishing details about bi-temporal validity and project namespace. However, it does not explicitly contrast it with sibling tools like save_memory or query_graph.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as save_memory, extract_and_save_memory, or query_graph. The description does not mention prerequisites, when not to use it, or how it differs from related save/query tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_memoryA

Save a new memory node with dense vector embedding, category, importance, project namespace, and conflict detection.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentNosystem
contentYes
projectNodefault
categoryNogeneral
importanceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It does indicate that the operation creates a new node, computes a dense vector embedding, and performs conflict detection. However, it does not explain what conflict detection actually doesβ€”whether it blocks the save, returns a warning, or triggers deduplicationβ€”and it omits any side-effect or authorization details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is one front-loaded sentence with no filler. It leads with the action and object, then lists relevant attributes efficiently. Every phrase adds either operational clarity or meaningful behavioral detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The presence of an output schema reduces the need to explain return values. However, for a tool with no annotations and several sibling tools, the description leaves gaps: conflict detection behavior is unexplained, the agent parameter is ignored, and there is no guidance distinguishing direct saving from extract_and_save_memory. The core create operation is clear, but the surrounding context is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It names category, importance, and project namespace, which maps to three of the five parameters, and 'dense vector embedding' hints at how content is processed. However, it says nothing about the agent parameter and does not clarify what content should actually contain, leaving the required parameter semantically under-described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Save') on a specific resource ('a new memory node'), clearly distinguishing this from sibling operations like edit_memory, delete_memory, or save_graph_relation. The added details about category, importance, project namespace, and conflict detection make the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: call this when creating and persisting a new memory node. However, it provides no explicit guidance about when to prefer this over alternatives like extract_and_save_memory, edit_memory, or deduplicate_memories, and there are no exclusion criteria or prerequisites stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_memoryB

Search memory using 4-Way Reciprocal Rank Fusion (RRF): Fuses Dense Vector Cosine Similarity + Trigram FTS5 Lexical + Graph Spreading Activation + ACT-R Decay.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
hybridNo
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal a significant behavioral traitβ€”the search fuses dense vector, lexical FTS5, graph spreading activation, and ACT-R decayβ€”but it does not mention side effects, read-only nature, result ordering, pagination, or the effect of the hybrid flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences with the primary verb and resource front-loaded. Every phrase earns its place, and the technical detail is packed efficiently into a colon-introduced list without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the definition omits parameter semantics and usage guidance for a 4-parameter tool with 0% schema description coverage. An agent would be uncertain about the purpose of the hybrid toggle and the project filter, so the description is not complete enough for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to compensate, but it defines none of the four parameters. Query and limit are self-explanatory from their names, but hybrid is ambiguous given the tool itself is already described as hybrid, and project's filtering semantics are unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource ('Search memory') and specifies the distinctive 4-Way RRF fusion mechanism, making the tool's core function obvious. It does not explicitly distinguish itself from sibling tools like list_memories or query_graph, but the technical detail prevents it from being a generic or tautological description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus its siblings, no exclusions, and no alternative recommendations. It focuses entirely on the internal search mechanism, leaving an agent to infer use cases from tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

visualize_graphB

Knowledge Graph Topology Visualizer: Generates Mermaid.js and ASCII relational network diagrams for power users.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeYes
depthNo
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden. It does disclose the primary behavior: generating Mermaid.js and ASCII relational network diagrams. However, it does not state whether the operation is read-only, what depth means, or how missing nodes are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the tool's purpose. The 'for power users' phrase adds marginal value, but overall the text is scannable and free of redundant schema repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given three parameters with zero schema-level descriptions and no annotations, the description is too thin for an agent to assemble a correct call. The output schema may cover return structure, but input semantics and usage context are missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to explain node, depth, and project. It mentions none of them, leaving the required 'node' parameter ambiguous and the 'depth' semantics entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states a specific verb and resource: it generates Knowledge Graph topology diagrams. It also names concrete output formats (Mermaid.js and ASCII), which distinguishes it from sibling tools like query_graph or save_graph_relation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus query_graph or other graph-related siblings. The word 'Visualizer' implies use for diagramming, but there are no explicit when-to-use or when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.4/5.0
Disambiguation4/5

Most tools have distinct targets: memory nodes, graph relations, ingestion, maintenance, and stats. A few pairs like save_memory vs extract_and_save_memory or search_memory vs auto_context could overlap, but their descriptions clarify the intended workflow. No tools are truly redundant.

Naming Consistency4/5

Tool names are consistently lowercase snake_case and mostly follow a verb-first pattern. The main outlier is auto_context, which is a noun phrase, and graph-related names mix save_graph_relation, query_graph, and visualize_graph. Overall the pattern remains predictable and readable.

Tool Count5/5

15 tools is at the upper edge of ideal but well-scoped for a memory system that combines vector storage, knowledge graph operations, ingestion, reflection, and maintenance. Each tool serves a distinct purpose, and none feel purely decorative or redundant.

Completeness4/5

Memory CRUD is well covered with save, search, edit, delete, and list, and graph relations have save and query support. Missing direct graph relation editing/deletion and a get-memory-by-ID tool are minor gaps, but cascade deletion and search/list provide workarounds.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides long-term memory for LLMs via local SQLite storage with hybrid search (BM25, vectors, recency decay), enabling AI coding agents to persist and recall memories across sessions without cloud or API keys.
    53
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides AI coding agents with persistent, graph-connected memory across projects, enabling cross-project context retrieval via synaptic connections and hybrid search.
    15
    6
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lalithbuilds/engram-alpha-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server