This release is a pre-release and may not be stable for production use.
MongoDB vector stores
An alpha MongoDB integration for Microsoft Agent Framework.
MongoDBCollection provides async BSON CRUD and dense-vector search,
MongoDBStore shares an official async PyMongo client across collections, and
MongoDBSettings defines connection configuration.
Installation
pip install agent-framework-mongodb --pre
Requires Python 3.10+, PyMongo 4.13.2+, and a MongoDB deployment with MongoDB Vector Search. Search-index creation requires the corresponding database permissions.
Connection
Set MONGODB_URI and MONGODB_DATABASE_NAME; MONGODB_APP_NAME is optional.
Constructors resolve explicit arguments first, then an explicitly selected
.env file, then process environment variables. URIs accept str or AF
SecretString and are unwrapped only for PyMongo.
You can instead inject an AsyncMongoClient and pass database_name. An
injected client bypasses URI, app-name, and .env loading and always remains
caller-owned. Connector-created clients are closed by close() or async context
exit. Collections created by a store borrow its already-resolved client.
Example
import asyncio
from dataclasses import dataclass
from typing import Annotated
from agent_framework import Filter, VectorStoreField, vectorstoremodel
from agent_framework_mongodb import MongoDBStore
@vectorstoremodel(collection_name="articles")
@dataclass
class Article:
id: Annotated[str, VectorStoreField("key")]
topic: Annotated[str, VectorStoreField("data", is_indexed=True)]
text: Annotated[str, VectorStoreField("data")]
embedding: Annotated[list[float] | None, VectorStoreField("vector", dimensions=3)] = None
async def main() -> None:
async with MongoDBStore() as store:
collection = store.get_collection(Article)
await collection.ensure_collection_exists()
await collection.upsert(
[Article("1", "database", "MongoDB stores BSON documents", [1, 0, 0])],
generate_vectors=False,
)
results = await collection.search(
vector=[1, 0, 0],
filter=Filter("topic", "eq", "database"),
)
async for result in results:
print(result["record"].text, result["score"])
asyncio.run(main())
Capabilities and limits
- String, signed 64-bit integer, and BSON
ObjectId_idvalues retain native identity. OnlyObjectIdkeys can be generated. TypedObjectIdmodels must register an encoder and decoder that preserveObjectId; IDs are never stringified or copied to hidden fields in storage. Agent-facing CRUD tool JSON representsObjectIdkeys as validated 24-character hexadecimal strings and converts them back to native values at the collection boundary. - Multiple top-level dense-vector fields are supported through one vector-search
index per field. Use
provider_annotations={"mongodb.index_name": "..."}to select an existing index name. Dimensions must be 1-8192. Metrics are cosine, dot product, and Euclidean; returnedvectorSearchScorevalues are native normalized relevance scores where larger is better. ensure_collection_exists()creates missing indexes, waits for readiness, and validates existing semantic definitions. It never updates or migrates an incompatible collection or index. Newly written documents become searchable asynchronously, even after an index is queryable.- Retrieval filters preserve whole-value equality, missing/null, direct array
membership, boolean/number, and literal text semantics with server-side
expressions. Collection filters require fields declared as
listand reject mapping and non-list collection operands whose identity BSON cannot preserve. Vector prefilters are intentionally narrower: indexed scalar equality, range, membership, AND, and OR only. Nested paths, NOT, null/missing, list membership, and literal/analyzed text are rejected for vector search. - Keyword-hybrid search, sparse/binary vectors, provider-side embedding generation, and automatic schema migration are not supported.
- ANN defaults
numCandidatesto the MongoDB recommendation of 20 timesskip + top, capped at MongoDB's maximum of 10,000. Explicit values must be 1-10,000 and at leastskip + top; larger result windows require exact search. The vector stage selects its result window before score thresholding, skip, and limit, so selective thresholds can underfill a page. Deep offsets increase server cost; result prefixes are never materialized by the connector. - Every record is fully validated against BSON's signed 64-bit integer and 16 MiB
document limits before any batch write. PyMongo then chunks bulk writes using
negotiated server limits. A server error can leave a successful prefix
(
ordered=True) or subset (ordered=False) persisted.
Documentation
Release files for agent-framework-mongodb 1.0.0a260918
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| agent_framework_mongodb-1.0.0a260918.tar.gz | 18.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agent_framework_mongodb-1.0.0a260918-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.9 kB
Release files / agent_framework_mongodb-1.0.0a260918.tar.gz
| Download URL | agent_framework_mongodb-1.0.0a260918.tar.gz |
|---|---|
| Size | 18.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7b7df9497940a82371c4fdba2e19b23c029918f6e6193613ed93c9b4f4d30d47
|
|
BLAKE2b-256 checksum How to use checksums |
d7f0a58ff91659a2d1aca8f4da954f1bfbbacac52cf9be9502bf3f8639edd83b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / agent_framework_mongodb-1.0.0a260918-py3-none-any.whl
| Download URL | agent_framework_mongodb-1.0.0a260918-py3-none-any.whl |
|---|---|
| Size | 16.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
266566957b4c45e4838eee062a94c5a7f317450eb9ffcdf968ae0581dc36ef79
|
|
BLAKE2b-256 checksum How to use checksums |
f5b3713a76af9427300ce64dd15f320a06e190c59216cb602d33db2e204e3a51
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|