Markdown-first memory infrastructure for AI agents with hybrid search
Project description
memtomem
Markdown-first long-term memory infrastructure for AI agents. Hybrid keyword + semantic search across your notes, docs, and code via the Model Context Protocol.
Core philosophy: .md files are the source of truth and the vector database is a derived cache. Manage memories as plain text files — memtomem makes them instantly searchable.
Built for:
- AI agents (Claude Code, Cursor, Windsurf, Claude Desktop) that need to remember between sessions
- Developers who want a searchable knowledge base built from their existing markdown notes — no proprietary database, no vendor lock-in
- Multilingual content (English, Korean, Japanese, Chinese) via
bge-m3embeddings
Quick Start
# 1. Prerequisites — Python 3.12+ and Ollama (ollama.com)
ollama pull nomic-embed-text # ~270MB, one-time
# 2. Install memtomem
uv tool install memtomem # or: pipx install memtomem
# 3. Run the 7-step setup wizard (picks embedding, memory folder, editor)
mm init # on PATH after `uv tool install` — no `uv run` needed
Then in your AI editor, ask:
"Call the mem_status tool" → confirms the server is connected
"Index my notes folder" → mem_index(path="~/notes")
"Search for deployment" → mem_search(query="deployment checklist")
"Remember this insight" → mem_add(content="...", tags="ops")
That's it. Your agent now has a long-term memory built from plain markdown files.
For full setup, OpenAI configuration, and troubleshooting, see the Getting Started guide.
Prefer no install? (uvx direct, MCP only)
If you'd rather skip the CLI install, uvx will download and run memtomem on demand. You'll need to set MEMORY_DIRS yourself — without it mem_index has nothing to index.
claude mcp add memtomem -s user -- uvx --from memtomem memtomem-server
Or add to .mcp.json for Cursor / Windsurf / Claude Desktop:
{
"mcpServers": {
"memtomem": {
"command": "uvx",
"args": ["--from", "memtomem", "memtomem-server"],
"env": {
"MEMTOMEM_INDEXING__MEMORY_DIRS": "[\"/path/to/your/notes\"]"
}
}
}
}
Key Features
- 🔍 Hybrid search — BM25 (FTS5) + dense vectors (sqlite-vec) merged via Reciprocal Rank Fusion. Exact terms via keyword, meaning via semantic, both at once.
- 📦 Semantic chunking — heading-aware Markdown, AST-based Python, tree-sitter JS/TS, structure-aware JSON/YAML/TOML
- ♻️ Incremental indexing — chunk-level SHA-256 diff means only changed chunks get re-embedded
- 🏷️ Namespaces — scope memories into groups (work / personal / project) with optional auto-derivation from folder names
- 🧹 Maintenance — near-duplicate detection with merge, time-based score decay, TTL expiration, auto-tagging
- 🔄 Export / import — JSON bundle backup and restore with re-embedding
- 🌐 Web UI — full-featured SPA dashboard for search, sources, indexing, tags, sessions, health monitoring
- 🛠️ 72 MCP tools — full feature surface as MCP tools, with
mem_dometa-tool routing 64 actions incoremode (default) for minimal context usage
Documentation
Full documentation lives in the memtomem GitHub repo:
| Guide | Topic |
|---|---|
| Getting Started | Start here — install, setup wizard, first use |
| Hands-On Tutorial | Follow-along with example files |
| User Guide | Complete feature walkthrough — all tools and patterns |
| Configuration | All MEMTOMEM_* environment variables |
| Embeddings | Ollama and OpenAI providers, model dimensions, switching models |
| MCP Client Setup | Editor-specific configuration |
| Agent Memory Guide | Sessions, working memory, procedures, multi-agent |
| Web UI Guide | Visual dashboard reference |
| Hooks | Claude Code hooks for automatic indexing and search |
| memtomem-stm | Optional STM proxy for proactive memory surfacing (separate package) |
License
Apache License 2.0 — see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file memtomem-0.1.3.tar.gz.
File metadata
- Download URL: memtomem-0.1.3.tar.gz
- Upload date:
- Size: 249.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b591e0470ac0557bdb2a958d7cf31fdf3e0b78cc38b5a1dc2437a44bdfac787
|
|
| MD5 |
6a30fbb0bcec0fb1345c9825b0387030
|
|
| BLAKE2b-256 |
f9a9d21ecad56dbaa53e71ca390a0c5bfdbecf301a15783cfa4e926208567f9b
|
Provenance
The following attestation bundles were made for memtomem-0.1.3.tar.gz:
Publisher:
release.yml on memtomem/memtomem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
memtomem-0.1.3.tar.gz -
Subject digest:
2b591e0470ac0557bdb2a958d7cf31fdf3e0b78cc38b5a1dc2437a44bdfac787 - Sigstore transparency entry: 1271499873
- Sigstore integration time:
-
Permalink:
memtomem/memtomem@beeacb8ca4331daea4c617e8cffb386b987a52c4 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/memtomem
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@beeacb8ca4331daea4c617e8cffb386b987a52c4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file memtomem-0.1.3-py3-none-any.whl.
File metadata
- Download URL: memtomem-0.1.3-py3-none-any.whl
- Upload date:
- Size: 327.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
295eb4509bb2a513d054bf0291df0a8e3996640fae71fdebb4863bb45658599c
|
|
| MD5 |
d03f09a3332babc0b98c3d0909391a9f
|
|
| BLAKE2b-256 |
683e1a3f404fee543fe1d7af25e7d9c4e2761e374bd5378bc55253b0a96da5e0
|
Provenance
The following attestation bundles were made for memtomem-0.1.3-py3-none-any.whl:
Publisher:
release.yml on memtomem/memtomem
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
memtomem-0.1.3-py3-none-any.whl -
Subject digest:
295eb4509bb2a513d054bf0291df0a8e3996640fae71fdebb4863bb45658599c - Sigstore transparency entry: 1271499876
- Sigstore integration time:
-
Permalink:
memtomem/memtomem@beeacb8ca4331daea4c617e8cffb386b987a52c4 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/memtomem
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@beeacb8ca4331daea4c617e8cffb386b987a52c4 -
Trigger Event:
push
-
Statement type: