Skip to content

Releases: elvismdev/mem0-mcp-selfhosted

v0.3.2

13 Mar 00:51

Choose a tag to compare

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

12 Mar 22:55

Choose a tag to compare

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

12 Mar 19:38

Choose a tag to compare

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

28 Feb 20:33

Choose a tag to compare

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

28 Feb 12:30

Choose a tag to compare

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

27 Feb 23:07

Choose a tag to compare

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

27 Feb 12:04

Choose a tag to compare

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_assistant prompt
  • Dual LLM providers — Anthropic (Claude) and Ollama as configurable main LLM for fact extraction and memory updates. Set MEM0_PROVIDER=ollama for a fully local setup with no cloud dependencies
  • Knowledge graph — Neo4j-backed entity and relationship extraction via enable_graph toggle. Supports 5 graph LLM providers: anthropic, ollama, gemini, gemini_split, and anthropic_oat
  • Split-model graph pipelinegemini_split routes 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_PROVIDER cascade — Single env var configures both main LLM and graph LLM providers. MEM0_OLLAMA_URL cascades 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_config for reliable fact extraction
  • Ollama defense-in-depth — 6 layers for reliable structured output from Ollama: /no_think injection, deterministic params, think-tag stripping, JSON extraction, and retry on empty responses
  • Per-call graph toggleenable_graph parameter on add_memory and search_memories with thread-safe locking
  • Wildcard graph search — Pass * to search_graph to list all entities
  • Qdrant Facet APIlist_entities uses 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_oat provider not registered in LlmFactory, 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_delete reading mutable enable_graph state
  • Fix contradiction model defaulting to Ollama model name when sent to Anthropic API
  • Fix Anthropic provider not registered for gemini_split contradiction LLM
  • Fix MEM0_QDRANT_TIMEOUT rejected by Pydantic — use pre-configured QdrantClient instead
  • Fix Gemini _parse_response signature mismatch after upstream tools parameter addition
  • Fix Neo4j CypherSyntaxError on LLM-generated relationship names with hyphens or leading digits

Infrastructure

  • 301 tests — Unit, contract, integration, MCP protocol, and concurrency test suites
  • Centralized env helpersenv(), 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_response to handle content=None responses
  • Transient retry — Anthropic API 500/502/503/529 errors retried with exponential backoff