open source · self-hostable · your data

Your AI forgets everything.
Fix that.

MemoryVault gives AI agents persistent long-term memory with semantic search. One API call to store. One to recall. Runs on your infrastructure or ours.

Get started — free tier View source

AI without memory is just autocomplete

Every new session starts from zero. Preferences forgotten. Context lost. Your users repeat themselves endlessly.

🔁

Session amnesia

Chat history gets wiped. Your agent doesn't know the user prefers dark mode, hates verbose answers, or decided on Vue last Tuesday.

💥

Context overflow

Stuffing everything into the prompt hits token limits fast. 38MB of base64 images in context? That's a crash, not a strategy.

🔍

Retrieval isn't memory

RAG finds documents. Memory knows your user. Their preferences, decisions, relationships. That requires hybrid semantic + lexical search.

Five minutes to persistent memory

Store a memory. Search it later. That's it.

# Store a memory
curl -X POST https://api.memoryvault.dev/v1/memory/collections/my-agent/memories \
  -H "Authorization: Bearer mv_your_key" \
  -H "Content-Type: application/json" \
  -d '{"text": "User prefers concise answers, no emoji", "category": "preference"}'

# Search memories
curl -X POST https://api.memoryvault.dev/v1/memory/collections/my-agent/search \
  -H "Authorization: Bearer mv_your_key" \
  -H "Content-Type: application/json" \
  -d '{"query": "communication style", "limit": 3}'

# {"results": [{"text": "User prefers concise answers, no emoji", "score": 0.89, ...}]}
import httpx

client = httpx.Client(
    base_url="https://api.memoryvault.dev/v1/memory",
    headers={"Authorization": "Bearer mv_your_key"}
)

# Store
client.post("/collections/my-agent/memories", json={
    "text": "User prefers concise answers, no emoji",
    "category": "preference",
    "importance": 0.9
})

# Search
results = client.post("/collections/my-agent/search", json={
    "query": "communication style",
    "limit": 3
}).json()

# results["results"][0]["text"] -> "User prefers concise answers, no emoji"
const headers = {
  "Authorization": "Bearer mv_your_key",
  "Content-Type": "application/json"
};
const base = "https://api.memoryvault.dev/v1/memory";

// Store
await fetch(`${base}/collections/my-agent/memories`, {
  method: "POST", headers,
  body: JSON.stringify({
    text: "User prefers concise answers, no emoji",
    category: "preference"
  })
});

// Search
const { results } = await fetch(`${base}/collections/my-agent/search`, {
  method: "POST", headers,
  body: JSON.stringify({ query: "communication style", limit: 3 })
}).then(r => r.json());

// results[0].text -> "User prefers concise answers, no emoji"

What's inside

Hybrid search

Reciprocal Rank Fusion combines vector similarity and full-text search. Finds what keyword search misses, with the precision it adds.

Multi-tenant isolation

Each API key is a tenant. Collections, memories, and images are fully isolated. No cross-tenant data leakage, ever.

Image attachments NEW

Store images alongside memories. Avatars, screenshots, generated art. S3-compatible storage with presigned URLs. No more base64 bloat.

Auto-collection

Collections create themselves on first use. No setup ceremony. Just start storing memories against any collection name.

Self-hostable

MIT licensed. Runs on any box with PostgreSQL and Redis. Your data never leaves your infrastructure. Or use our hosted version.

Agent plugins

Drop-in OpenClaw plugin with auto-capture and auto-recall. Your agent gets memory without changing a line of agent code.

Simple pricing

Start free. Pay when your agent gets serious.

Free
€0 /month
Try it out. No card required.
  • 1 collection
  • 1,000 memories
  • Hybrid search
  • Community support
Self-hosted
€0 forever
Run it on your own infra.
  • Everything, unlimited
  • Your PostgreSQL + Redis
  • Your S3 storage
  • MIT license
View on GitHub

Your agent should remember.
Let it.

Set up in 5 minutes. First 1,000 memories are free.

Get your API key