Skip to main content

Local-first persistent memory for MCP agents — 46 tools, 89% LongMemEval, hybrid search, GDPR, zero cloud

Project description

M3 Memory

M3 Memory

M3 Memory

Persistent, local memory for MCP agents.

"Wait, you remember that?" — Stop re-explaining your project to your AI. Give it a long-term brain that stays 100% on your machine.

🚀 New to M3? Start here with our 5-minute "Human-First" guide.

PyPI Downloads Python 3.11+ Apache 2.0 MCP macOS Windows Linux

Works with Claude Code, Gemini CLI, Aider, OpenCode, and any MCP-compatible agent.


📦 Install

pip install m3-memory

Add to your MCP config:

{
  "mcpServers": {
    "memory": { "command": "mcp-memory" }
  }
}

Requires a local embedding model. Ollama is the easiest:

ollama pull qwen3-embedding:0.6b && ollama serve

Qwen3-Embedding-0.6B (1024-dim, Q8 quantized, ~639 MB) is the default model M3 Memory is tuned for. nomic-embed-text (768-dim) also works — set EMBED_MODEL=nomic-embed-text in your environment.

Prefer a GUI? LM Studio works too — load any embedding model and start its server (defaults to port 1234).

Restart your agent. Done.


🔮 What happens next

You're at a coffee shop on your MacBook, asking Claude to debug a deployment issue. It remembers the architecture decisions you made last week, the server configs you stored yesterday, and the troubleshooting steps that worked last time — all from local SQLite, no internet required.

Later, you're at your Windows desktop at home with Gemini CLI, and it picks up exactly where you left off. Same memories, same context, same knowledge graph. You didn't copy files, didn't export anything, didn't push to someone else's cloud. Your PostgreSQL sync handled everything in the background the moment your laptop hit the local network.


💡 Why this exists

Most AI agents don't persist state between sessions. You re-paste context, re-explain architecture, re-correct mistakes. When facts change, the agent has no mechanism to update what it "knows."

M3 Memory gives agents a structured, persistent memory layer that handles this.


⚡ What it does

Persistent memory — facts, decisions, preferences survive across sessions. Stored in local SQLite.

Hybrid retrieval — FTS5 keyword matching + semantic vector similarity + MMR diversity re-ranking. Automatic, no tuning required.

Contradiction handling — conflicting facts are automatically superseded. Bitemporal versioning preserves the full history.

Knowledge graph — related memories linked automatically on write. Nine relationship types, 3-hop traversal.

Zero-config local installpip install m3-memory, one line in your MCP config, done. SQLite stores everything locally — no external databases, no cloud calls, no API costs. Works offline.

Cross-device sync — optional, easy-to-add bi-directional delta sync via PostgreSQL or ChromaDB. Set one environment variable and your memories follow you across machines.


📚 Learn more

🚀 Getting started 👥 Multi-agent orchestration
Core features 🧩 Multi-agent example
🏗️ System design ⚖️ M3 vs alternatives
🔧 Implementation details ⚙️ Configuration
🤖 Agent rules + all 46 tools 🗺️ Roadmap

🎯 Who this is for

Good fit Not the right tool
You use Claude Code, Gemini CLI, Aider, or any MCP agent — plus non-MCP clients via the built-in HTTP proxy server You need LangChain/CrewAI pipeline memory — see Mem0
You're coordinating multiple agents on a shared local store You need a hosted agent runtime with managed scaling — see Letta
You need GDPR primitives, bitemporal state, or pure SQLite You want state-of-the-art retrieval benchmarks today — see Hindsight
You want memory that persists across sessions and devices You only need in-session chat context

🛡️ Why trust this

46 MCP tools Memory, search, GDPR, refresh lifecycle — plus agent registry, handoffs, notifications, and tasks for multi-agent orchestration
193 end-to-end tests Covering write, search, contradiction, sync, GDPR, maintenance, and orchestration paths
Explainable retrieval memory_suggest returns vector, BM25, and MMR scores per result
SQLite core No external database required. Single-file, portable, inspectable
GDPR compliance gdpr_forget (Article 17) and gdpr_export (Article 20) as built-in tools
Self-maintaining Automatic decay, dedup, orphan pruning, retention enforcement
Apache 2.0 licensed Free. No SaaS tier, no usage limits, no lock-in

📊 Benchmarks

89.0% on LongMemEval-S (445/500 correct) — a 500-question evaluation of long-horizon conversational memory. Without oracle metadata: 74.8% (smart retrieval) to 68.0% (fixed-k baseline).

Question type n Accuracy
single-session-user 70 91.4%
single-session-assistant 56 94.6%
single-session-preference 30 93.3%
multi-session 133 85.0%
temporal-reasoning 133 86.5%
knowledge-update 78 92.3%
Overall 500 89.0%

Full methodology, ablations, and honest caveats: benchmarks/longmemeval/README.md.


🧰 Core tools

Most sessions use three tools. The rest is there when you need it.

Tool Purpose
memory_write Store a fact, decision, preference, config, or observation
memory_search Retrieve relevant memories (hybrid search)
memory_update Refine existing knowledge
memory_suggest Search with full score breakdown
memory_get Fetch a specific memory by ID

All 46 tools are documented in AGENT_INSTRUCTIONS.md.


🤖 For AI agents

M3 Memory exposes 46 MCP tools for storing, searching, updating, and linking knowledge — including conversation grouping, a refresh lifecycle for aging memories, agent registry, handoffs, notifications, and tasks for multi-agent orchestration. Any MCP-compatible agent can use them automatically.

To teach your agent best practices (search before answering, write aggressively, update instead of duplicating), drop the compact rules file into your project:

examples/AGENT_RULES.md

Full tool reference with all parameters and behaviors: AGENT_INSTRUCTIONS.md


🪄 Let your agent install it

Already inside Claude Code or Gemini CLI? Paste one of these prompts:

Claude Code:

Install m3-memory for persistent memory. Run: pip install m3-memory
Then add {"mcpServers":{"memory":{"command":"mcp-memory"}}} to my
~/.claude/settings.json under "mcpServers". Make sure Ollama is running
with qwen3-embedding:0.6b. Then use /mcp to verify the memory server loaded.

Gemini CLI:

Install m3-memory for persistent memory. Run: pip install m3-memory
Then add {"mcpServers":{"memory":{"command":"mcp-memory"}}} to my
~/.gemini/settings.json under "mcpServers". Make sure Ollama is running
with qwen3-embedding:0.6b.

After install, test it:

Write a memory: "M3 Memory installed successfully on [today's date]"
Then search for: "M3 install"

🎬 See it in action

Contradiction detection

Demo: contradiction detection and automatic resolution

Hybrid search with scores

Demo: hybrid search with score breakdown

Cross-device, cross-platform sync

Demo: cross-device, cross-platform memory sync


💬 Community

Discord   GitHub Issues   Contributing · Good first issues


Star History

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

m3_memory-2026.4.19.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

m3_memory-2026.4.19-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

File details

Details for the file m3_memory-2026.4.19.tar.gz.

File metadata

  • Download URL: m3_memory-2026.4.19.tar.gz
  • Upload date:
  • Size: 22.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for m3_memory-2026.4.19.tar.gz
Algorithm Hash digest
SHA256 6a3c58aeba8724f54503cb2a9c5e959352cbee07d2c01c84cb143c8ca246aba6
MD5 3dd4e165a6a80ece5411b9aca17e251e
BLAKE2b-256 bf4bedad5e86740d387682c4391beba77cfbb1e33b6aaf5fd7ce44f3fc12b2e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for m3_memory-2026.4.19.tar.gz:

Publisher: publish.yml on skynetcmd/m3-memory

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file m3_memory-2026.4.19-py3-none-any.whl.

File metadata

  • Download URL: m3_memory-2026.4.19-py3-none-any.whl
  • Upload date:
  • Size: 15.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for m3_memory-2026.4.19-py3-none-any.whl
Algorithm Hash digest
SHA256 1878c222f387c48112b6f03a7091ab8e9a12b195035756fd3a6871fbf172bdd9
MD5 3a69233d866b090fd5fe8d0bb10c0b63
BLAKE2b-256 e5a55f18d24c3b70731edb8e30f57a44cbe54f375f71f309a418aeff45e665b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for m3_memory-2026.4.19-py3-none-any.whl:

Publisher: publish.yml on skynetcmd/m3-memory

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page