Open-source agent memory, over MCP

Give your agent a mind, not a filing cabinet.

Multimode Mind unifies four kinds of memory (notes, structured data, files, and embeddings) behind one retrieval interface. 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 four stores

Four kinds of memory. One coherent mind.

Notes

Prose, reasoning, and working knowledge. Backed by your existing Markdown vault, in plain files.

markdown vault

Structured

Facts and records. Backed by a single local SQLite file.

sqlite

Files

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

files + index

Semantic

Meaning-based associations. Backed by a local vector index over the other three.

vector index

one context bundle, with provenance

How it works

Ask once. Get one answer.

The router decides which stores to consult, runs the right kind of lookup against each, then merges and ranks the results into one context bundle your agent can use directly. Every item carries its provenance, so the agent can show where a memory came from.

retrieve.ts
type RetrieveInput = {
  query: string;
  // optional hint; omit to let the router decide
  type?: 'notes' | 'structured' | 'files' | 'semantic';
  // optional ceiling on the returned bundle
  budget?: number;
};

type RetrieveResult = {
  bundle: string;   // merged, ranked context
  sources: Source[]; // provenance for every item
};

await mind.retrieve({ query: 'why did we drop the queue?' });

Quick start

Runs with one command.

npx multimodemind /path/to/vault

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

Scope

What it is, and what it is not.

Is

  • Local-first.
  • Single-user.
  • A TypeScript MCP server.
  • Non-destructive to your notes.

Is not (v1)

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