What's New
feat(milvus): Native update_memory and update_memories_batch (#966)
Contributor: @henry201605 — Part of #888 (optional BaseStorage overrides for Milvus backend)
The Milvus backend now provides native overrides for two update methods:
-
update_memory— delegates toupdate_memory_metadata, reusing its validation, merge, and timestamp logic instead of duplicating it. Metadata is merged (not replaced), consistent with the base class contract. -
update_memories_batch— replaces N sequential operations with 3 batch calls:- Single
client.get(ids=...)for all existing records - Single
SentenceTransformer.encode(texts)for all embeddings - Single Milvus upsert for all entities
Result: 1 round-trip instead of N — significantly lower latency for bulk update workloads.
- Single
18 mock-based unit tests cover normal/error/edge cases, batch operations, partial failures, and preserve_timestamps behavior.
feat(sse): Last-Event-ID replay on /api/events reconnect (#953)
SSE clients can now resume missed events after a transient disconnect using the standard Last-Event-ID header:
- Bounded ring buffer of recently broadcast events (configurable via
MCP_SSE_REPLAY_BUFFER_SIZE, default 1000, 0 disables) - Replay outcome (
status: resumedorstatus: id_not_in_buffer) surfaced in theconnection_establishedwelcome event - Connection-scoped events (welcome, close) and heartbeats are not buffered; filtered broadcasts are excluded to avoid expanding the original audience on replay
Special Thanks
Huge thanks to @henry201605 for the continued Milvus backend improvements — the native batch update implementation is a significant performance win for Milvus deployments.
Full Changelog
See CHANGELOG.md for complete details.