-
v5.5.3 Stable
released this
2026-07-09 17:58:28 +00:00 | 81 commits to main since this releaseIf you're coming from the 3.x line, this is a big jump. v5 has been run hard internally for months before shipping. This release page collects the headline changes since v3 alongside the v5.5.3 fixes.
Fixed in v5.5.3
- bandit
B324High-severity failure in the security pipeline:_cache_key()inmcp_server/memory/query_expansion.pyusedhashlib.sha1()to fingerprint a query into a cache key, which bandit flags as a weak hash for security. The digest carries no security property (it's only a cache key), so the call now passesusedforsecurity=False, the idiomatic fix that clears the finding without a blanket# nosec
Also in the 5.5.x line
- v5.5.2: OAuth refresh raised
AttributeError→ 500 under FastMCP 3.x. The newer MCP SDK readsrefresh_token.expires_at, but_StoredTokenonly storedcreated_at+expires_in, so every refresh 500d and desktop/claude.ai clients couldn't get a token._StoredTokennow exposesexpires_atas a computed property - v5.5.1: OAuth / MCP access behind a reverse proxy or tunnel (Traefik, Caddy, Tailscale funnel) broke after the FastMCP 3.x upgrade. Its
HostOriginGuardMiddleware421d on unlisted hosts and 403d on scheme-mismatched origins.server.pynow derives the allowed host and fullscheme://host[:port]origin fromOAUTH_BASE_URL/MCP_PUBLIC_URL, withMCP_ALLOWED_HOSTS/MCP_ALLOWED_ORIGINSfor extras
Highlights since v3
Connect claude.ai from the browser (v4.0.0)
A full OAuth 2.1 authorisation server, so claude.ai connects to your self-hosted OmniMem as a connector with no local proxy. Dynamic client registration, PKCE, token refresh with rotation, and a browser login page. Token state persists in Valkey (with AOF) so sessions survive restarts. The 5.5.x fixes above harden this path for real-world proxy/tunnel deployments.
Smarter recall (v5.0.0)
- Fact extraction at ingest: Claude Haiku pulls atomic facts from raw input before storing
- New
preferencenamespace for prescriptive rules ("always update the changelog after a feature") - Temporal-aware retrieval: date-shaped queries get a scoring boost against a memory's
event_date - Query expansion: alternative phrasings unioned at recall time
remember_document()with turn-pair chunking took zero-recall on long transcripts from 45% down to 0%
Faster (v5.2.0, v5.3.0)
- Non-blocking ingest via a background enrichment queue (~0.25s to store and return)
- Recall, dedup and maintenance reuse embeddings already stored in Valkey instead of recomputing them
- Project and state filters are pushed into the vector search so candidate slots stay in-scope
- Projected batch fetches (
get_fields_multi) halve round trips on the scan-heavy hot paths
Security pass (v5.3.0)
- Constant-time bearer token comparison (
hmac.compare_digest) - Fail closed: the server refuses to start unauthenticated on a non-loopback address, and Compose refuses an empty
VALKEY_PASSWORD - Path-traversal hardening on all web UI backup operations
- Denial-of-service caps on uploads (100 MB) and RSS page fetches (
RSS_MAX_PAGE_BYTES) - Per-IP brute-force protection on OAuth login
Self-hosted, open source, runs on Docker Compose. Python 3.12, FastMCP, Valkey.
Full detail in CHANGELOG.md.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- bandit