Skip to content

Vector stores

Hub: documentation home · tools.yaml · Python API.

VectorSmith talks to your cluster. It does not host a database. These six backends ship in the package; pick the extra that matches connections.*.backend in tools.yaml.

What is integrated

Store backend in YAML Install extra Client pulled in
Qdrant qdrant vectorsmith[qdrant] qdrant-client
PostgreSQL + pgvector pgvector vectorsmith[pgvector] psycopg (binary + pool)
Chroma chroma vectorsmith[chroma] chromadb
Pinecone pinecone vectorsmith[pinecone] pinecone
Weaviate weaviate vectorsmith[weaviate] weaviate-client
Milvus milvus vectorsmith[milvus] pymilvus

Every store extra also installs FastEmbed (BAAI/bge-small-en-v1.5 by default) so search can embed queries locally. You do not need a separate embed extra on the published vectorsmith package.

pip install "vectorsmith[qdrant]"     # most common
pip install "vectorsmith[pgvector]"
pip install "vectorsmith[chroma]"
pip install "vectorsmith[pinecone]"
pip install "vectorsmith[weaviate]"
pip install "vectorsmith[milvus]"

Install more than one extra if a single tools.yaml has mixed backends. The CLI (serve, validate, test) and connect() / load_tools use the same extras.

There is no first-party adapter for other stores (Elasticsearch, Redis, OpenSearch, …). Those are not integrated.

What each backend can do

Same tools (search, lookup, count, scroll, pipeline) compile against every backend. Capability gates reject YAML that the store cannot run (validate, including validate --live for hybrid/sparse).

Qdrant pgvector Chroma Pinecone Weaviate Milvus
Dense search yes yes (vector mode) yes yes yes yes
Hybrid / sparse yes no no yes yes yes
Nested payload paths yes yes no no yes yes
exists / is_null yes yes no no yes exists only
like no yes yes no yes yes
text_match in filter yes no no no yes no
Filtered count yes yes yes yes yes yes
Scroll yes yes yes no yes yes
Introspection typed typed none none typed typed
Server-side embedding no no no no yes no

Every backend accepts comparison ops: eq ne gt gte lt lte in nin.

pgvector table mode (mode: table or vector_column: null) is for lookup / count / scroll / pipeline only — no kind: search (VB2016).

Connection fields: tools.yaml → connections.

Mixing stores

One YAML file can declare several connections with different backends. That is still one MCP server (vectorsmith serve). Each tool names target.connection. Two Claude connectors still mean two YAML files and two serve --name processes.

Not a store extra

These extras are agent SDKs, not databases:

Extra For
langchain / langgraph load_tools
openai-agents BoundTools.as_openai_agents()
anthropic BoundTools.as_anthropic()

connect() only needs the store extra. Details: Python API.