What's New
feat(search): Cascading fallback when semantic results are sparse (#883, @filhocf, closes #873)
Adds a two-tier opt-in fallback to retrieve_memories for deployments where vector similarity returns fewer results than requested. When fallback=True is passed, the system:
- Tries BM25 exact-match over stored content
- Falls back further to tag-intersection
- Merges and de-duplicates results up to
n_results
Default is fallback=False — existing callers are unaffected. Closes #873.
refactor(storage): include_embeddings on MemoryStorage ABC bulk-read methods (#881, @henry201605)
get_all_memories and get_memories_by_time_range on the MemoryStorage abstract base class (and all concrete backends) now accept include_embeddings: bool = False. When True, raw embedding vectors are hydrated into the returned Memory objects, enabling consolidation pipelines to access embedding data without a separate fetch round-trip. Default preserves existing behaviour for all callers.
fix(ci): Fork PR automation no longer fails with 403 (#882)
Workflow triggers that write labels or post comments now use pull_request_target instead of pull_request. This resolves the 403 read-only-token failures that blocked label assignment and contributor-welcome comments on all fork-originated PRs.
Upgrade
pip install --upgrade mcp-memory-service
# or
uvx mcp-memory-service@latestNo breaking changes. No migration required.
Full Changelog
See CHANGELOG.md for the complete version history.
🙏 Special Thanks to @filhocf and @henry201605 for the contributions in this release.