Vector Stores
Pinecone, Weaviate, Qdrant, Chroma, and Milvus toolsets.
#Vector stores
maivn-tools ships first-party connectors for the most common vector databases used in RAG pipelines. Each toolset follows the standard @toolset / @toolify shape; the snippets below show only the constructor and the headline tool surface.
Tip: most agents only need read access (search + fetch). Register with add_toolset(..., include_tags=["read"]) to drop write / delete tools.#Agent-ready behavior (overview)
- List tools (
list_indexesfor Pinecone,list_classesfor Weaviate,list_collectionsfor Qdrant / Chroma / Milvus) return compact summaries by default with a response-local display ref (index_ref,class_ref,collection_ref). The user-facing name (Pinecone index name, Weaviate class name, Qdrant/Chroma/Milvus collection name) is kept in the summary because it is also the API identifier callers pass back. Opaque records can be opted into withinclude_ids=True. - Search / query / GraphQL results are NOT hidden. Tools like
query,search,graphql_queryreturn the per-matchid,score,metadata, and (optionally)vectorexactly as the provider returns them -- the agent needs the document ID to fetch the source record back viafetch/retrieve_points/get_documents/get_entities/get_object. - Name-taking tools (
describe_index,get_class,get_collection,delete_index,delete_class,delete_collection,drop_collection) accept the raw name or the dict returned by the matching list tool. - Destructive tools (
delete_index,delete_class,delete_object,delete_collection,delete_vectors,delete_points,delete_documents,drop_collection,delete_entities) require user confirmation -- they remove indexed data and are not reversible.
#PineconeToolSet
from maivn_tools import PineconeToolSet
connector = PineconeToolSet(
api_key=secrets["PINECONE_API_KEY"],
index_host="https://my-index-abc.svc.region.pinecone.io",
)index_host is the per-index endpoint returned by the control plane's describe_index call. Control-plane tools (indexes / collections) work without it; data-plane tools (describe_index_stats, upsert, query, fetch, delete_vectors, update_vector) require it.
Tools: list_indexes, describe_index, create_index, delete_index (destructive), describe_index_stats, upsert, query, fetch, delete_vectors (destructive), update_vector.
Agent-ready behavior
list_indexes: summary withindex_ref,name,dimension,metric,status,host,spec. Names + hosts are kept (they are the user-facing keys). Setinclude_ids=Trueto attach the raw index record underraw.describe_indexanddelete_indexaccept a raw name or an index dict fromlist_indexes.queryreturns the raw Pinecone{"matches": [...]}payload -- per-matchid/score/metadataare exposed unchanged so the agent can pass IDs tofetch.
indexes = connector.list_indexes()
stats = connector.describe_index(indexes["indexes"][0]) # dict accepted#WeaviateToolSet
from maivn_tools import WeaviateToolSet
connector = WeaviateToolSet(
base_url="https://my-cluster.weaviate.network",
api_key=secrets["WEAVIATE_API_KEY"], # optional for self-hosted
)REST schema + objects plus a GraphQL escape hatch for queries. Tools: get_meta, list_classes, get_class, create_class, delete_class (destructive), get_object, create_object, update_object, delete_object (destructive), batch_objects, graphql_query.
Agent-ready behavior
list_classes: summary withclass_ref,class_name,description,vectorizer,vector_index_type,replication_factor,property_count. The class name is kept (it is the API identifier). Setinclude_ids=Trueto attach the full schema record underraw.get_class,delete_classaccept a raw class name or a class dict.graphql_queryreturns the raw GraphQL response -- object IDs (_additional { id }) are intentionally surfaced so the agent can pass them toget_object.
#QdrantToolSet
from maivn_tools import QdrantToolSet
connector = QdrantToolSet(
base_url="https://my-cluster.qdrant.cloud",
api_key=secrets["QDRANT_API_KEY"], # optional for self-hosted
)Tools: list_collections, get_collection, create_collection, delete_collection (destructive), upsert_points, search, retrieve_points, scroll, delete_points (destructive), create_payload_index.
Agent-ready behavior
list_collections: summary withcollection_ref,name. Setinclude_ids=Trueto attach the full record underraw.get_collection,delete_collectionaccept a raw name or a collection dict.search(default limit 10) returns the raw{"result": [{"id": ..., "score": ..., "payload": {...}}, ...]}-- per-resultidis what the agent passes toretrieve_points.
#ChromaToolSet
from maivn_tools import ChromaToolSet
connector = ChromaToolSet(
base_url="http://localhost:8000",
auth_token=secrets.get("CHROMA_TOKEN"), # optional static token
)Targets the Chroma /api/v2/tenants/.../databases/... HTTP server. Override tenant/database in the constructor for non-default namespaces. Tools: heartbeat, list_collections, get_collection, create_collection, delete_collection (destructive), add, upsert, query, get_documents, delete_documents (destructive), count_documents.
Agent-ready behavior
list_collections: summary withcollection_ref,name,metadata,dimension. Rawcollection_idUUIDs (needed byadd,upsert,query,get_documents,delete_documents,count_documents) are hidden by default; opt in withinclude_ids=True. Alternatively, callget_collection(name)-- that returns the full record (including theid) by design.get_collection,delete_collectionaccept a raw name or a collection dict.query(defaultn_results=10) returns the raw{"ids": [...], "distances": [...], "metadatas": [...], "documents": [...]}-- per-resultidsare kept.
#MilvusToolSet
from maivn_tools import MilvusToolSet
connector = MilvusToolSet(
base_url="https://in03-abc.serverless.us-west-2.cloud.zilliz.com",
token=secrets["ZILLIZ_TOKEN"], # "username:password" or API key
)Targets the v2 RESTful API used by both self-hosted Milvus and Zilliz Cloud. Tools: list_collections, describe_collection, create_collection, drop_collection (destructive), insert, upsert, search, get_entities, query, delete_entities (destructive), create_partition.
Agent-ready behavior
list_collections: summary withcollection_ref,name(the Milvus collection name). Setinclude_ids=Trueto attach the raw record underraw.describe_collection,drop_collectionaccept a raw collection name or a collection dict.search(default limit 10) andquery(default limit 100) return the raw Milvus payloads -- per-resultidandentitypayload are preserved so the agent can pass IDs toget_entities.