Simple Memory
A local-first, generic memory layer for MCP agents, with multilingual hybrid search and reranking, versioned memories, provenance, temporal recall, relationships, feedback, and secure multi-agent spaces.
Documentation
Simple Memory
Simple Memory is a local, persistent memory layer for AI agents using the Model Context Protocol (MCP).
It gives agents a place to store and recall information across separate chats, tasks, and applications. Memories can contain any JSON data, so the server does not impose a specific workflow or domain.
What is it for?
Simple Memory can help an agent remember:
- Decisions, facts, risks, and ongoing work across multiple conversations
- Business operations, customers, agreements, and organizational knowledge
- Research findings together with their sources and confidence
- Plans, preferences, notes, and long-running personal projects
- Relationships and dependencies between stored information
Memories stay local and persistent. Agents can search, revise, connect, archive, and flag them for review over time. Multiple agents can coordinate safely with logical keys and revision checks, while optional access isolation can limit who may use each space.
Models
Simple Memory uses two local models:
- Qwen3-Embedding-0.6B converts memories and queries into vectors for multilingual semantic retrieval.
- Qwen3-Reranker-0.6B reviews the best candidates and improves their final ordering.
They were selected because they provide strong multilingual retrieval in a relatively small size that remains practical to run locally. Inference automatically prefers a supported GPU and falls back to CPU.
Where is memory stored?
Memories are stored locally in a SQLite database named memory.db.
| Operating system | Default location |
|---|---|
| Windows | %LOCALAPPDATA%\simple-memory\memory.db |
| macOS | ~/Library/Application Support/simple-memory/memory.db |
| Linux | $XDG_DATA_HOME/simple-memory/memory.db, or ~/.local/share/simple-memory/memory.db |
The location can be changed with:
SIMPLE_MEMORY_DATA_DIRfor a different data directorySIMPLE_MEMORY_DB_PATHfor a specific database file
Model files are stored separately in the standard Hugging Face cache.
Installation
Requirements:
- Node.js 22 or newer (latest LTS recommended)
- npm 10 or newer
- Internet access during the first model download
Clone the repository and run the setup command:
git clone https://github.com/gmacev/Simple-Memory-Extension-MCP-Server.git
cd Simple-Memory-Extension-MCP-Server
npm run setup
Or ask your agent to set up Simple Memory from this repository.
The first setup downloads the models if they are not already cached.
Updating
Completely stop the MCP client that is using Simple Memory, then update the repository and installation. The server must not be running because loaded native dependencies may need to be replaced:
git pull
npm run update
Restart the MCP client afterward.
Connect your agent
Configure your MCP client to launch the server through stdio. The client starts the server automatically; you do not need to run npm start separately.
Codex
Run:
codex mcp add simple-memory -- node /absolute/path/to/Simple-Memory-Extension-MCP-Server/dist/index.js
Claude Code
Run:
claude mcp add --scope user simple-memory -- node /absolute/path/to/Simple-Memory-Extension-MCP-Server/dist/index.js
Antigravity (Google)
Add this to ~/.gemini/config/mcp_config.json:
{
"mcpServers": {
"simple-memory": {
"command": "node",
"args": ["/absolute/path/to/Simple-Memory-Extension-MCP-Server/dist/index.js"]
}
}
}
Available tools
| Tool | Purpose |
|---|---|
space_create | Create a memory space and optional access boundary. |
space_list | List memory spaces. |
memory_create | Store a new memory. |
memory_revise | Add a new immutable revision. |
memory_merge | Redirect confirmed duplicates to one canonical memory while preserving them. |
memory_get | Read a current or historical memory. |
memory_get_by_key | Resolve an exact logical key to its canonical memory. |
memory_history | Read revision history. |
memory_list | List active memory summaries by default, with filters and pagination. |
memory_search | Search by exact text, meaning, metadata, provenance, state, or time. |
memory_archive | Reversibly remove a memory from normal recall while preserving it. |
memory_restore | Return an archived memory to normal recall. |
memory_delete | Permanently erase a memory and all related data. |
memory_link | Idempotently create a relationship between memories. |
memory_unlink | Remove a relationship. |
memory_traverse | Explore connected memories with paths, filters, ranking, and pagination. |
memory_feedback | Record standardized content or query-specific retrieval feedback for a revision. |
memory_feedback_list | Read compact or detailed feedback history. |
memory_status | Inspect storage, indexing, and model health. |
Agents can also read complete memories and revision histories through MCP resources.
Environment variables
All configuration is optional; the defaults are suitable for a normal local installation.
General
| Variable | Purpose | Default |
|---|---|---|
SIMPLE_MEMORY_DATA_DIR | Memory data directory | Platform location listed above |
SIMPLE_MEMORY_DB_PATH | Complete SQLite database path | <data-dir>/memory.db |
SIMPLE_MEMORY_MODELS | Set to disabled for lexical-only operation | enabled |
SIMPLE_MEMORY_DEVICE | Runtime device such as cuda, xpu, mps, or cpu | auto |
SIMPLE_MEMORY_LOCAL_FILES_ONLY | Prevent model downloads and use the local cache only | false |
SIMPLE_MEMORY_LOG_LEVEL | debug, info, warn, or error | info |
SIMPLE_MEMORY_MODEL_TIMEOUT_MS | Model request timeout | 600000 |
Transport
| Variable | Purpose | Default |
|---|---|---|
SIMPLE_MEMORY_TRANSPORT | stdio or Streamable http | stdio |
SIMPLE_MEMORY_HTTP_HOST | HTTP bind address | 127.0.0.1 |
SIMPLE_MEMORY_HTTP_PORT | HTTP port | 3000 |
SIMPLE_MEMORY_HTTP_ALLOWED_ORIGINS | Comma-separated browser origins allowed to call HTTP | Local server origins; required for wildcard bind addresses |
SIMPLE_MEMORY_ACCESS_MODE | open, stdio fixed, or HTTP oauth access | open |
SIMPLE_MEMORY_FIXED_PRINCIPAL | Trusted actor identity used by a fixed stdio process | Required in fixed mode |
SIMPLE_MEMORY_FIXED_ACCESS | JSON object containing fixed per-space read, write, or manage grants | Required in fixed mode |
SIMPLE_MEMORY_HTTP_PUBLIC_URL | Public MCP resource URL, including /mcp | Required in oauth mode |
SIMPLE_MEMORY_OAUTH_ISSUER | OAuth/OIDC issuer discovered for metadata and JWKS | Required in oauth mode |
SIMPLE_MEMORY_OAUTH_AUDIENCE | Required JWT audience | Public MCP URL |
SIMPLE_MEMORY_OAUTH_ACCESS_CLAIM | JWT claim containing the spaces grant map | simple_memory_access |
SIMPLE_MEMORY_HTTP_ALLOW_UNAUTHENTICATED_NON_LOOPBACK | Explicitly allow unsafe open HTTP outside loopback | false |
Open HTTP is allowed on loopback only. OAuth public URLs and issuers must use HTTPS except during loopback development. The former SIMPLE_MEMORY_HTTP_TOKEN shared-secret setting is not supported.
Access control for shared use
Most local installations do not need this: a stdio server is open to the trusted agent that starts it.
Use fixed when separate local agent configurations share one database but should be limited to particular spaces. Give each configuration a trusted identity and its allowed spaces:
SIMPLE_MEMORY_ACCESS_MODE=fixed
SIMPLE_MEMORY_FIXED_PRINCIPAL=agent-a
SIMPLE_MEMORY_FIXED_ACCESS={"spaces":{"agent-a-private":"write","project-shared":"read"}}
Use oauth when a shared HTTP server serves separate users or agents. Your identity provider authenticates callers; Simple Memory enforces the access grants carried by their tokens.
Retrieval and models
| Variable | Purpose | Default |
|---|---|---|
SIMPLE_MEMORY_EMBEDDING_MODEL | Embedding model | Qwen/Qwen3-Embedding-0.6B |
SIMPLE_MEMORY_EMBEDDING_REVISION | Embedding model revision | Built-in pinned revision |
SIMPLE_MEMORY_RERANKER_MODEL | Reranking model | Qwen/Qwen3-Reranker-0.6B |
SIMPLE_MEMORY_RERANKER_REVISION | Reranking model revision | Built-in pinned revision |
SIMPLE_MEMORY_EMBEDDING_DIMENSION | Stored vector dimensions | 1024 |
SIMPLE_MEMORY_QUERY_INSTRUCTION | Embedding retrieval instruction | Built-in generic instruction |
SIMPLE_MEMORY_RERANK_INSTRUCTION | Reranking instruction | Built-in generic instruction |
SIMPLE_MEMORY_EMBED_BATCH_SIZE | Embedding batch size | 8 |
SIMPLE_MEMORY_RERANK_BATCH_SIZE | Reranking batch size | 4 |
SIMPLE_MEMORY_LEXICAL_CANDIDATES | Lexical candidates considered | 100 |
SIMPLE_MEMORY_SEMANTIC_CANDIDATES | Semantic candidates considered | 100 |
SIMPLE_MEMORY_RERANK_CANDIDATES | Candidates sent to the reranker | 30 |
Setup and Python
| Variable | Purpose | Default |
|---|---|---|
SIMPLE_MEMORY_TORCH_BACKEND | PyTorch backend selected during setup or update | Automatically detected |
SIMPLE_MEMORY_UV | Path to a specific uv executable | Automatically located |
SIMPLE_MEMORY_PYTHON | Path to the Python executable used by the server | Bundled virtual environment |
SIMPLE_MEMORY_PYTHON_PROJECT | Path to the model-runtime project | Repository python directory |
Standard Hugging Face variables such as HF_HOME can also be used to relocate the shared model cache.
License
MIT