Vanguard Memory Node

io.github.ezumbaPublished by GitHub account ezumbav2.0.1Updated Oct 24, 2026

Local deterministic BM25 memory for AI agents. Offline-first, no API key, SHA-256 shards, stdio.

The publisher's own server: Memory.fit

VerifiedSTDIODesktop onlyFiles & StorageKnowledge & Memory

Overview

AI-generated overview

Gives an AI assistant a local, offline BM25 keyword memory vault: ingest text or files, then search, recall, list and delete stored objects.

What you can do
  • Ingest text or growing files into a local vault, content-addressed by SHA-256 and split into namespaces with tags
  • Search the whole vault by keyword with ranked snippets, or recall a best-matching evidence window from one stored object
  • List stored objects, inspect their catalog metadata, and permanently delete an object with its index entries
  • Check vault statistics and BM25 index state, and rebuild the index from the authoritative object files
  • Optionally sync a stored object to the ExergyNet LNES-17 ledger when an API key is configured
When to use it
Useful when an assistant should remember text across sessions without a cloud vector database, API key or per-query cost, and when results must be reproducible for the same query and data. Also fits continuous log or session capture through repeated delta file ingestion.
Requirements
Runs as a local stdio process, installed globally or via npx, so Node.js is needed; the README shows Claude Desktop configuration. Data is stored under the user's home directory in a .vanguard folder. Optional ExergyNet sync needs EXERGYNET_API_KEY, with EXERGYNET_NETWORK, EXERGYNET_VAULT_URL and AUTO_SYNC_VAULT as further settings.
Before you install
Ingested text and files are written to local disk, and vmn_delete permanently removes objects and their index entries. Optional sync uploads vault objects to a third-party ledger and requires EXERGYNET_API_KEY; setting AUTO_SYNC_VAULT to true sends every ingest there automatically. The README's hook example runs the package on each session stop, so review what content it captures.

Installation

In SourceWeft

  1. Open Vanguard Memory Node in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Vanguard Memory Node (VMN)

[npm version] [npm downloads] [License: MIT] [MCP Badge]

Local deterministic memory for AI agents via the Model Context Protocol (MCP).

No cloud. No vector database. No semantic drift. Your data stays on your machine.


What it does

VMN gives any MCP-compatible AI agent a persistent, queryable memory vault stored entirely on local disk. Text is ingested once, content-addressed with SHA-256, segmented, and indexed with a sharded BM25 inverted index. Retrieval is deterministic: the same query always returns the same ranked result from the same data.

Optionally, vaults can be synced to the ExergyNet LNES-17 ledger for cross-device and cross-agent recall with cryptographic provenance.


Install

bash
npm install -g @lnes/vanguard-memory-node

Or run without installing:

bash
npx @lnes/vanguard-memory-node

Claude Desktop integration

Mac — ~/Library/Application Support/Claude/claude_desktop_config.json
Windows — %APPDATA%\Claude\claude_desktop_config.json

json
{  "mcpServers": {    "vanguard-memory": {      "command": "npx",      "args": ["-y", "@lnes/vanguard-memory-node"]    }  }}

With ExergyNet vault sync enabled:

json
{  "mcpServers": {    "vanguard-memory": {      "command": "npx",      "args": ["-y", "@lnes/vanguard-memory-node"],      "env": {        "EXERGYNET_API_KEY": "sk-exergy-your-key",        "EXERGYNET_NETWORK": "mainnet",        "AUTO_SYNC_VAULT": "true"      }    }  }}

WSL on Windows:

json
{  "mcpServers": {    "vanguard-memory": {      "command": "wsl",      "args": ["-d", "Ubuntu", "npx", "-y", "@lnes/vanguard-memory-node"]    }  }}

Tools (11 total)

vmn_ingest

Stores text as a SHA-256 content-addressed shard. Segments it, indexes it, and updates the local catalog.

ParameterTypeRequiredDescription
textstringyesContent to store
titlestringnoHuman-readable label
namespacestringnoLogical partition (default: default)
tagsstring[]noSearch tags
content_typestringnoMIME type hint (default: text/plain)
sourcestringnoSource label

Returns: SHA-256 root hash + vault path + vault_synced flag.

vmn_recall

Retrieves a 900-character evidence window from a specific shard using lexical BM25 scoring.

ParameterTypeRequiredDescription
hashstringyesRoot hash from vmn_ingest
querystringyesSearch query

Returns: best-matching evidence window, or a human-readable no-match message.

vmn_search

Full-vault keyword search across all ingested objects. Returns ranked results with snippets.

ParameterTypeRequiredDescription
querystringyesSearch query
limitnumbernoMax results (default: 10)
namespacestringnoRestrict search to this namespace only

vmn_ingest_file

Delta-ingests a growing file into the vault, tracking progress with a cursor so only new lines are ingested on each call. Designed for Stop hooks and continuous log pipelines — safe to call repeatedly with no duplicates.

ParameterTypeRequiredDescription
file_pathstringyesAbsolute path to the file
session_idstringnoCursor key (defaults to file path)
namespacestringnoNamespace for ingested content (default: file_ingest)
titlestringnoOptional title override
tagsstring[]noOptional tags

Returns: lines_ingested, cursor_line, and shard hash (null if no new content).

Stop hook example — ingest every Claude session automatically:

json
{  "hooks": {    "Stop": [{      "matcher": "",      "hooks": [{        "type": "command",        "command": "npx -y @lnes/vanguard-memory-node vmn_ingest_file --file_path \"$CLAUDE_SESSION_FILE\" --session_id \"$CLAUDE_SESSION_ID\""      }]    }]  }}

vmn_list

Lists all memory objects in the vault.

ParameterTypeRequiredDescription
namespacestringnoFilter by namespace

vmn_inspect

Returns full catalog metadata for a specific object.

ParameterTypeRequiredDescription
hashstringyesRoot hash

vmn_delete

Permanently removes an object and all its index entries.

ParameterTypeRequiredDescription
hashstringyesRoot hash

vmn_stats

Returns aggregate vault statistics: entry count, total bytes, namespaces, oldest/newest timestamps.

vmn_index_status

Returns current BM25 index state (READY, REBUILD_REQUIRED, REBUILDING, DEGRADED).

vmn_rebuild_index

Rebuilds the full BM25 index from authoritative object files. Safe at any time — objects are never modified.

vmn_sync_vault

Syncs a local memory object to the ExergyNet LNES-17 vault. Requires EXERGYNET_API_KEY. Use EXERGYNET_NETWORK to target mainnet or testnet.

ParameterTypeRequiredDescription
xlmp_rootstringyesRoot hash of the object to sync
intentstringnoSync intent label (default: manual-sync)

Returns: xlmp_root, bytes_committed, status, and the resolved vault URL.


Environment variables

VariableDefaultDescription
AUTO_SYNC_VAULTfalseSet to true to auto-sync every vmn_ingest to ExergyNet
EXERGYNET_API_KEY—API key for ExergyNet vault access (sk-exergy-*)
EXERGYNET_NETWORKtestnetTarget substrate: mainnet → portal.exergynet.org, testnet → dt.portal.exergynet.org
EXERGYNET_VAULT_URL(resolved from EXERGYNET_NETWORK)Override vault base URL entirely

Vault layout

~/.vanguard/├── local_vault/│   └── <sha256>.txt              # authoritative object files (never modified after write)├── catalog/│   └── <sha256>.json             # per-object metadata (O(1) reads)├── segments/│   └── <sha256>.json             # segment records with term frequencies├── cursors/│   └── <session_id>.json         # cursor state for vmn_ingest_file└── index/    └── v2/        ├── index_manifest.json   # version + state header        ├── corpus_stats.json     # BM25 corpus statistics        └── postings/            └── <2-hex>.json      # 256 sharded posting buckets

How retrieval works

  1. Normalization — Unicode NFC → phrase alias substitution → tokenize → suffix stem → stop-word filter → token alias expansion
  2. Stemmer — 13-rule suffix stripper: tions→ (5), ions→ (4), tion→ (4), ings→ (4), ing→ (3), ers→ (3), ies→ (3), ic→ (2), er→ (2), ed→ (2), es→ (2), s→ (1), y→ (1). Rules applied longest-first; medications and medication both reduce to the same root.
  3. Alias expansion — clinical, technical, and legal synonym clusters (smok↔tobacco↔cigarett, physician↔doctor, hypertens↔bp, etc.)
  4. BM25 scoring — sharded 256-bucket inverted index; top-150 postings per term to cap high-DF stall
  5. Fallback — stemmed-token set comparison when BM25 score is zero; prevents false positives on partial-word matches

Comparison

VMNChromaDB / Pinecone
Result determinismSame query → same result, alwaysVaries with model version
Data locationLocal disk onlyCloud upload required
Per-query cost$0API charges
Setup time60 secondsAccount + key + SDK
Semantic driftNoneBreaks on model updates
Offline capableYesNo

License

MIT — free forever, no telemetry, no usage limits.

Built by ExergyNet.

Source: README.md at commit 67721a8

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v2.0.1LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Memory integrations