MongoDB Atlas-backed persistent agent memory for mcp-agent (LastMile AI): a drop-in Memory backend with Atlas Vector Search recall.
Project description
mcp-agent-mongodb
MongoDB Atlas–backed persistent memory for mcp-agent
(LastMile AI) — a drop-in replacement for the framework's in-process SimpleMemory.
MongoMemory— implements mcp-agent'sMemorycontract (extend/set/append/get/clear), so you assign it directly tollm.history. Each message is one MongoDB document, scoped bysession_idand ordered by an appendseq, so an agent's conversation history survives restarts and can be shared across processes.- Semantic recall — optional long-term recall over past messages via Atlas Vector
Search (
$vectorSearch). Embedding source-agnostic: bring your own query vector (default) or enable Atlas Automated Embedding (server-side embeddings, no client code).
Capabilities
| Capability | How |
|---|---|
| Persistent agent memory (MS) | MongoMemory as a drop-in llm.history |
| Semantic recall (VS) | recall_semantic() over Atlas $vectorSearch, session-prefiltered |
| Survives restarts / multi-process | history keyed by session_id, stored in MongoDB |
| TTL expiry | optional TTL index on ts |
Why
mcp-agent's every AugmentedLLM keeps conversation history in a Memory object; the
default SimpleMemory holds it in RAM and loses it when the process ends. MongoMemory
is a database-backed Memory: drop it in and the agent's history is durable, queryable,
and shareable — with optional semantic recall over everything it has seen.
Architecture
AugmentedLLM.history ──► MongoMemory(connection_string, session_id=…)
append/extend/set/get/clear │
▼
MongoDB / Atlas "memory" collection
{ session_id, seq, role, message, content, embedding?, ts }
│
recall_semantic ▼ (optional)
Atlas Vector Search $vectorSearch (session-prefiltered)
Install
pip install mcp-agent-mongodb
Quick start (drop-in persistent history)
from google.genai import types
from mcp_agent.agents.agent import Agent
from mcp_agent.workflows.llm.augmented_llm_google import GoogleAugmentedLLM
from mcp_agent_mongodb import MongoMemory
async with agent:
llm = await agent.attach_llm(GoogleAugmentedLLM)
# Swap the in-process history for a MongoDB-backed one:
llm.history = MongoMemory(
"mongodb+srv://...",
session_id="user-123",
message_model=types.Content, # rehydrate provider message objects on read
)
# ...subsequent runs with the same session_id reload this history from MongoDB.
MongoMemory matches the Memory contract exactly:
extend(messages), set(messages), append(message), get() -> list, clear().
Options
| Arg | Default | Purpose |
|---|---|---|
connection_string |
— | MongoDB / Atlas URI (required) |
session_id |
— | Conversation/agent scope (required); every read/write is filtered by it |
database_name |
mcp_agent |
Database name |
collection_name |
memory |
Collection name |
message_model |
None |
Optional pydantic model to rehydrate stored messages on get() |
vector_search_index |
idx_agent_memory |
Atlas Vector Search index name |
auto_embed |
False |
Enable Atlas Automated Embedding (recall by query text) |
auto_embed_model |
voyage-4 |
Voyage model used by Automated Embedding |
ttl_seconds |
None |
If set, TTL index on ts auto-expires idle conversations |
Document shape
{
"session_id": "user-123",
"seq": 7,
"role": "user",
"message": { /* the serialized message, returned verbatim from get() */ },
"content": "summarize the Q3 report",
"embedding": [ /* 1024 floats — bring-your-own-vector path only */ ],
"ts": { "$date": "..." }
}
Semantic recall (Atlas Vector Search)
The package never calls an embedding provider itself — choose one of two first-class paths:
1. Bring your own vector (default).
mem = MongoMemory("mongodb+srv://...", session_id="user-123")
mem.ensure_vector_index(num_dimensions=1024) # one-time, on Atlas
mem.append({"role": "user", "content": "I prefer window seats."},
embedding=my_provider.embed("I prefer window seats."))
hits = mem.recall_semantic(query_vector=my_provider.embed("seating?"), k=5)
2. Atlas Automated Embedding. Atlas embeds server-side (no client embedding code):
mem = MongoMemory("mongodb+srv://...", session_id="user-123", auto_embed=True)
mem.ensure_vector_index() # builds an `autoEmbed` index
mem.append({"role": "user", "content": "I prefer window seats."})
hits = mem.recall_semantic(query="seating preferences", k=5)
There is no silent fallback: if you neither pass a query_vector nor enable
auto_embed, recall_semantic raises ValueError.
MCP + MongoDB synergy
mcp-agent is built on the Model Context Protocol. Pair this memory backend with
mongodb-partners/memory-mcp to make
Atlas both the agent memory backend (this package) and an MCP memory server your
agents can call as a tool.
Demos
demo/memory_demo.py— persistence across two simulated processes + Atlas Vector Search recall (bring-your-own Voyage vectors;MEMORY_MODE=autofor Automated Embedding).demo/agent_demo.py— a real Gemini mcp-agent whosellm.historyis aMongoMemory; Session 2 (brand-new app/agent/LLM) answers using history reloaded from Atlas.
pip install -e ".[dev]" "mcp-agent" "google-genai" voyageai
# demo/.env: ATLAS_URI, VOYAGE_API_KEY, GEMINI_API_KEY
python demo/memory_demo.py # bring-your-own vectors
MEMORY_MODE=auto python demo/memory_demo.py # Atlas Automated Embedding
python demo/agent_demo.py # Gemini agent, cross-session memory
Why MongoDB
One database for agent state: durable conversation history, semantic recall via Atlas Vector Search, TTL lifecycle, and flexible documents for arbitrary provider message shapes — no separate vector store to operate.
Conventions
- The package owns its
MongoClient(built from a connection string). ConnectionappName=devrel-integ-mcp-agent-pythonand themcp-agent-mongodbdriver-info handshake are always set and non-overridable (server-side attribution). - Embeddings use Voyage AI 3.5 (
voyage-3.5, 1024-dim) on the bring-your-own path.
Tests
pip install -e ".[dev]"
pytest -q # 17 tests, mongomock — no infra required
Resources
- mcp-agent: https://github.com/lastmile-ai/mcp-agent · docs: https://docs.mcp-agent.com
- MongoDB Atlas Vector Search: https://www.mongodb.com/docs/atlas/atlas-vector-search/
- Voyage AI embeddings: https://docs.voyageai.com
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_agent_mongodb-0.1.0.tar.gz.
File metadata
- Download URL: mcp_agent_mongodb-0.1.0.tar.gz
- Upload date:
- Size: 16.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
550af110294f1502c33e0cfcbed29403bbdb0e9ed880820497f5d27acb85289e
|
|
| MD5 |
51c194efc7a21a0b8dc0430f2138ee3c
|
|
| BLAKE2b-256 |
f102661db72264bf877e91f29563f82022182c6aeb0b36d8ffedee41ff3b8ed0
|
Provenance
The following attestation bundles were made for mcp_agent_mongodb-0.1.0.tar.gz:
Publisher:
release.yml on mongodb-developer/mcp-agent-mongodb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_agent_mongodb-0.1.0.tar.gz -
Subject digest:
550af110294f1502c33e0cfcbed29403bbdb0e9ed880820497f5d27acb85289e - Sigstore transparency entry: 1708402918
- Sigstore integration time:
-
Permalink:
mongodb-developer/mcp-agent-mongodb@aae3b484176b2cdd72df47c4461400df1ddfe581 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/mongodb-developer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@aae3b484176b2cdd72df47c4461400df1ddfe581 -
Trigger Event:
push
-
Statement type:
File details
Details for the file mcp_agent_mongodb-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcp_agent_mongodb-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dfdd57665f0ea40278433713badf29a7822ba2aee6aa62d07b773e1bff63eaab
|
|
| MD5 |
d45f306d307b179c2d3f5b3585be9baa
|
|
| BLAKE2b-256 |
19eda99e5ff07a63d7fe1138dc0ff8035a0c0662b810392e4ce35d42875c0fcb
|
Provenance
The following attestation bundles were made for mcp_agent_mongodb-0.1.0-py3-none-any.whl:
Publisher:
release.yml on mongodb-developer/mcp-agent-mongodb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_agent_mongodb-0.1.0-py3-none-any.whl -
Subject digest:
dfdd57665f0ea40278433713badf29a7822ba2aee6aa62d07b773e1bff63eaab - Sigstore transparency entry: 1708402986
- Sigstore integration time:
-
Permalink:
mongodb-developer/mcp-agent-mongodb@aae3b484176b2cdd72df47c4461400df1ddfe581 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/mongodb-developer
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@aae3b484176b2cdd72df47c4461400df1ddfe581 -
Trigger Event:
push
-
Statement type: