Skip to main content
Glama
Enhanced Knowledge Graph Memory Server

Enhanced Knowledge Graph Memory Server

Memory MCP Server

NPM License MCP TypeScript

An enhanced fork of the official Model Context Protocol memory server. The fork adds hierarchical nesting, intelligent compression, semantic search, graph algorithms, archiving, advanced search, and multi-format import/export.

Enterprise-grade knowledge graph with 241 tools including hierarchical organization, semantic search with embeddings, graph traversal algorithms, duplicate detection, smart archiving, project scoping, temporal knowledge graph, semantic forget, agent diary, entity bitemporal validity, optimistic concurrency control, role-based access control, W3C Linked Data exports (Turtle / JSON-LD / RDF/XML), PII redaction on export, procedural memory, active retrieval, causal reasoning, world model, do_not_remember exclusions, decision rationale (ADR memory + markdown dual-write), structured project context (facts / conventions / commands / glossary), heuristic guidelines, tool affordance + ToolCallObserver pipeline (with MCP shim), observation dedup, spell correction, n-ary event memory, reconstructive (Cue–Tag–Content) memory with snapshot persistence, relation consolidation, agent reflections, and a graph-connectivity hybrid-search channel with evidence-path explanations for long-term memory management.

Table of Contents

Related MCP server: Hippocampus

Features

Core Memory Capabilities

  • Knowledge Graph Storage: Entity-Relation-Observation model for structured memory

  • Persistent Memory: Information persists across chat sessions with JSONL or SQLite storage

  • Dual Storage Backends: JSONL (human-readable) or SQLite with better-sqlite3 (3-10x faster, FTS5 search)

  • Full CRUD Operations: Create, read, update, delete entities and relations

  • Flexible Search: Text-based, fuzzy, boolean, semantic, and TF-IDF ranked search

Advanced Features

Category

Tools

Description

Hierarchical Nesting

9

Parent-child relationships for organizing tree structures

Graph Algorithms

4

Path finding, connected components, centrality metrics

Intelligent Search

3

Hybrid multi-layer search with query analysis and reflection

Semantic Search

3

Embedding-based similarity search with OpenAI or local models

Memory Compression

4

Intelligent duplicate detection and merging with similarity scoring

Advanced Search

7

TF-IDF ranking, boolean queries, fuzzy matching, auto-select

Observation Normalization

1

Coreference resolution and temporal anchoring

Tag Management

6

Tags, bulk operations, importance scores

Tag Aliases

5

Tag synonym/alias management

Saved Searches

5

Store and execute frequent queries

Import/Export

2

7 export formats (incl. W3C Linked Data: Turtle / JSON-LD / RDF/XML) with brotli + PII redaction; 3 import formats

Graph Analytics

2

Statistics, validation, integrity checks

Ref Index

4

Cross-session symbolic reference registration and resolution

Artifacts

3

Named versioned content blobs attached to entities

Temporal Search

1

Time-window filtered search across the knowledge graph

Distillation

1

Configure automated observation distillation pipelines

Freshness

5

Staleness tracking, expiry detection, and freshness reporting

LLM Query

1

Natural-language question answering over the graph

Governance

4

Transactional audit trail, history, and rollback

Role Profiles

2

Per-agent role assignment and profile listing

Entropy

2

Entropy-based noise filtering and information density scoring

Consolidation

3

Background memory consolidation scheduling and control

Formatter

1

Salience-budget-aware context formatting

Collaborative

1

Multi-agent context synthesis

Failure Handling

2

Session failure distillation and graceful session end

Cognitive Load

2

Working-memory load analysis and adaptive reduction

Dream Engine

3

Background memory maintenance: 8-phase sleep-cycle consolidation

Project Scoping

1

List and filter entities by project

Memory Versioning

2

Entity version chains and per-entity version history

Semantic Forget

1

Two-tier deletion: exact match → semantic similarity fallback

Profiles

2

User/agent profile get and update

Temporal KG

3

Temporal relation invalidation, time-travel queries, relation timeline

Ingestion

1

Format-agnostic conversation/document ingestion pipeline

Agent Diary

2

Per-agent persistent journal write and read

Session & Working Memory

9

Session lifecycle, working memory CRUD, TTL, promotion, context wake-up

Auto-Enhancement

3

Auto-link entity mentions, fact extraction, contradiction detection

Context Compression

1

N-gram text abbreviation with legend for token savings

Consolidation Pipeline

3

Session consolidation, pattern detection, entity summarization

Decay & Salience

5

Time-based decay, importance scoring, weak memory cleanup, reinforcement

Multi-Agent

5

Agent registration, cross-agent search, visibility, conflict resolution

Observability

4

D3.js graph visualization, transcript splitting, query cost estimation

Dedup

1

Priority-based smart deduplication

Entity Bitemporal

5

Time-travel queries: invalidate entities/observations, entity_as_of, timelines

Optimistic Concurrency

1

update_entity with expectedVersion → VersionConflictError on stale

RBAC

4

Role-based access control: assign/revoke/check/list reader/writer/admin/owner permissions

Procedural Memory

5

Executable how-to sequences with EWMA-refined success rate

Active Retrieval

1

Iterative query rewriting until coverage threshold met

Causal Reasoning

4

Chain discovery, counterfactual queries, cycle detection

World Model

3

Graph snapshots, fact validation, outcome prediction

Comparison with Official Memory Server

Feature

Official

Enhanced (This Fork)

Entity/Relation/Observation Management

✅

✅

Basic Search

✅

✅

Hierarchical Nesting

❌

✅ Parent-child trees

Graph Algorithms

❌

✅ Path finding, centrality

Semantic Search

❌

✅ Embedding-based similarity

Memory Compression

❌

✅ Duplicate detection

Brotli Compression

❌

✅ Backups, exports, responses

Smart Archiving

❌

✅ Criteria-based

Advanced Search

❌

✅ TF-IDF + Boolean + Fuzzy

SQLite Backend

❌

✅ better-sqlite3 (3-10x faster)

Full-Text Search

❌

✅ FTS5 with BM25 ranking

Timestamps

❌

✅ createdAt + lastModified

Import/Export Formats

❌

✅ 7 export / 3 import

Input Validation

❌

✅ Zod schemas

Backup & Restore

❌

✅ Compressed snapshots

Intelligent Search

❌

✅ Hybrid + Query Analysis + Reflection

Observation Normalization

❌

✅ Coreference resolution + temporal anchoring

Total Tools

11

160

Code Structure

Monolithic

Modular (5 src files in this repo; core graph in @danielsimonjr/memoryjs)

Quick Start

1. Install from NPM

npm install -g @danielsimonjr/memory-mcp

Or use with npx (no installation required):

npx @danielsimonjr/memory-mcp

2. Configure Claude Desktop

Add to claude_desktop_config.json:

Using NPM Global Install:

{
  "mcpServers": {
    "memory": {
      "command": "mcp-server-memory"
    }
  }
}

Using NPX:

{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["-y", "@danielsimonjr/memory-mcp"]
    }
  }
}

3. Restart Claude Desktop

Restart Claude Desktop to load the enhanced memory server.

4. Start Using

Tell Claude:

Please remember that I prefer TypeScript over JavaScript.
Tag this as "preferences" with importance 8.
Create a parent entity called "Development Preferences" and nest this under it.

Installation

Local Build

# Clone repository
git clone https://github.com/danielsimonjr/memory-mcp.git
cd memory-mcp

# Install and build
bun install
bun run build

# Run tests
bun run test

# Type check
bun run typecheck

Claude Desktop Configuration

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

{
  "mcpServers": {
    "memory": {
      "command": "node",
      "args": ["<PATH_TO>/memory-mcp/dist/index.js"],
      "env": {
        "MEMORY_FILE_PATH": "<PATH_TO>/memory.jsonl"
      }
    }
  }
}

VS Code

Add to .vscode/mcp.json:

{
  "servers": {
    "memory": {
      "command": "node",
      "args": ["/path/to/memory-mcp/dist/index.js"]
    }
  }
}

Core Concepts

Entities

Primary nodes in the knowledge graph.

interface Entity {
  name: string;           // Unique identifier
  entityType: string;     // Classification
  observations: string[]; // Facts about the entity
  parentId?: string;      // Parent entity name for hierarchical nesting
  tags?: string[];        // Lowercase tags for categorization
  importance?: number;    // 0-10 scale for prioritization
  createdAt?: string;     // ISO 8601 timestamp
  lastModified?: string;  // ISO 8601 timestamp
}

Relations

Directed connections between entities.

interface Relation {
  from: string;           // Source entity name
  to: string;             // Target entity name
  relationType: string;   // Relationship type (active voice)
  createdAt?: string;     // ISO 8601 timestamp
  lastModified?: string;  // ISO 8601 timestamp
}

Observations

Discrete facts about entities. Each observation should be atomic and independently manageable.

API Reference

Complete Tool List (241 Tools)

Tool count: 241 tools across 65 categories. The sections Extended Tools and Hybrid Search Options list the options that existing tools accept. For full per-tool schemas see docs/architecture/API.md or src/server/toolDefinitions.ts.

Entity Operations (4 tools)

Tool

Description

create_entities

Create multiple new entities

delete_entities

Remove entities and their relations

read_graph

Read entire knowledge graph

open_nodes

Retrieve specific nodes by name

Relation Operations (2 tools)

Tool

Description

create_relations

Create relations between entities

delete_relations

Remove specific relations

Observation Management (3 tools)

Tool

Description

add_observations

Add observations to entities

delete_observations

Remove specific observations

normalize_observations

Normalize observations (resolve pronouns, anchor dates)

Search (7 tools)

Tool

Description

search_nodes

Search with filters (tags, importance)

search_by_date_range

Filter by date range

search_nodes_ranked

TF-IDF relevance ranking

boolean_search

Boolean queries (AND/OR/NOT)

fuzzy_search

Typo-tolerant search

get_search_suggestions

"Did you mean?" suggestions

search_auto

Auto-select best search method

Intelligent Search (3 tools)

Tool

Description

hybrid_search

Multi-layer search combining semantic, lexical, and symbolic signals

analyze_query

Extract entities, temporal references, and classify query complexity

smart_search

Reflection-based iterative search until results meet adequacy threshold

Semantic Search (3 tools)

Tool

Description

semantic_search

Search by semantic similarity using embeddings

find_similar_entities

Find entities similar to a reference entity

index_embeddings

Build or rebuild the semantic search index

Saved Searches (5 tools)

Tool

Description

save_search

Save search query for reuse

execute_saved_search

Execute a saved search

list_saved_searches

List all saved searches

delete_saved_search

Delete a saved search

update_saved_search

Update saved search parameters

Tag Management (6 tools)

Tool

Description

add_tags

Add tags to an entity

remove_tags

Remove tags from an entity

set_importance

Set entity importance (0-10)

add_tags_to_multiple_entities

Bulk tag operation

replace_tag

Replace tag globally

merge_tags

Merge two tags into one

Tag Aliases (5 tools)

Tool

Description

add_tag_alias

Create tag synonym

list_tag_aliases

List all aliases

remove_tag_alias

Remove an alias

get_aliases_for_tag

Get aliases for canonical tag

resolve_tag

Resolve alias to canonical form

Hierarchical Nesting (9 tools)

Tool

Description

set_entity_parent

Set/remove parent relationship

get_children

Get immediate children

get_parent

Get parent entity

get_ancestors

Get all ancestors (parent chain)

get_descendants

Get all descendants (recursive)

get_subtree

Get entity + descendants with relations

get_root_entities

Get entities with no parent

get_entity_depth

Get depth in hierarchy

move_entity

Move entity to new parent

Graph Algorithms (4 tools)

Tool

Description

find_shortest_path

Shortest path between entities (BFS)

find_all_paths

All paths with max depth limit

get_connected_components

Detect isolated subgraphs

get_centrality

Calculate centrality metrics (degree, betweenness, PageRank)

Graph Analytics (2 tools)

Tool

Description

get_graph_stats

Comprehensive graph statistics

validate_graph

Validate graph integrity

Compression & Archiving (4 tools)

Tool

Description

find_duplicates

Find similar entities by threshold

merge_entities

Merge multiple entities into one

compress_graph

Auto compression with dry-run

archive_entities

Archive by age, importance, or tags

Import & Export (2 tools)

Tool

Description

export_graph

Export in 7 formats (JSON, CSV, GraphML, GEXF, DOT, Markdown, Mermaid) with compression

import_graph

Import from JSON/CSV/GraphML with merge strategies

Ref Index (4 tools)

Tool

Description

register_ref

Register a symbolic reference pointing to an entity

resolve_ref

Resolve a symbolic reference to its target entity

deregister_ref

Remove a registered symbolic reference

list_refs

List all registered symbolic references

Artifacts (3 tools)

Tool

Description

create_artifact

Create a named versioned content blob attached to an entity

get_artifact

Retrieve an artifact by name and optional version

list_artifacts

List all artifacts, optionally filtered by entity

Temporal Search (1 tool)

Tool

Description

search_by_time

Search entities and observations within a time window

Distillation (1 tool)

Tool

Description

configure_distillation

Configure automated observation distillation pipelines

Freshness (5 tools)

Tool

Description

check_freshness

Check freshness status of a specific entity

get_stale_entities

List entities that have exceeded their staleness threshold

get_expired_entities

List entities past their explicit expiry date

refresh_entity

Reset the freshness timestamp on an entity

freshness_report

Generate a full freshness report across the graph

LLM Query (1 tool)

Tool

Description

query_natural_language

Answer natural-language questions over the knowledge graph

Governance (4 tools)

Tool

Description

governance_transaction

Execute a governed, audited graph transaction

audit_query

Query the audit log with filters

audit_history

Retrieve full audit history for an entity

rollback_operation

Roll back a previously recorded operation

Role Profiles (2 tools)

Tool

Description

set_agent_role

Assign a role profile to the current agent context

list_role_profiles

List all available agent role profiles

Entropy (2 tools)

Tool

Description

enable_entropy_filter

Enable entropy-based noise filtering for search results

compute_entropy

Compute information-density entropy score for an entity

Consolidation (3 tools)

Tool

Description

start_consolidation

Start the background memory consolidation service

stop_consolidation

Stop the background memory consolidation service

run_consolidation_now

Trigger an immediate consolidation pass

Formatter (1 tool)

Tool

Description

format_with_salience_budget

Format context output respecting a token salience budget

Collaborative (1 tool)

Tool

Description

synthesize_collaborative_context

Synthesize a unified context view from multiple agent memory spaces

Failure Handling (2 tools)

Tool

Description

distill_failure

Distill and store key observations from a failed session

end_session

Gracefully end a session and persist in-flight state

Cognitive Load (2 tools)

Tool

Description

analyze_cognitive_load

Analyze working-memory load in the current context

adaptive_reduce_memories

Adaptively reduce memory set to fit cognitive load target

Project Scoping (1 tool)

Tool

Description

list_projects

List all project IDs present in the graph and filter entities by project

Memory Versioning (2 tools)

Tool

Description

get_entity_versions

Retrieve all versions of a versioned entity by name

get_version_chain

Get the full version chain from root to latest for an entity

Semantic Forget (1 tool)

Tool

Description

forget_memory

Delete an entity by exact name, falling back to semantic similarity if no exact match found

Profiles (2 tools)

Tool

Description

get_profile

Retrieve a user or agent profile entity

update_profile

Update observations and metadata on a profile entity

Temporal KG (3 tools)

Tool

Description

invalidate_relation

Mark a relation as ended by setting its temporal validity end date

query_as_of

Retrieve all relations for an entity that were valid at a given point in time

timeline

Return a chronological list of relation events for an entity

Ingestion (1 tool)

Tool

Description

ingest

Ingest a conversation, document, or free-form text into the knowledge graph

Agent Diary (2 tools)

Tool

Description

diary_write

Append an entry to the agent's persistent diary

diary_read

Read diary entries for an agent, optionally filtered by date range

Entity Bitemporal Validity (5 tools)

Tool

Description

invalidate_entity

Stamp validUntil on an entity (idempotent; entity remains queryable for past timestamps via entity_as_of)

entity_as_of

Time-travel query: returns entity state at a given ISO 8601 timestamp, or null if invalidated then

entity_timeline

All temporal versions of an entity in chronological order; integrates the supersession chain

invalidate_observation

Per-observation invalidation via parallel observationMeta[] entry on the entity

observations_as_of

Filter observations valid at a given timestamp; observations without meta are treated as unbounded

Optimistic Concurrency Control (1 tool)

Tool

Description

update_entity

Update an entity with optional expectedVersion; throws VersionConflictError on stale version. OCC-guarded writes auto-increment version. Omit expectedVersion for legacy last-write-wins.

RBAC (4 tools)

Tool

Description

rbac_assign_role

Grant reader / writer / admin / owner (or custom) role to an agent; optional resourceType, scope prefix, validFrom / validUntil window

rbac_revoke_role

Remove a specific role assignment matched by agentId + role + resourceType

rbac_check_permission

Check whether an agent can perform read / write / delete / manage on a resource type; falls back to defaultRole=reader for unassigned agents

rbac_list_assignments

List all role assignments for an agent; optional activeOnly filter

Procedural Memory (5 tools)

Tool

Description

add_procedure

Persist an executable how-to sequence: 1-indexed steps with optional fallback chains and free-form trigger phrases

get_procedure

Load a procedure by id

match_procedure

Token-overlap match a context description against stored procedures; returns ranked Jaccard-like scores

refine_procedure

Apply caller feedback after execution; updates successRate via EWMA (α=0.2)

get_procedure_step

Load step by 1-indexed order, or get the next step relative to currentOrder

Active Retrieval (1 tool)

Tool

Description

adaptive_retrieve

Iterative query-rewriting retrieval (search → score coverage → rewrite); up to 3 rounds, and it stops early when the coverage reaches 0.6. Pure symbolic — no LLM provider required.

Causal Reasoning (4 tools)

Tool

Description

find_causes

Causal chains ending at the named effect; sorted by product-of-edge causalStrength

find_effects

Symmetric counterpart starting at the named cause

counterfactual_query

"If we remove edge (removeFrom → removeTo), is predict still reachable from seed?" Returns surviving chains. Pure: does not mutate the graph.

detect_causal_cycles

Detect cycles in the causal subgraph rooted at seed

World Model (3 tools)

Tool

Description

get_world_state

Capture a fresh snapshot of the live graph (capped at 1000 entities; over-cap prefers high-importance)

validate_fact_against_world

Validate a candidate observation against a target entity via MemoryValidator.validateConsistency. Returns {result: null, reason: 'embedding_provider_unavailable'} when the local embedding provider is selected without @xenova/transformers installed.

predict_outcome

Predict downstream effects of an action by walking the causal subgraph (delegates to find_effects)

Extended Tools

  • export_graph — Accepts format: 'turtle' | 'rdf-xml' | 'json-ld' for W3C Linked Data exports. Accepts redactPii: true to scrub PII (email / SSN / credit-card / phone / IPv4) from observations with the PiiRedactor.

  • create_entities — Accepts freshness fields (ttl, confidence), project scope (projectId), and bitemporal fields (validFrom, validUntil, observationMeta) per entity.

  • set_memory_visibility — Auto-promotes plain entities to AgentEntity (stamps agentId / memoryType / confidence) instead of silently returning null. Supports a time window and a role gate (allowedRoles, visibleFrom, visibleUntil).

Tool Affordance (11 tools)

Tool

Description

record_tool_outcome

Record a tool call outcome (success/failure) into affordance stats

get_tool_affordance_stats

Per-tool success-rate and usage statistics

suggest_tool

Suggest the best tool for a task based on recorded affordances

list_tool_affordances

List all recorded tool affordances

remove_tool_affordance

Remove one tool's affordance record

observe_tool_start

ToolCallObserver lifecycle: mark a tool call started

observe_tool_complete

Mark an observed tool call completed successfully

observe_tool_error

Mark an observed tool call failed

observe_tool_partial

Mark an observed tool call partially successful

observe_tool_cancel

Cancel an in-flight tool observation

tool_observer_in_flight_count

Count of currently in-flight observed tool calls

Heuristic Guidelines (10 tools)

Tool

Description

add_heuristic

Store a heuristic guideline ("when X, prefer Y")

get_heuristic

Fetch one heuristic by id

list_heuristics

List stored heuristics

heuristic_count

Count of stored heuristics

match_heuristics

Heuristics matching a context string

reinforce_heuristic

Strengthen a heuristic after successful application

record_heuristic_contradiction

Record evidence contradicting a heuristic

detect_heuristic_conflicts

Detect mutually contradictory heuristics

remove_heuristic

Remove one heuristic

clear_heuristics

Remove all heuristics

Project Context (12 tools)

Tool

Description

upsert_project_context

Create/replace a project's structured context record

get_project_context

Fetch a project's context record

append_project_fact

Append a fact to a project context

append_project_convention

Append a coding/workflow convention

append_project_command

Append a named command (e.g. build/test invocations)

append_project_glossary_term

Append a glossary term + definition

remove_project_fact

Remove a fact by index/value

remove_project_convention

Remove a convention

remove_project_command

Remove a command

remove_project_glossary_term

Remove a glossary term

clear_project_context

Delete a project's context record

format_project_context_for_llm

Render the context as LLM-ready markdown

Decision Rationale (10 tools)

Tool

Description

propose_decision

Record a proposed decision with rationale

accept_decision

Mark a decision accepted

reject_decision

Mark a decision rejected

supersede_decision

Supersede a decision with a newer one

find_decisions_by_context

Decisions matching a context string

get_decision_chain

Follow a decision's supersession chain

list_decisions

List decisions (filterable by status)

get_decision

Fetch one decision by id

export_decision_as_adr_markdown

Render a decision as ADR markdown

parse_adr_markdown

Parse ADR markdown back into a decision record

Exclusion / do_not_remember (5 tools)

Tool

Description

add_exclusion_rule

Add a rule for content that must not be remembered

list_exclusion_rules

List exclusion rules

remove_exclusion_rule

Remove one exclusion rule

check_exclusion

Check whether a text would be excluded

find_matching_memories_for_rule

Existing memories matching an exclusion rule

Observation Dedup (2 tools)

Tool

Description

find_duplicate_observations

Exact duplicate observations across entities

find_jaccard_duplicate_observations

Near-duplicates via Jaccard token similarity

Spell Correction (3 tools)

Tool

Description

spell_suggest

"Did you mean?" suggestions for a query term

spell_rebuild_vocabulary

Rebuild the spell-check vocabulary from the graph

spell_vocabulary_size

Current vocabulary size

Active Project Scope (2 tools)

Tool

Description

set_project_scope

Set the server's active project-scope filter (per-session mutable state)

get_project_scope

Get the active project scope ({ projectId }, null when unscoped)

Engineering / Diagnostics (10 tools)

Tool

Description

diag

Server + storage diagnostic snapshot

health

Quick health check

check_graph

Graph integrity check

reindex

Rebuild search indexes

cache_stats

Stats for the global search caches

cache_clear

Bust all global search caches

graph_size

Entity/relation/observation counts + on-disk footprint

inspect_entity

Verbose single-entity snapshot (observations, relations, hierarchy)

hierarchy_tree

Hierarchy as nested JSON

entity_neighbors

Incoming/outgoing relations + degree counts for one entity

Event Memory (5 tools)

Tool

Description

record_event

Reify an action as an event hub entity with role-typed relations (actor_of / targeted / occurred_in / participant_in) and optional flow:<key> grouping

get_event

Load one event with its resolved role endpoints

query_events

Query by actor / target / action / flowKey / time range, chronologically ordered

get_event_flow

Full timeline of a named flow (e.g. a release or incident)

who_did_what

"Who did what (to target / in context / within range)?" join over events

Reconstructive Memory (5 tools)

Tool

Description

ingest_dialogue

Distill dialogue turns into the Cue–Tag–Content associative graph (also persisted into the live knowledge graph)

reconstruct_memory

Answer a query via active multi-step traversal; returns evidence + trajectory

reconstructive_memory_stats

CTC graph size statistics

save_reconstructive_memory

Serialize the CTC graph to a <basename>-reconstructive.json sidecar

load_reconstructive_memory

Restore the CTC graph from the sidecar (survives restarts)

Relation Consolidation (2 tools)

Tool

Description

analyze_relation_duplicates

Dry-run the three-tier relation janitor: spelling variants, inverse duplicates, semantic duplicates (with embeddings)

consolidate_relations

Apply tier 1+2 merges (apply: true) or dry-run (default)

Agent Reflection (4 tools)

Tool

Description

create_reflection

Persist an evidence-backed generalized lesson (scope: session / project / global)

list_reflections

List reflections, filterable by scope / source / confidence

get_relevant_reflections

Reflections relevant to a session (sourceSessionId + evidence overlap)

archive_reflection

Soft-delete a reflection out of default listings

Hybrid Search Options

  • hybrid_search — Accepts four additive options:

    • graphWeight: a graph-connectivity channel through normalized PageRank.

    • expandNeighbors: a one-hop expansion of the top results with damped scores.

    • explain: annotates results with evidence paths from the query anchors.

    • lookFor: ranks the expansion neighbors by a free-text connection description.

Configuration

Environment Variables

Variable

Description

Default

MEMORY_FILE_PATH

Path to storage file

memory.jsonl (current directory)

MEMORY_STORAGE_TYPE

Storage backend: jsonl or sqlite

jsonl

MEMORY_EMBEDDING_PROVIDER

Embedding provider: openai, local, llamacpp, or none

none

MEMORY_OPENAI_API_KEY

OpenAI API key (required if provider is openai)

-

MEMORY_EMBEDDING_MODEL

Embedding model to use

text-embedding-3-small (OpenAI) / Xenova/all-MiniLM-L6-v2 (local) / llamacpp-local (llamacpp)

MEMORY_EMBEDDING_BASE_URL

Base URL of a local llama-server (used when provider is llamacpp)

http://127.0.0.1:8080

MEMORY_AUTO_INDEX_EMBEDDINGS

Auto-index entities on creation

false

Storage Backends

Feature

JSONL (Default)

SQLite (better-sqlite3)

Format

Human-readable text

Native binary database

Transactions

Basic

Full ACID with WAL mode

Full-Text Search

Basic

FTS5 with BM25 ranking

Performance

Good

3-10x faster

Concurrency

Single-threaded

Thread-safe with async-mutex

Best For

Small graphs, debugging

Large graphs (10k+ entities)

Using SQLite:

{
  "mcpServers": {
    "memory": {
      "command": "node",
      "args": ["/path/to/memory-mcp/dist/index.js"],
      "env": {
        "MEMORY_STORAGE_TYPE": "sqlite",
        "MEMORY_FILE_PATH": "/path/to/data/memory.db"
      }
    }
  }
}

Storage Files

When you set MEMORY_FILE_PATH, the server automatically creates related files:

/your/data/directory/
├── memory.jsonl                    # Main knowledge graph
├── memory-saved-searches.jsonl     # Saved search queries
├── memory-tag-aliases.jsonl        # Tag synonym mappings
└── .backups/                       # Timestamped backups
    ├── backup_2026-01-08_10-30-00-123.jsonl
    └── backup_2026-01-08_10-30-00-123.jsonl.meta.json

Migration Tool

Convert between JSONL and SQLite formats:

cd tools/migrate-from-jsonl-to-sqlite
npm install && npm run build

# JSONL to SQLite
node dist/migrate-from-jsonl-to-sqlite.js --from memory.jsonl --to memory.db

# SQLite to JSONL
node dist/migrate-from-jsonl-to-sqlite.js --from memory.db --to memory.jsonl

Development

Prerequisites

  • Bun 1.4+ (install + scripts; bun.lock is authoritative)

  • Node.js 22+ (shipped runtime — CI smokes dist/ under Node)

  • TypeScript 7+

Build Commands

bun install           # Install dependencies
bun run build         # Build TypeScript
bun run test          # Run tests
bun run typecheck     # Strict type checking
bun run watch         # Development watch mode
bun run clean         # Remove dist/ directory
bun run docs:deps     # Generate dependency graph

Architecture

This repo is a thin MCP wrapper. All graph logic, managers, and storage live in @danielsimonjr/memoryjs. The version range is in package.json.

memory-mcp (this repo)              @danielsimonjr/memoryjs (npm dep)
┌──────────────────────────┐        ┌──────────────────────────────────┐
│  src/index.ts            │        │  ManagerContext (lazy init)      │
│  src/server/MCPServer.ts │───────▶│  EntityManager, RelationManager  │
│  src/server/toolDefs.ts  │imports │  SearchManager, IOManager, etc.  │
│  src/server/toolHandlers │        │  GraphStorage / SQLiteStorage    │
│  src/server/responseComp.│        │  StorageFactory + 100+ modules   │
└──────────────────────────┘        └──────────────────────────────────┘
       5 source files                  77+ source files (extracted)
       MCP protocol + dispatch         All graph + search + storage

Layer

Lives in

Files

MCP protocol (stdio transport, tool registration, dispatch)

memory-mcp

5

Tool schemas (241 tools across 65 categories)

memory-mcp (toolDefinitions.ts)

1

Handler registry + Zod validation + response compression

memory-mcp (toolHandlers.ts + responseCompressor.ts)

2

Managers (Entity / Relation / Search / IO / Tag / Hierarchy / Analytics / Compression / Archive / GraphTraversal / SemanticSearch / RankedSearch / etc.)

memoryjs

100+

Storage (JSONL + SQLite with FTS5 + StorageFactory + TransactionManager)

memoryjs

—

Embedding providers (OpenAI / local / none) + VectorStore

memoryjs

—

Project Structure

memory-mcp/
├── src/                                    # Source (5 TypeScript files)
│   ├── index.ts                            # Entry point: ManagerContext + start MCPServer; re-exports memoryjs types
│   └── server/
│       ├── MCPServer.ts                    # MCP Server setup, stdio transport, request handlers
│       ├── toolDefinitions.ts              # 241 tool schemas (name, description, inputSchema)
│       ├── toolHandlers.ts                 # Handler registry: validate args → call manager → format response
│       └── responseCompressor.ts           # Brotli + base64 wrapper for >256KB payloads
├── tests/                                  # Test suite
│   ├── unit/                               # Unit tests (response compressor, tool defs, validate-fact handler, API.md Returns gate)
│   ├── integration/                        # MCP server lifecycle
│   ├── e2e/tools/                          # Per-category tool tests + handler-smoke broad coverage
│   ├── knowledge-graph.test.ts             # Core graph operations (smoke against memoryjs)
│   └── file-path.test.ts                   # Storage path resolution
├── dist/                                   # Compiled output (rebuilt on `npm install` via `prepare`)
├── docs/                                   # Documentation
│   ├── architecture/                       # API.md, ARCHITECTURE.md, COMPONENTS.md, OVERVIEW.md, TEST_COVERAGE.md
│   ├── guides/                             # HIERARCHY.md, COMPRESSION.md, ARCHIVING.md, QUERY_LANGUAGE.md
│   ├── development/                        # WORKFLOW.md
│   ├── roadmap/                            # FUTURE_FEATURES.md, PERFORMANCE_AND_CAPABILITIES.md
│   └── reports/                            # Historical sprint reports
├── tools/                                  # Standalone utilities (each builds independently)
│   ├── chunking-for-files/                 # File splitting
│   ├── compress-for-context/               # CTON compression
│   ├── create-dependency-graph/            # Dependency analyzer
│   └── migrate-from-jsonl-to-sqlite/       # Storage backend converter
├── CHANGELOG.md                            # Version history
└── README.md                               # This file

Dependencies

Production (3 direct deps — everything else is transitive via memoryjs):

  • @danielsimonjr/memoryjs: ^4.2.0 — knowledge graph engine (storage, managers, search, embeddings, RBAC, OCC, bitemporal, causal, etc.)

  • @modelcontextprotocol/server: ^2.0.0 — MCP protocol implementation (Server and the stdio transport)

  • zod: ^4.6.5 — runtime input validation (schemas re-exported from memoryjs)

Development:

  • typescript: ^7.0.2

  • typescript6: npm:typescript@6.0.3 — the createProgram API for the API.md Returns gate (version 7 of typescript has none)

  • vitest: ^5.0.5

  • @vitest/coverage-v8: ^5.0.5

  • esbuild: ^0.28.2 — builds the plugin bundle (scripts/build-bundle.mjs)

  • shx: ^0.4.0 — cross-platform shell commands for clean script

  • @types/node: ^26

Note: better-sqlite3, async-mutex, @danielsimonjr/workerpool, and the embedding providers (OpenAI / @xenova/transformers) are transitive deps via @danielsimonjr/memoryjs. They are not listed in this repo's package.json.

Documentation

Comprehensive documentation in docs/:

Architecture

User Guides

Development

Companion skill

This plugin ships a memory skill (memory-mcp:memory, /memory) — a playbook over the knowledge-graph tools covering graph CRUD/search/maintenance, project indexing, and storage migration. See skills/memory/SKILL.md.

Contributing

We welcome contributions!

See:

Ways to Help:

  • Report bugs

  • Request features

  • Submit pull requests

  • Improve documentation

  • Add tests

Changelog

All notable changes, with the version of each, are documented in CHANGELOG.md.

License

MIT License - see LICENSE

Acknowledgments

Original Project

Enhanced fork of Model Context Protocol memory server by Anthropic.

Developer

Daniel Simon Jr.

Major Enhancements

  • Hierarchical nesting with parent-child relationships

  • Graph algorithms: path finding, centrality, connected components

  • Semantic search with embedding-based similarity

  • Brotli compression for backups, exports, and responses

  • Memory compression with intelligent duplicate detection

  • Smart archiving with criteria-based filtering

  • Advanced search: TF-IDF, boolean, and fuzzy matching

  • Multi-format import/export with merge strategies

  • SQLite backend with better-sqlite3 (3-10x faster)

  • Transaction support with ACID guarantees

  • Comprehensive test suite (this wrapper repo has its own tests; full-coverage core graph tests live in @danielsimonjr/memoryjs)


Repository: https://github.com/danielsimonjr/memory-mcp NPM: https://www.npmjs.com/package/@danielsimonjr/memory-mcp Issues: https://github.com/danielsimonjr/memory-mcp/issues

Available Tools

241 tools
accept_decisionB

v2.1.0 — Transition a proposed decision to accepted. Returns one of: accepted | already-accepted | not-found | illegal-transition | conflict | vanished-mid-update.

Inputs: id (required).

adaptive_reduce_memoriesB

Adaptively reduce a set of memories until their cognitive load falls below the configured threshold by removing low-salience redundant memories

Inputs: entityNames (required), salienceScores (required), loadThreshold.

adaptive_retrieveA

3B.5 — Run iterative query-rewriting retrieval. Up to maxRounds of (search → score coverage → rewrite). Stops early when coverage ≥ minCoverage or no expansion tokens. Pure symbolic — no LLM provider required.

Inputs: query (required), maxRounds, minCoverage, budgetTokens, +1 more.

add_exclusion_ruleA

v2.1.0 — Add a content-pattern exclusion rule (do_not_remember). Hard-deletes existing matches (per scope) and write-blocks future ones when consulted by upstream callers. v1 substring-only.

Inputs: pattern (required), scope, reason, entityType.

add_heuristicC

v2.1.0 — Register a new condition→action heuristic. Storage-backed; default confidence 0.5. Pass an explicit content-addressed id (e.g. h_<sha256(condition|action)>) for caller-managed idempotency.

Inputs: action (required), condition (required), id, agentId, +3 more.

add_observationsC

Add new observations to existing entities in the knowledge graph

Inputs: observations (required).

add_procedureA

3B.4 — Persist a new procedural memory (executable how-to sequence). Steps are ordered (1-indexed) with optional fallback chains. Auto-generates id when omitted. Distinct from semantic facts and episodic events.

Inputs: steps (required), id, name, triggers, +1 more.

add_tag_aliasC

Add a tag alias (synonym mapping)

Inputs: alias (required), canonical (required), description.

add_tagsC

Add tags to an entity

Inputs: tags (required), entityName (required).

add_tags_to_multiple_entitiesC

Add the same tags to multiple entities at once

Inputs: tags (required), entityNames (required).

add_working_memoryA

Create a TTL-based short-term working memory entry scoped to a session. Working memories auto-expire and can be promoted to long-term storage.

Inputs: content (required), sessionId (required), taskId, ttlHours, +1 more.

analyze_cognitive_loadB

Analyze the cognitive load of a set of entities: token density, redundancy ratio, diversity score, and composite load score

Inputs: entityNames (required), loadThreshold.

analyze_queryA

Analyze a search query to extract entities, temporal references, question type, and complexity. Useful for understanding query structure before searching.

Inputs: query (required), includePlan.

analyze_relation_duplicatesA

Dry-run the three-tier relation janitor: tier 1 finds trivial relationType spelling variants (WorksAt/works-at/works_at) and redundant bidirectional mirrors; tier 2 (when an embedding provider is configured) finds semantically equivalent same-pair relations. Report-only — never mutates the graph.

Inputs: no named parameters.

append_project_commandB

v2.1.0 — Append a documented project command (dedup by name).

Inputs: name (required), command (required), purpose (required), projectId (required).

append_project_conventionC

v2.1.0 — Append one convention to a project context (auto-creates; dedups).

Inputs: projectId (required), convention (required).

append_project_factB

v2.1.0 — Append one fact to a project context (auto-creates the record on first call; dedups).

Inputs: fact (required), projectId (required).

append_project_glossary_termC

v2.1.0 — Append a glossary term (dedup by term).

Inputs: term (required), projectId (required), definition (required).

archive_entitiesC

Archive old or low-importance entities

Inputs: tags, dryRun, olderThan, importanceLessThan.

archive_reflectionA

Archive a reflection by id so it no longer appears in default listings or relevance matches (soft delete — the record is retained).

Inputs: id (required).

audit_historyA

Get the full audit history for a specific entity in chronological order

Inputs: entityName (required).

audit_queryB

Query the audit log for operations matching filter criteria (operation type, agent ID, entity name, date range)

Inputs: limit, since, until, agentId, +2 more.

cache_clearA

v12.5.0 — Bust all four global search caches. Idempotent; safe after manual graph edits to drop stale results.

Inputs: no named parameters.

cache_statsA

v12.5.0 — Per-tier snapshot of the global search caches (basic / ranked / boolean / fuzzy) showing hits / misses / size / hitRate. Process-local — every fresh server process starts at zero.

Inputs: no named parameters.

check_exclusionA

v2.1.0 — Check whether content would be blocked by any active forward-blocking rule. Returns {blocked, ruleId?, reason?}. Past-only rules are skipped.

Inputs: content (required), entityType.

check_freshnessB

Calculate the freshness score (0–1) for a specific entity based on its TTL and confidence

Inputs: entityName (required).

check_graphA

v12.5.0 — Detect orphan relations (from/to references a missing entity), missing parents (entity.parentId references a missing entity), and hierarchy cycles. Reports findings. With apply=true, deletes orphan relations and clears missing parentIds; cycles are always reported but never auto-repaired (no safe default for which edge to break).

Inputs: apply.

clear_expired_memoriesA

Remove all working memories that have exceeded their TTL. Complements get_expired_entities (which lists but does not delete).

Inputs: no named parameters.

clear_heuristicsA

v2.1.0 — Drop every heuristic (across all entities of type "heuristic").

Inputs: no named parameters.

clear_project_contextB

v2.1.0 — Wipe the four arrays (facts/conventions/commands/glossary) for projectId; keeps the entity.

Inputs: projectId (required).

compress_contextA

Compress text using n-gram abbreviation with a legend for token-efficient context loading. Unlike format_with_salience_budget (which allocates token budget), this does text-level compression.

Inputs: text (required), level.

compress_graphC

Compress the graph by merging similar entities

Inputs: dryRun, threshold.

compute_entropyB

Compute the Shannon entropy of a text string (in bits per character)

Inputs: text (required), minEntropy.

configure_distillationA

Configure the distillation pipeline policy (default, noop, or none) that filters memories before context formatting

Inputs: policy (required).

confirm_memoryA

Boost a memory's confidence score without resetting its timestamp. Unlike refresh_entity (which resets to 1.0), this incrementally increases confidence.

Inputs: memoryName (required), confidenceBoost.

consolidate_relationsA

Run relation-duplicate analysis and — when apply=true — merge tier 1+2 duplicate groups (delete variants, create the canonical survivor with summed confirmationCount). apply=false (default) is identical to analyze_relation_duplicates.

Inputs: apply.

consolidate_sessionA

Run the full ConsolidationPipeline on a session: promote working memory, merge duplicates, summarize, and extract patterns. Unlike run_consolidation_now (which runs the dedup scheduler), this is a comprehensive session-scoped pipeline.

Inputs: sessionId (required).

counterfactual_queryA

3B.6 — "What if we remove edge (removeFrom → removeTo)? Is predict still reachable from seed?" Returns chains from seed to predict that DO NOT use the removed edge. Pure: does not mutate the graph.

Inputs: seed (required), predict (required), removeTo (required), removeFrom (required), +1 more.

create_artifactB

Create an artifact entity (tool output, code snippet, API response, etc.) with a stable auto-generated ref

Inputs: content (required), toolName (required), artifactType (required), sessionId, +1 more.

create_entitiesB

Create multiple new entities in the knowledge graph. Supports v1.6 freshness (ttl/confidence), v1.8 project scoping, and η.4.4 bitemporal validity (validFrom/validUntil/observationMeta).

Inputs: entities (required).

create_reflectionA

Persist an agent reflection — a generalized lesson distilled from experience, backed by evidence entities. Deduplicated by evidence hash; scoped to session, project, or global.

Inputs: scope (required), summary (required), evidence (required), generalizationConfidence (required), +6 more.

create_relationsC

Create multiple new relations between entities in the knowledge graph. Relations should be in active voice

Inputs: relations (required).

delete_entitiesC

Delete multiple entities from the knowledge graph

Inputs: entityNames (required).

delete_observationsC

Delete specific observations from entities

Inputs: deletions (required).

delete_relationsC

Delete multiple relations from the knowledge graph

Inputs: relations (required).

deregister_refB

Remove a stable alias (ref) from the RefIndex

Inputs: ref (required).

detect_causal_cyclesC

3B.6 — Detect cycles in the causal subgraph rooted at seed. CAVEAT: treats prevents as a directed edge, not as logical negation — prevents+enables triangles ARE flagged.

Inputs: seed (required), maxDepth.

detect_contradictionsB

Find conflicting observations within an entity using semantic similarity

Inputs: entityName (required), threshold.

detect_heuristic_conflictsA

v2.1.0 — Pair-wise overlap/contradiction detection across stored heuristics. Surfaces overlap (same condition tokens, different actions) and contradiction (opposing actions on overlapping conditions; negation prefixes such as "do not" / "never" / "avoid").

Inputs: no named parameters.

detect_patternsB

Detect recurring token-based patterns across observations of a given entity type

Inputs: entityType (required), minOccurrences.

diagA

v12.5.0 — Runtime + storage diagnostic snapshot: node version, platform, storage path/type/size, entity + relation counts, ISO timestamp. Good first call when something feels off.

Inputs: no named parameters.

diary_readA

Read recent diary entries for a specialist agent. Returns entries in reverse chronological order. Optionally filter by topic.

Inputs: agentId (required), lastN, topic.

diary_writeA

Write a timestamped diary entry for a specialist agent. Each agent gets its own persistent diary (entity: diary-{agentId}). Use for code review findings, architecture decisions, ops incidents, etc.

Inputs: entry (required), agentId (required), topic.

distill_failureB

Distill lessons from a failed session by tracing the causal chain and extracting actionable insights

Inputs: sessionId (required), maxCauseChainLength, minLessonConfidence.

dream_run_nowA

Run a single dream cycle immediately. Returns detailed per-phase results.

Inputs: phases.

dream_startA

Start the DreamEngine background memory maintenance. Runs 8 phases (temporal anchoring, freshness sweep, entropy pruning, consolidation, compression, entity enrichment, pattern promotion, graph hygiene) on a configurable interval.

Inputs: phases, intervalMs, maxDurationMs, runOnSessionEnd.

dream_stopA

Stop the DreamEngine background process.

Inputs: no named parameters.

enable_entropy_filterB

Enable or disable the Shannon entropy gate that drops low-information memories during consolidation

Inputs: enabled (required), minLength, minEntropy.

end_sessionA

End a session and trigger failure distillation if the session outcome was a failure

Inputs: outcome (required), sessionId (required), distillFailures.

entity_as_ofA

η.4.4 — Time-travel query for an entity. Returns the entity at a given point in time, or null if it was already invalidated then. An entity is valid at asOf when validFrom <= asOf AND (validUntil is undefined OR validUntil >= asOf).

Inputs: asOf (required), name (required).

entity_neighborsA

v12.5.0 — Incoming + outgoing relations for one entity, plus in/out degree counts. Lighter than inspect_entity when you only need the graph-topology view.

Inputs: name (required).

entity_timelineB

η.4.4 — Get all temporal versions of an entity in chronological order (by validFrom asc, with unbounded entities last). Returns the v1.8 supersession chain when one exists.

Inputs: name (required).

estimate_query_costA

Estimate execution cost (time, tokens) for all available search methods on a given query. Unlike analyze_query (which extracts entities/complexity), this predicts per-method performance.

Inputs: query (required).

export_decision_as_adr_markdownA

v2.1.0 — Render a stored decision as ADR-format markdown (# title, Status, Context, Decision, Consequences bullet list, Alternatives bullet list, optional Supersedes link).

Inputs: id (required).

export_graphA

Export knowledge graph in various formats with optional brotli compression and streaming for large graphs. Supports W3C Linked Data formats (turtle, rdf-xml, json-ld) added in η.5.4.

Inputs: format (required), filter, compress, redactPii, +3 more.

extract_factsB

Extract structured facts from observation text using rule-based extraction

Inputs: text (required).

find_all_pathsC

Find all paths between two entities up to a maximum depth

Inputs: source (required), target (required), maxDepth, direction, +1 more.

find_causesA

3B.6 — Find causal chains ending at the named effect. Searches paths from candidate causes via causal relation types (causes/enables/prevents/precedes/correlates). Sorted by score = product of per-edge causalStrength.

Inputs: effect (required), candidates (required), maxDepth.

find_decisions_by_contextB

v2.1.0 — Substring search across context, decision, and consequences fields.

Inputs: query (required).

find_duplicate_observationsA

v2.1.0 — Find verbatim duplicate observation strings across distinct entities (SHA-256 exact tier). Complementary to MemoryEngine.checkDuplicate (turn-level) and CompressionManager.findDuplicates (whole-entity). Report-only.

Inputs: maxGroups, projectId, sessionId, entityType, +1 more.

find_duplicatesC

Find potential duplicate entities based on similarity

Inputs: threshold.

find_effectsB

3B.6 — Find causal chains starting at the named cause and reaching any candidate effect. Symmetric counterpart to find_causes.

Inputs: cause (required), candidates (required), maxDepth.

find_jaccard_duplicate_observationsB

v2.1.0 — Find near-duplicate observation strings across distinct entities via token-Jaccard similarity with union-find grouping. More expensive than the exact tier (O(o²)); opt-in for higher recall.

Inputs: maxGroups, projectId, sessionId, entityType, +1 more.

find_matching_memories_for_ruleA

v2.1.0 — Dry-run preview: return entities whose observations would match the candidate exclusion pattern. Does NOT persist the rule.

Inputs: pattern (required), entityType.

find_shortest_pathC

Find the shortest path between two entities in the knowledge graph

Inputs: source (required), target (required), direction, relationTypes.

find_similar_entitiesC

Find entities similar to a given entity using semantic similarity. Requires embedding provider.

Inputs: entityName (required), limit, minSimilarity.

forget_memoryA

Forget (delete) observations matching the given content. Tries exact match first; falls back to semantic search at 0.85 similarity threshold if available. Supports dryRun to preview what would be deleted.

Inputs: content (required), dryRun, projectId, threshold.

forget_weak_memoriesA

Bulk-delete memories that fell below a decay threshold. Unlike forget_memory (content match) or archive_entities (criteria-based move), this uses decay-based importance scoring.

Inputs: dryRun, maxCount, threshold.

format_project_context_for_llmA

v2.1.0 — Render the ProjectContextRecord as a prose summary suitable for the wakeUp L0 layer or a system prompt. Honors budgetChars with ellipsis truncation.

Inputs: projectId (required), budgetChars.

format_with_salience_budgetB

Format memories for LLM prompt consumption with proportional token allocation based on salience scores

Inputs: entityNames (required), salienceScores (required), totalTokenBudget (required), header, +1 more.

freshness_reportB

Generate a freshness report across all entities showing fresh, stale, and expired counts

Inputs: threshold.

get_aliases_for_tagC

Get all aliases for a canonical tag

Inputs: canonicalTag (required).

get_ancestorsC

Get all ancestor entities of an entity

Inputs: entityName (required).

get_artifactB

Retrieve an artifact entity by its stable ref or entity name

Inputs: ref (required).

get_centralityC

Calculate centrality metrics for entities in the graph

Inputs: topN, algorithm, direction, sampleRate, +2 more.

get_childrenC

Get all child entities of an entity

Inputs: entityName (required).

get_connected_componentsB

Find all connected components in the knowledge graph

Inputs: no named parameters.

get_context_profileA

Get a ContextWindowManager profile configuration (salience weights, retrieval strategy). Unlike get_profile (user profile facts), this returns context-aware retrieval settings.

Inputs: name (required).

get_decayed_memoriesA

List memories whose importance has fallen below a threshold due to time-based decay. Unlike get_stale_entities (which uses freshness timestamps), this uses decay engine importance calculations.

Inputs: threshold.

get_decisionA

v2.1.0 — Sync lookup by DecisionId.

Inputs: id (required).

get_decision_chainA

v2.1.0 — Walk the supersedes link backward from the supplied id to the original proposal. Returns chain oldest-first; cycle-protected.

Inputs: id (required).

get_descendantsC

Get all descendant entities of an entity

Inputs: entityName (required).

get_entity_depthC

Get the depth of an entity in the hierarchy

Inputs: entityName (required).

get_entity_versionsA

Get the latest version of an entity. If the entity has been superseded by newer versions (via contradiction detection), returns the most recent one.

Inputs: entityName (required).

get_eventA

Load one recorded event by its entity name, joining the event hub with its role-typed relation endpoints (actor, target, context, participants).

Inputs: name (required).

get_event_flowA

All events sharing a flow key (flow: tag), chronologically ordered — the full timeline of a named flow (e.g. a release, an incident).

Inputs: flowKey (required).

get_expired_entitiesB

Return all entities that have passed their TTL expiry

Inputs: no named parameters.

get_graph_statsC

Get statistics about the knowledge graph

Inputs: no named parameters.

get_heuristicC

v2.1.0 — Sync lookup by HeuristicId.

Inputs: id (required).

get_parentC

Get the parent entity of an entity

Inputs: entityName (required).

get_procedureC

3B.4 — Load a procedure by id.

Inputs: id (required).

get_procedure_stepA

3B.4 — Load a specific step from a procedure by 1-indexed order, OR get the next step relative to currentOrder.

Inputs: id (required), order (required), next.

get_profileB

Get the user profile. Returns static facts (long-lived preferences) and dynamic facts (recent session context). Profiles are scoped by projectId.

Inputs: projectId.

get_project_contextC

v2.1.0 — Sync lookup of the ProjectContextRecord for projectId.

Inputs: projectId (required).

get_project_scopeA

Returns the active project scope for this server session (set via set_project_scope). Returns { projectId } where projectId is null when no scope is active.

Inputs: no named parameters.

get_relevant_reflectionsA

Reflections relevant to a session: matches by sourceSessionId, plus evidence overlap with the supplied session entity names. Use at session start to surface applicable past lessons.

Inputs: sessionId (required), limit, minConfidence, sessionEntityNames.

get_root_entitiesB

Get all root entities (entities without parents)

Inputs: no named parameters.

get_search_suggestionsC

Get search suggestions for a query

Inputs: query (required), maxSuggestions.

get_stale_entitiesB

Return all entities whose freshness score is below a threshold

Inputs: threshold.

get_subtreeC

Get entity and all its descendants as a subgraph

Inputs: entityName (required).

get_tool_affordance_statsC

v2.1.0 — Flat rolling stats for a tool: success_rate, total_calls, common_failure_modes, avg_duration_ms.

Inputs: toolName (required).

get_version_chainA

Get all versions of an entity in its version chain. Returns versions sorted by version number ascending. Works from any entity in the chain (resolves to root automatically).

Inputs: entityName (required).

get_visible_memoriesA

Get all memories visible to a specific agent based on visibility rules and trust levels

Inputs: agentId (required).

get_world_stateA

3B.7 — Capture a fresh snapshot of the live graph: entitiesByName + takenAt timestamp + size. Capped at maxSnapshotSize (default 1000); over-cap prefers high-importance entities.

Inputs: no named parameters.

graph_sizeA

v12.5.0 — Graph + storage footprint: entity / relation / observation counts, distinct tag count, avg observations per entity, on-disk byte size + JSONL line count.

Inputs: no named parameters.

healthA

v12.5.0 — Fast integrity checks: storage:loadGraph, entities:distinct-names, relations:no-orphans, hierarchy:no-cycles-no-missing-parents. Returns per-check duration; ok=false when any check fails.

Inputs: no named parameters.

heuristic_countB

v2.1.0 — Count of stored heuristics.

Inputs: no named parameters.

hierarchy_treeA

v12.5.0 — Hierarchy tree as nested JSON. With an explicit root, returns just that subtree; without, returns all root entities. Useful for visualising parent/child structure.

Inputs: root.

import_graphC

Import knowledge graph from various formats

Inputs: data (required), format (required), dryRun, mergeStrategy.

index_embeddingsA

Index all entities for semantic search. Call this after adding entities to enable semantic search. Requires embedding provider.

Inputs: forceReindex.

ingestA

Ingest pre-normalized conversation data into the knowledge graph. Chunks messages by exchange pairs (user+assistant), creates entities with verbatim observations. Format-agnostic: normalize chat exports before calling.

Inputs: messages (required), tags, dryRun, source, +2 more.

ingest_dialogueB

Distill raw dialogue turns into the Cue–Tag–Content associative memory graph (MRAgent-style "memory is reconstructed, not retrieved"). Episodic/semantic/topic layers are also persisted into the live knowledge graph. Multiple calls accumulate.

Inputs: turns (required).

inspect_entityA

v12.5.0 — Verbose snapshot of one entity: observations (resolved via ObservationManager so the column-store sidecar is consulted), outgoing + incoming relations, tags, importance, timestamps, parentId, immediate children, full ancestors. Errors when entity not found.

Inputs: name (required).

invalidate_entityA

η.4.4 — Mark an entity as no longer valid by setting validUntil. Idempotent. Does not delete the entity — entity_as_of still returns it for past asOf timestamps. Orthogonal to v1.8 supersession.

Inputs: name (required), ended.

invalidate_observationA

η.4.4 — Mark a specific observation on an entity as no longer valid. Creates a parallel observationMeta[] entry if absent. Throws if observation not found on entity.

Inputs: content (required), entityName (required), ended.

invalidate_relationA

Mark a relation as no longer valid. Sets the validUntil timestamp on the matching active relation. Use for temporal facts that have ended (e.g., "Kai no longer works on Orion").

Inputs: to (required), from (required), relationType (required), ended.

list_artifactsB

List all artifact entities, with optional filtering by tool name, type, or date

Inputs: since, toolName, artifactType.

list_decisionsB

v2.1.0 — List decisions, optionally filtered by status / sourceSessionId / sourceProjectId.

Inputs: limit, status, sourceProjectId, sourceSessionId.

list_exclusion_rulesB

v2.1.0 — Return every registered ExclusionRule.

Inputs: no named parameters.

list_heuristicsC

v2.1.0 — All registered heuristics.

Inputs: no named parameters.

list_projectsA

List all distinct project IDs in the knowledge graph. Returns sorted array of projectId values, excluding global/unscoped entities.

Inputs: no named parameters.

list_reflectionsA

List stored agent reflections, filterable by scope, source session/project, and minimum generalization confidence. Archived reflections are excluded unless includeArchived is set.

Inputs: limit, scope, minConfidence, includeArchived, +2 more.

list_refsA

List all registered refs in the RefIndex, optionally filtered by entity name

Inputs: entityName.

list_role_profilesA

List all built-in role profiles with their salience weight and context budget configurations

Inputs: no named parameters.

list_saved_searchesB

List all saved searches

Inputs: no named parameters.

list_tag_aliasesB

List all tag aliases

Inputs: no named parameters.

list_tool_affordancesC

v2.1.0 — All recorded ToolAffordanceRecords.

Inputs: no named parameters.

load_reconstructive_memoryA

Restore the Cue–Tag–Content reconstructive graph from the -reconstructive.json sidecar written by save_reconstructive_memory, replacing the current in-memory graph. Errors if no sidecar exists.

Inputs: no named parameters.

match_heuristicsA

v2.1.0 — Find heuristics whose condition matches input via Jaccard token-overlap × confidence; sorted descending, then by priority.

Inputs: input (required), limit, minScore.

match_procedureB

3B.4 — Token-overlap match a context description against stored procedures. Returns ranked matches with Jaccard-like scores.

Inputs: context (required), threshold, candidateIds.

merge_entitiesC

Merge multiple entities into one

Inputs: entityNames (required), targetName.

merge_tagsC

Merge two tags into a target tag across all entities

Inputs: tag1 (required), tag2 (required), targetTag (required).

move_entityC

Move an entity to a new parent

Inputs: entityName (required), newParentName (required).

normalize_observationsC

Normalize entity observations by resolving pronouns and anchoring relative dates. Improves search matching quality.

Inputs: options, persist, entityName.

observations_as_ofA

η.4.4 — Get observations valid at a given point in time. Observations with no observationMeta entry are treated as unbounded (always-valid).

Inputs: asOf (required), entityName (required).

observe_tool_cancelA

v2.1.0 — Drop an in-flight observation without recording (e.g. user cancelled). No-op on unknown callId.

Inputs: callId (required).

observe_tool_completeA

v2.1.0 — Record successful completion. Computes durationMs from observe_tool_start. No-op on unknown callId.

Inputs: callId (required), result.

observe_tool_errorA

v2.1.0 — Record failure with an error message. No-op on unknown callId.

Inputs: callId (required), errorMessage (required).

observe_tool_partialB

v2.1.0 — Record a partial result (tool returned a usable but incomplete result). No-op on unknown callId.

Inputs: callId (required), reason (required).

observe_tool_startA

v2.1.0 — Begin observing a tool call. Returns a callId the caller threads through observe_tool_complete / observe_tool_error / observe_tool_partial / observe_tool_cancel. Emits toolCall:start on the observer EventEmitter.

Inputs: toolName (required), args.

open_nodesC

Open specific nodes by their names

Inputs: names (required).

parse_adr_markdownA

v2.1.0 — Parse a hand-written or previously-exported ADR markdown into a DecisionInput shape (static; no persistence). Returns null when required Context or Decision sections are missing.

Inputs: text (required).

predict_outcomeC

3B.7 — Predict downstream effects of an action by walking the causal subgraph. Delegates to CausalReasoner.findEffects.

Inputs: action (required), candidates (required).

priority_dedupA

Smart priority-based deduplication that keeps the highest-scored entity per duplicate group (importance > recency > observation count > tags)

Inputs: dryRun.

promote_working_memoryC

Promote a working memory entry to long-term episodic or semantic storage

Inputs: memoryName (required), targetType.

propose_decisionB

v2.1.0 — Propose a new architecture-decision-record (ADR-equivalent). Creates a "proposed" DecisionRecord. Default importance 8.

Inputs: context (required), decision (required), agentId, importance, +6 more.

query_as_ofA

Query relations valid at a specific point in time. Returns only relations where validFrom <= date AND (validUntil is undefined OR validUntil >= date). Time-travel query for temporal knowledge graphs.

Inputs: asOf (required), entityName (required), direction.

query_eventsA

Query recorded events by any combination of actor, target, action, flowKey, and inclusive time range. Results are chronologically ordered (occurredAt, falling back to createdAt). Uses relation/type indexes — never a full-graph scan.

Inputs: actor, limit, action, target, +2 more.

query_natural_languageC

Decompose a natural language query into a structured search plan and return matching entities

Inputs: query (required).

rbac_assign_roleA

η.6.1 — Grant a role to an agent. Roles: reader (read), writer (read+write), admin (read+write+delete), owner (all four). Optional resourceType narrows to one type; optional scope narrows to a name prefix; optional validUntil expires the grant.

Inputs: role (required), agentId (required), notes, scope, +3 more.

rbac_check_permissionB

η.6.1 — Check whether an agent can perform an action on a resource type. Falls back to defaultRole=reader for agents with no assignments.

Inputs: action (required), agentId (required), resourceType (required), now, +1 more.

rbac_list_assignmentsB

η.6.1 — List role assignments for an agent (active or all).

Inputs: agentId (required), now, activeOnly.

rbac_revoke_roleA

η.6.1 — Remove a specific role assignment. Matching is by agentId + role + resourceType (exact, including undefined).

Inputs: role (required), agentId (required), resourceType.

read_graphB

Read the entire knowledge graph

Inputs: no named parameters.

reconstructive_memory_statsA

Size statistics of the reconstructive (Cue–Tag–Content) memory graph: cue / tag / content node counts and edge counts.

Inputs: no named parameters.

reconstruct_memoryA

Answer a query via active multi-step traversal of the reconstructive (Cue–Tag–Content) memory graph. Returns accumulated evidence, the step-by-step trajectory, and whether the loop stopped early on a satisfied condition vs. budget.

Inputs: query (required), maxSteps, perStepBudget, evidenceTarget.

record_eventA

Record an n-ary event: the action becomes a first-class event hub entity with role-typed relations (actor_of/targeted/occurred_in/participant_in). Missing endpoints auto-create as concept stubs. Optional flowKey groups events into a named flow.

Inputs: actor (required), action (required), detail, target, +5 more.

record_heuristic_contradictionC

v2.1.0 — Record a counter-example: bumps contradictions; lowers confidence (new = old - old*0.2). OCC-protected.

Inputs: id (required).

record_tool_outcomeA

v2.1.0 — Record a single tool-call outcome directly via ToolAffordanceManager (bypasses ToolCallObserver). Creates the record on first call; appends to rolling window on subsequent. Throws "conflict" on concurrent writer mismatch.

Inputs: outcome (required), toolName (required), durationMs, errorMessage.

refine_procedureB

3B.4 — Apply caller feedback after a procedure execution. Increments executionCount and updates successRate via EWMA (α=0.2).

Inputs: id (required), succeeded (required), notes, recordedAt.

refresh_entityB

Reset freshness for an entity by updating its creation timestamp to now and resetting confidence to 1.0

Inputs: entityName (required).

register_agentA

Register an agent for multi-agent operations with identity metadata. Unlike set_agent_role (which applies a role profile), this registers agent identity with type, trust level, and capabilities.

Inputs: agentId (required), type, trustLevel, capabilities.

register_refA

Register a stable alias (ref) pointing to an entity name in the RefIndex for O(1) lookups

Inputs: ref (required), entityName (required), description.

reindexA

v12.5.0 — Rebuild search-side indexes that may have drifted (TF-IDF/BM25 ranked + spell-checker vocabulary). Pass ranked=false or spell=false to scope. Returns per-target ok flag + durationMs.

Inputs: spell, ranked.

reinforce_heuristicC

v2.1.0 — Record a successful application: bumps support; raises confidence asymptotically (new = old + (1-old)*0.1). OCC-protected — surfaces "conflict" when concurrent writer collides.

Inputs: id (required).

reinforce_memoryA

Boost a memory's decay resistance by increasing confirmation count and/or confidence. Unlike refresh_entity (timestamp reset) or set_importance (static score), this modulates the decay model.

Inputs: memoryName (required), confidenceBoost, confirmationBoost.

reject_decisionA

v2.1.0 — Transition a proposed decision to rejected with a reason. Returns rejected | already-rejected | not-found | illegal-transition | conflict | vanished-mid-update.

Inputs: id (required), reason (required).

remove_exclusion_ruleA

v2.1.0 — Drop an exclusion rule by id. Does NOT restore previously deleted memories — the contract is "user said forget".

Inputs: id (required).

remove_heuristicC

v2.1.0 — Drop a heuristic by id.

Inputs: id (required).

remove_project_commandC

v2.1.0 — Remove a command by name. Returns true if found.

Inputs: projectId (required), commandName (required).

remove_project_conventionC

v2.1.0 — Remove a single convention. Returns true if found.

Inputs: projectId (required), convention (required).

remove_project_factC

v2.1.0 — Remove a single fact. Returns true if found.

Inputs: fact (required), projectId (required).

remove_project_glossary_termC

v2.1.0 — Remove a glossary entry by term. Returns true if found.

Inputs: term (required), projectId (required).

remove_tag_aliasC

Remove a tag alias

Inputs: alias (required).

remove_tagsC

Remove tags from an entity

Inputs: tags (required), entityName (required).

remove_tool_affordanceC

v2.1.0 — Drop a tool-affordance record by toolName.

Inputs: toolName (required).

replace_tagC

Replace a tag with a new tag across all entities

Inputs: newTag (required), oldTag (required).

resolve_agent_conflictB

Resolve a conflict between two agent memories using a specified strategy

Inputs: primaryMemory (required), conflictingMemory (required), strategy.

resolve_refB

Resolve a stable alias (ref) to its entity name via the RefIndex

Inputs: ref (required).

resolve_tagC

Resolve a tag to its canonical form

Inputs: tag (required).

rollback_operationA

Reverse a specific committed operation using its audit entry ID (restores entity to before-snapshot)

Inputs: auditEntryId (required).

run_consolidation_nowA

Run a consolidation cycle on demand, independently of the scheduled interval

Inputs: no named parameters.

run_decay_cycleA

Run a single pass of time-based importance decay across all agent memories. Returns count of decayed and forgotten memories.

Inputs: no named parameters.

save_reconstructive_memoryA

Serialize the in-memory Cue–Tag–Content reconstructive graph to a JSON sidecar next to the storage file (-reconstructive.json). The CTC graph is process-local; save before shutdown to survive restarts.

Inputs: no named parameters.

score_salienceA

Calculate 5-component relevance score for an entity: baseImportance, recencyBoost, frequencyBoost, contextRelevance, noveltyBoost. Use with format_with_salience_budget to score then format.

Inputs: entityName (required), queryText, sessionId, taskDescription.

search_autoB

Automatically select and execute the best search method based on query characteristics and graph size. Returns results along with the selected method and reasoning.

Inputs: query (required), limit.

search_by_date_rangeB

Search entities within a date range, with optional filtering by entity type and tags. At least one of startDate or endDate should be provided.

Inputs: tags, endDate, startDate, entityType.

search_by_timeB

Search entities using a natural language time expression (e.g. "last week", "yesterday", "in January")

Inputs: query (required), field, includeUndated.

search_cross_agentA

Search across agent memories with trust-weighted scoring and visibility filtering

Inputs: query (required), requestingAgentId (required), agentIds.

search_nodesC

Search for nodes in the knowledge graph based on query string, with optional tag and importance filtering

Inputs: query (required), tags, maxImportance, minImportance.

search_nodes_rankedC

Perform TF-IDF ranked search

Inputs: query (required), tags, limit, maxImportance, +1 more.

session_checkpointA

Create a checkpoint snapshot of the current session state for later restore

Inputs: sessionId (required), name.

session_endA

End an agent session via AgentMemoryManager with summary generation and working memory promotion. Unlike end_session (which handles failure distillation on graph entities), this manages the full agent session lifecycle.

Inputs: sessionId (required), status.

session_restoreC

Restore a session from a previously created checkpoint

Inputs: checkpointId (required).

session_startA

Start a new agent session via AgentMemoryManager. Tracks session lifecycle, enables working memory, and supports session chaining. Returns a SessionEntity with id and timestamps.

Inputs: metadata, parentSessionId, taskDescription.

set_agent_roleB

Apply a built-in role profile (researcher, planner, executor, reviewer, coordinator) to adjust salience weights and context budgets

Inputs: role (required).

set_entity_parentB

Set the parent of an entity for hierarchical organization

Inputs: entityName (required), parentName (required).

set_governance_policyA

Set the active governance policy controlling which write operations (create, update, delete) are permitted for future requests

Inputs: canCreate, canDelete, canUpdate.

set_importanceC

Set the importance score of an entity (0-10)

Inputs: entityName (required), importance (required).

set_memory_visibilityA

Set the visibility of a memory entity for multi-agent access control. Auto-promotes plain entities to AgentEntity (stamps agentId/memoryType/etc.) instead of failing silently. Supports η.5.5.b extensions: allowedRoles (role gate), visibleFrom/visibleUntil (time-window gate).

Inputs: agentId (required), memoryName (required), visibility (required), visibleFrom, +2 more.

set_project_scopeA

Set the active project scope for this server session. New entities passed without an explicit projectId may be auto-stamped with this value by scope-aware handlers; pass an empty string to clear the scope. Returns { projectId } where projectId is the new active scope (null when cleared).

Inputs: projectId (required).

spell_rebuild_vocabularyA

v2.1.0 — Force a rebuild of the SpellChecker vocabulary + n-gram index. Call after bulk entity churn; the lazy cache is otherwise correct for low-churn graphs.

Inputs: no named parameters.

spell_suggestA

v2.1.0 — Suggest close matches for a (potentially misspelled) query over the vocabulary of entity names + tag values. Two-stage: bigram-Jaccard pre-filter (NGramIndex) + Levenshtein re-rank.

Inputs: query (required), limit, minScore, maxDistance.

spell_vocabulary_sizeA

v2.1.0 — Return the count of unique terms in the SpellChecker vocabulary (entity names + tag values by default). Mostly diagnostic.

Inputs: no named parameters.

split_transcriptB

Split concatenated multi-session transcripts into per-session chunks via delimiter detection. Preprocessing step before ingest.

Inputs: text (required).

start_consolidationB

Start the background consolidation scheduler that periodically deduplicates and merges memories

Inputs: intervalMs, autoMergeDuplicates.

stop_consolidationA

Stop the background consolidation scheduler

Inputs: no named parameters.

suggest_toolA

v2.1.0 — Suggest tools matching a task hint, ranked by successRate × recency factor (1.0 at ≤1d, linearly decays to 0.1 at ≥30d).

Inputs: taskHint (required), limit, minScore.

summarize_entityA

Auto-summarize redundant observations within a single entity. Unlike compress_graph (which merges similar entities), this condenses observations within one entity.

Inputs: entityName (required), threshold.

supersede_decisionA

v2.1.0 — Mark an accepted decision as superseded by another. illegal-transition when target is not accepted. not-found when target or replacement is missing.

Inputs: by (required), id (required).

synthesize_collaborative_contextA

Synthesize context by traversing the graph neighbourhood from a seed entity and merging high-salience neighbors across agents

Inputs: seedEntityName (required), maxDepth, queryText, currentTask, +2 more.

timelineB

Get chronological relation history for an entity. Returns ALL relations (current and expired) sorted by validFrom ascending. Shows the full story of an entity over time.

Inputs: entityName (required), direction.

tool_observer_in_flight_countA

v2.1.0 — Diagnostic: number of in-flight (started but not yet completed) tool-call observations.

Inputs: no named parameters.

update_entityB

η.5.5.c — Update an entity with optional optimistic concurrency control. Pass expectedVersion to assert the live entity is at that version; throws VersionConflictError on mismatch. Omit for legacy last-write-wins. OCC-guarded writes auto-increment version.

Inputs: name (required), updates (required), expectedVersion.

update_profileA

Add a fact to the user profile. Static facts are long-lived (preferences, role, tools). Dynamic facts are recent (current project, active work).

Inputs: type (required), content (required), projectId.

upsert_project_contextB

v2.1.0 — Merge structured project knowledge into the ProjectContextRecord for projectId. Array fields (facts/conventions/commands/glossary) append + dedup; scalars overwrite. One record per projectId.

Inputs: projectId (required), facts, commands, glossary, +1 more.

validate_fact_against_worldB

3B.7 — Validate a candidate observation against a target entity. Delegates to MemoryValidator.validateConsistency. Returns null if no validator is wired.

Inputs: entityName (required), observation (required).

validate_graphB

Validate the knowledge graph for integrity issues

Inputs: no named parameters.

visualize_graphA

Generate a self-contained interactive HTML page with a D3.js force-directed graph visualization. Nodes are colored by type and sized by importance.

Inputs: title, maxEntities.

wake_upA

Initialize a 4-layer memory stack context (~600 tokens). L0 loads profile identity, L1 loads top entities by importance. Returns a compact boot context for LLM consumption.

Inputs: compress.

who_did_whatA

Convenience join answering "who did what (to target / in context / within time range)?" over recorded events. Returns actor + action + event tuples; events without a resolvable actor are omitted.

Inputs: limit, target, context, timeRange.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3/5.0

    Scored across 241 tools

    Disambiguation2/5

    With 241 tools, many serve overlapping or very similar purposes (e.g., 10+ search methods, multiple consolidation/decay/dream tools). While individual descriptions are detailed, the sheer volume makes it difficult for an agent to reliably select the correct tool without deep study.

    Naming Consistency4/5

    The vast majority of tools follow a consistent verb_noun (snake_case) pattern. However, a few outliers like 'health', 'diag', 'reindex', and 'cache_stats' break this pattern, slightly reducing consistency.

    Tool Count1/5

    241 tools is far beyond what is reasonable for an MCP server. Even for a complex knowledge graph system, this overwhelming number forces agents to navigate an excessively large tool surface, causing confusion and inefficiency.

    Completeness5/5

    The tool set is extraordinarily comprehensive, covering CRUD for entities, relations, and observations; multiple search paradigms; graph analysis; temporal queries; RBAC; decisions; procedures; causal reasoning; events; reflections; and more. No obvious gaps in the intended functionality.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      A customized MCP memory server that enables creation and management of a knowledge graph with features like custom memory paths and timestamping for capturing interactions via language models.
      10
      4
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Open-source MCP memory server providing persistent, cross-platform context for AI tools via a knowledge graph with encrypted storage.
      2 npm
      13
      AGPL 3.0
    • A
      license
      Not graded
      quality
      C
      maintenance
      A universal MCP server providing persistent, structured memory through a knowledge graph with graph storage, semantic vector search, and multi-hop traversal for AI agents and IDEs.
      18 PyPI
      1
      MIT