Releases: elvismdev/mem0-mcp-selfhosted
v0.3.2
v0.3.2 (2026-03-13)
Bug Fixes
- Cache-bust Glama badge URL to force fresh camo proxy fetch (
205ecf9)
Detailed Changes: v0.3.1...v0.3.2
v0.3.1
v0.3.1 (2026-03-12)
Bug Fixes
- Add .python-version for Glama uv sync compatibility (
e4d1f09)
Pin Python 3.12 so uv sync resolves the correct interpreter in Glama's Docker build environment instead of picking up Debian's externally-managed Python 3.11.
Chores
- Remove Dockerfile (Glama generates its own) (
33f2f1d)
Glama's admin page generates a Dockerfile from configuration fields rather than using the repo's Dockerfile. No other Docker deployment workflow exists, so the file is unused.
Detailed Changes: v0.3.0...v0.3.1
v0.3.0
v0.3.0 (2026-03-12)
Features
- Lazy Memory init + Glama submission packaging (
c6f2b76)
Defer Memory.from_config() to the first tool call via _ensure_memory(), allowing the MCP server to respond to initialize/tools/list without live Qdrant/Neo4j/Ollama. This unblocks Glama's Docker-based inspection pipeline which builds and runs the container in an ephemeral sandbox.
Add LICENSE (MIT), glama.json, Dockerfile, and Glama badge in README.
Detailed Changes: v0.2.1...v0.3.0
v0.2.1
v0.2.1 (2026-02-28)
Bug Fixes
- Update hooks to nested format for Claude Code schema compatibility (
2f86dee)
Migrate hook installer from the deprecated flat format to the current nested schema (matcher group -> hooks array -> handler objects). Add legacy format detection and auto-migration so existing users upgrading do not end up with duplicate or broken entries.
Documentation
- Clarify hooks and CLAUDE.md as complementary layers (
94f29dc)
Update README to explain that hooks (automated memory at session boundaries) and CLAUDE.md (behavioral instructions for mid-session engagement) work best together rather than as alternatives.
Detailed Changes: v0.2.0...v0.2.1
v0.2.0
v0.2.0 (2026-02-28)
Features
- Add Claude Code session hooks for cross-session memory (
113df26)
Add SessionStart and Stop hooks that give Claude Code automatic cross-session memory without requiring CLAUDE.md rules or manual tool calls.
- SessionStart hook (mem0-hook-context): searches mem0 with multi-query strategy, deduplicates by ID, injects formatted memories as additionalContext on startup and compact events - Stop hook (mem0-hook-stop): reads last ~3 exchanges from JSONL transcript via bounded deque, saves session summary to mem0 with infer=True for atomic fact extraction - CLI installer (mem0-install-hooks): patches .claude/settings.json with idempotent hook entries, supports --global and --project-dir - Graph force-disabled in hooks to stay within 15s/30s timeout budgets - Atomic settings.json write via tempfile + os.replace - 43 unit tests covering protocol, edge cases, and error handling - 6 integration tests against live Qdrant + Ollama infrastructure - README updated with hooks documentation, architecture diagram, and test structure
Detailed Changes: v0.1.1...v0.2.0
v0.1.1
v0.1.1 (2026-02-27)
Bug Fixes
- Use NEO4J_DATABASE env var instead of config dict for non-default database (
74e1188)
mem0ai's graph_memory.py passes config as positional args to Neo4jGraph() where pos 3 is token, not database. Setting database in the config dict causes it to land in the token parameter, resulting in AuthenticationError. Use NEO4J_DATABASE env var which langchain_neo4j reads via get_from_dict_or_env().
Upstream: mem0ai #3906, #3981, #4085 (none merged)
Resolves: PAR-57
Detailed Changes: v0.1.0...v0.1.1
v0.1.0
Changelog
All notable changes to mem0-mcp-selfhosted are documented here.
[0.1.0] - 2026-02-27
First public release. Self-hosted mem0 MCP server for Claude Code with 11 tools, dual LLM provider support, and knowledge graph integration.
New Features
- 11 MCP tools — 9 memory tools (
add_memory,search_memories,get_memories,get_memory,update_memory,delete_memory,delete_all_memories,list_entities,delete_entities) + 2 graph tools (search_graph,get_entity) +memory_assistantprompt - Dual LLM providers — Anthropic (Claude) and Ollama as configurable main LLM for fact extraction and memory updates. Set
MEM0_PROVIDER=ollamafor a fully local setup with no cloud dependencies - Knowledge graph — Neo4j-backed entity and relationship extraction via
enable_graphtoggle. Supports 5 graph LLM providers:anthropic,ollama,gemini,gemini_split, andanthropic_oat - Split-model graph pipeline —
gemini_splitroutes entity extraction to Gemini and contradiction detection to Claude, combining Gemini's extraction quality with Claude's reasoning - Zero-config Anthropic auth — Automatically reads Claude Code's OAT token from
~/.claude/.credentials.json. No API key needed for Claude Code users - OAT token self-refresh — Proactive pre-expiry refresh + 3-step defensive retry (piggyback on credentials file, self-refresh via OAuth, wait-and-retry). Long-running sessions survive token rotation seamlessly
MEM0_PROVIDERcascade — Single env var configures both main LLM and graph LLM providers.MEM0_OLLAMA_URLcascades to all Ollama-backed services. Per-service overrides still work- Structured outputs — Claude Opus/Sonnet/Haiku 4.x models use native JSON schema via
output_configfor reliable fact extraction - Ollama defense-in-depth — 6 layers for reliable structured output from Ollama:
/no_thinkinjection, deterministic params, think-tag stripping, JSON extraction, and retry on empty responses - Per-call graph toggle —
enable_graphparameter onadd_memoryandsearch_memorieswith thread-safe locking - Wildcard graph search — Pass
*tosearch_graphto list all entities - Qdrant Facet API —
list_entitiesuses server-side aggregation (Qdrant v1.12+) with scroll+dedupe fallback for older versions - Safe bulk delete — Never calls
memory.delete_all(). Iterates and deletes individually with explicit graph cleanup
Bug Fixes
- Fix
anthropic_oatprovider not registered inLlmFactory, preventing explicit use - Fix
is_oat_token(None)crash in proactive refresh when no Anthropic token configured - Fix
response.content[0]IndexError when Anthropic API returns empty content - Fix thread-safety race condition in
safe_bulk_deletereading mutableenable_graphstate - Fix contradiction model defaulting to Ollama model name when sent to Anthropic API
- Fix Anthropic provider not registered for
gemini_splitcontradiction LLM - Fix
MEM0_QDRANT_TIMEOUTrejected by Pydantic — use pre-configuredQdrantClientinstead - Fix Gemini
_parse_responsesignature mismatch after upstreamtoolsparameter addition - Fix Neo4j
CypherSyntaxErroron LLM-generated relationship names with hyphens or leading digits
Infrastructure
- 301 tests — Unit, contract, integration, MCP protocol, and concurrency test suites
- Centralized env helpers —
env(),opt_env(),bool_env()with consistent whitespace stripping across all modules - Telemetry suppression — mem0ai PostHog telemetry disabled before any imports
- Relationship sanitizer — Monkey-patches mem0ai's sanitizer at startup for Neo4j identifier compliance
- Gemini null content guard — Patches
GeminiLLM._parse_responseto handlecontent=Noneresponses - Transient retry — Anthropic API 500/502/503/529 errors retried with exponential backoff