Griptape Vector Store Driver: Qdrant
The vector store that runs anywhere, from Docker to the cloud
- embedding_driver
- DRIVER
Qdrant is the vector database that keeps showing up in AI projects, and this driver is the one that lets your Griptape agent use it. The selling point is flexibility: the same driver handles a fully managed Qdrant Cloud cluster or a local Qdrant instance you spun up in Docker. If you already run Qdrant, this is your node. If you don't, it's still a legitimately good first "real" vector store when the Local driver outgrows its usefulness - it's open source, self-hostable, and doesn't lock you into a vendor's pricing page.
How it works
Like every driver in the family, it's a config object, not a worker. It builds a QdrantVectorStoreDriver that knows where the Qdrant server lives, how to authenticate, and which collection to use. From then on, Add Text nodes write chunks into the collection and Query nodes search it. The inputs:
url_env(defaultQDRANT_CLUSTER_ENDPOINT) andapi_key_env(defaultQDRANT_CLUSTER_API_KEY) - environment variable names. For Qdrant Cloud these come from your cluster dashboard. For a local Docker instance, you can skip both: the driver falls back to the default localhost endpoint, which is why this node works with zero cloud config.collection_name(defaultgriptape) - typed directly, not via env var. Create or reuse a collection with this name in Qdrant.content_payload_key(defaultcontent) - the payload field Qdrant stores the original text in. Leave it unless you set up your collection with a different field.embedding_driver- the model that turns text into vectors. Empty means OpenAI ifOPENAI_API_KEYis set, otherwise a dummy that returns zeros.
Output is DRIVER (VECTOR_STORE_DRIVER), which wires into the Griptape Structure Config node's vector_store_driver input, then into Create Agent. Your Griptape Vector Store: Query node reads it from the agent.
Where people get burned
The classic one is the collection dimension mismatch. Qdrant creates a collection with a fixed vector size when it first receives data. If you index text with one embedding model and then query with a different one (or a different size), Qdrant will reject it or return garbage. Pick your embedding driver, keep it consistent, and ideally pre-create the collection with the right vector size. The second gotcha is forgetting that local Qdrant defaults to localhost:6333 - if you set url_env to a cloud endpoint name that doesn't exist, the driver fails rather than falling back.
Install
Standard pack install: ComfyUI Manager → search "Griptape" → INSTALL, or git clone https://github.com/griptape-ai/ComfyUI-Griptape into custom_nodes, then restart. Dependencies (griptape[all], python-dotenv) install with it. Watch the pack's known torch conflict - griptape[all] installs its own torch, and if ComfyUI starts erroring on load, the README's torch uninstall/reinstall fix is your friend. If you want the local route, docker run -p 6333:6333 qdrant/qdrant is the whole server setup.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| embedding_driveropt | EMBEDDING_DRIVER | Select an embedding driver or leave as default. | |
| collection_nameopt | STRING | griptape | Name of the Qdrant collection |
| content_payload_keyopt | STRING | content | Key for the content payload |
| api_key_envopt | STRING | QDRANT_CLUSTER_API_KEY | Environment variable name for the API key (do not include the actual API key) |
| url_envopt | STRING | QDRANT_CLUSTER_ENDPOINT | Environment variable name for the Qdrant cluster endpoint URL |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| DRIVER | VECTOR_STORE_DRIVER | — |