Tools & Connectors
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
withadd_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 stable 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'sdescribe_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.