Motivation
The community repo has memory service proposals for Valkey (#155/#156), Milvus (#69), Firestore (#38), and SQL backends (#99), but no MongoDB-backed memory service. MongoDB is one of the most widely deployed document databases, and MongoDB Atlas provides native vector search ($vectorSearch), making it a natural backend for agent long-term memory with semantic recall.
Related: #31/#32 add a MongoDB session service. This proposal is complementary — a MemoryService implementation for long-term memory retrieval, not session/state storage. If #32 merges, the two modules together would give ADK users a full MongoDB persistence story.
Proposed API
A MongoDBMemoryService implementing ADK's BaseMemoryService interface:
add_session_to_memory(session) — extracts session events, generates embeddings via a pluggable embedding function, and stores documents (app_name, user_id, session_id, content, embedding, timestamp) in a configurable collection
search_memory(app_name, user_id, query) — semantic retrieval via Atlas $vectorSearch with top-k limits, similarity threshold, and app/user isolation via pre-filters; falls back to Atlas text search for deployments without a vector index
Configuration options: connection string, database/collection names, embedding function, vector index name, top_k, similarity threshold.
Dependencies
Testing Plan
- Unit tests (mocked client): cover all public methods, edge cases, error conditions
- Integration tests: run against the
mongodb/mongodb-atlas-local Docker image (supports vector search locally), covering vector similarity search, user/app isolation, top-k limits, distance threshold filtering, metadata preservation, and index idempotency
I'd like to implement this myself and will follow the module structure and contribution lifecycle in CONTRIBUTING.md. Happy to adjust the approach based on maintainer feedback.
Motivation
The community repo has memory service proposals for Valkey (#155/#156), Milvus (#69), Firestore (#38), and SQL backends (#99), but no MongoDB-backed memory service. MongoDB is one of the most widely deployed document databases, and MongoDB Atlas provides native vector search (
$vectorSearch), making it a natural backend for agent long-term memory with semantic recall.Related: #31/#32 add a MongoDB session service. This proposal is complementary — a
MemoryServiceimplementation for long-term memory retrieval, not session/state storage. If #32 merges, the two modules together would give ADK users a full MongoDB persistence story.Proposed API
A
MongoDBMemoryServiceimplementing ADK'sBaseMemoryServiceinterface:add_session_to_memory(session)— extracts session events, generates embeddings via a pluggable embedding function, and stores documents (app_name,user_id,session_id,content,embedding,timestamp) in a configurable collectionsearch_memory(app_name, user_id, query)— semantic retrieval via Atlas$vectorSearchwith top-k limits, similarity threshold, and app/user isolation via pre-filters; falls back to Atlas text search for deployments without a vector indexConfiguration options: connection string, database/collection names, embedding function, vector index name,
top_k, similarity threshold.Dependencies
pymongo>=4.15,<5.0(matching the pin in Add MongoDB session service integration for ADK community #32) as an optional dependency under a[mongodb]extraTesting Plan
mongodb/mongodb-atlas-localDocker image (supports vector search locally), covering vector similarity search, user/app isolation, top-k limits, distance threshold filtering, metadata preservation, and index idempotencyI'd like to implement this myself and will follow the module structure and contribution lifecycle in CONTRIBUTING.md. Happy to adjust the approach based on maintainer feedback.