Open-source agent memory, over MCP

Give your agent a mind, not a filing cabinet.

Multimode Mind unifies five kinds of memory (notes, structured data, session state, files, and embeddings) behind one retrieval router that ranks, reconciles, and cites what it returns. Local-first. It wraps the Markdown vault you already have instead of asking you to migrate.

The problem

Memory is an architecture problem, not a storage problem.

Most agent memory is one vector database and a search box. Everything gets flattened into one shape, and the agent loses the difference between a fact, a document, and a thought. Real memory is not one shape. A decision lives in structured data. The reasoning behind it lives in a note. The contract that triggered it lives in a file. The association that surfaces it later lives in an embedding. A layer that holds only one of those is a filing cabinet, not a mind.

The five stores

Five kinds of memory. One coherent mind.

Notes

Prose, reasoning, and working knowledge. Backed by your existing Markdown vault, read in place.

markdown vault

Structured

Facts and records you can query. Backed by local SQLite, or point it at a Postgres database you already run.

sqlite / postgres

Session

Fast key-value scratch for the working state of a session.

leveldb

Files

Unstructured documents like PDF and Word. Backed by a files directory with a metadata index.

files + index

Semantic

Meaning-based recall across everything else. Backed by a local vector index, or pgvector on the same Postgres.

vector / pgvector

one ranked context bundle, with provenance and conflicts

How it works

Ask once. Get one answer.

The router fans out to every store, then ranks what comes back by signals a similarity search cannot see: relevance, recency, corroboration across stores, and whether a memory was curated by a human or generated by the agent. When two memories contradict each other, it surfaces the conflict instead of quietly picking one. Every item carries its provenance, so the agent can always show where a memory came from.

retrieve.ts
type StoreType = 'markdown' | 'sqlite' | 'leveldb'
  | 'files' | 'vector';

type RetrieveInput = {
  query: string;
  limit?: number;          // ceiling on results
  stores?: StoreType[];   // routing hint
  explain?: boolean;      // score derivation
};

type RetrieveResult = {
  entries: RankedEntry[];  // ranked, with provenance
  query: string;
  totalCandidates: number;
  storesQueried: StoreType[];
  conflicts?: ConflictNote[]; // contradictions surfaced
};

await mind.retrieve('why did we drop the queue?');

Dashboard

See every store at a glance.

A built-in terminal dashboard shows store status and handles configuration interactively. Every store reports whether it is up, which access mode it is in, and how much it holds, so a misconfigured backend is visible immediately instead of failing silently at retrieval time.

mmind dashboard
  • a Per-store access
  • b Backends
  • t Retrieval weights
  • l Audit log

Ranking changes are saved immediately, but the server reads them at startup, so restart it for an edit to take effect.

mmind dashboard
The Multimode Mind terminal dashboard: a store status table listing markdown, postgres, leveldb, files, pgvector, and audit with their status, access mode, item count, size, and path, above a configuration panel of numbered paths and lettered options.
The dashboard reports each store's status, access mode, item count, size, and path.

Quick start

Install it, then point it at your notes.

npm install -g multimodemind
mmind "/path/to/your/vault"

Point it at any folder of Markdown. An Obsidian vault works as-is. Windows and macOS, no server to stand up.

The vault path is optional: store data defaults to ~/.mmind, so mmind runs from any directory.

No API key required. Set OPENAI_API_KEY for OpenAI embeddings, or it runs a local model fully offline.

Scope

What it is, and what it is not.

Is

  • Local-first.
  • Single-user.
  • A TypeScript MCP server.
  • Non-destructive to your notes.
  • Vendor-agnostic backends.
  • Read-only by default, with an audit log.

Is not (v1)

  • Not hosted.
  • Not multi-user.
  • Not a web app.
  • Not just another vector database.