Qdrant Vector Search
Lets an agent work with a Qdrant vector database: list and inspect collections, run semantic or hybrid similarity queries with payload filters, browse and count points, and upsert vectors with metadata. Point the base URL at your own Qdrant Cloud cluster (or self-hosted instance). Curated from Qdrant's official OpenAPI specification.
Connect this API to an AI agent Browse all specs
What you can do with Qdrant Vector Search via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| GET | /collections |
listCollections | List all collections in the cluster |
| GET | /collections/{collection_name} |
getCollection | Get a collection's status, vector config and point count |
| GET | /collections/{collection_name}/exists |
collectionExists | Check whether a collection exists |
| POST | /collections/{collection_name}/points/query |
queryPoints | Find the points most similar to a vector or query, with filters |
| POST | /collections/{collection_name}/points/query/groups |
queryPointGroups | Similarity query with results grouped by a payload field |
| POST | /collections/{collection_name}/points/scroll |
scrollPoints | Page through points that match a filter |
| GET | /collections/{collection_name}/points/{id} |
getPoint | Get one point by id |
| POST | /collections/{collection_name}/points |
getPoints | Get several points by id |
| PUT | /collections/{collection_name}/points |
upsertPoints | Insert or update points (vectors and payload) |
| POST | /collections/{collection_name}/points/count |
countPoints | Count points that match a filter |
| POST | /collections/{collection_name}/facet |
facetPayload | Count distinct values of a payload field |
| POST | /collections/{collection_name}/points/payload |
setPayload | Set payload fields on existing points |
Authentication
api-key
API key — sent as the api-key header
How to get a credential
- Sign in to the Qdrant Cloud console at https://cloud.qdrant.io.
- Open your cluster and go to API Keys (or Data Access Control).
- Click Create, pick the cluster and choose read-only or read-write access.
- Copy the key (it is shown once) and note the cluster URL, e.g.
https://xyz-example.eu-central.aws.cloud.qdrant.io:6333. - Self-hosted: use the value of
service.api_keyfrom your Qdrant config.
Permissions used
| Key access | Operations |
|---|---|
| Read-only | listCollections, getCollection, collectionExists, queryPoints, queryPointGroups, scrollPoints, getPoint, getPoints, countPoints, facetPayload |
| Read-write | upsertPoints, setPayload |
Common errors
- 401 Unauthorized:
api-keyheader missing or wrong; copy the key again from the console. - 403 Forbidden: a read-only key was used for upsertPoints/setPayload, or the key is scoped to other collections.
- 400 Bad Request: vector size or name does not match the collection config, or the filter is malformed; check getCollection.
- 404 Not Found: wrong collection name or wrong cluster URL.
- 429 Too Many Requests: cluster overloaded; retry later with smaller batches.
Store the key as a VX Agents credential (API key header api-key); never paste it into chat.
Usage guide
Setup
- Base URL is your own cluster: replace
YOUR-CLUSTERso it reads likehttps://xyz-example.eu-central.aws.cloud.qdrant.io:6333(Qdrant Cloud console > cluster > endpoint). Self-hosted: use your host and port 6333. - Add the cluster API key as a credential sent in the
api-keyheader. A read-only key is enough unless the agent must upsert. - Pin
collection_nameas a preset if the agent works on one collection.
Semantic search
listCollections, thengetCollectionto read the vector size, distance and named vectors (config.params.vectors).- Embed the user's question with the same model used to index the collection (outside Qdrant).
queryPointswithquery= the vector,limit(e.g. 5),with_payload: true, optionalfilter(e.g.{"must": [{"key": "lang", "match": {"value": "en"}}]}) andusingfor a named vector.- Read
result.points[](id,score,payload). UsequeryPointGroupswithgroup_byto get one best hit per document or author. - Browse without a vector:
scrollPointswithfilter,limit, and the returnednext_page_offsetasoffsetfor the next page.countPointsandfacetPayloadgive totals and value breakdowns.
Write data
upsertPointswithpoints: [{id, vector, payload}]; ids are unsigned integers or UUIDs. Addwait=trueto return after the write is applied.setPayloadupdates metadata on existing points bypointsids orfilter. Confirm with the user before upserting or changing payloads: it changes the stored data that other apps search.
Good to know
- Vector length must equal the collection's size, or you get 400.
- Score meaning depends on distance: higher is closer for Cosine/Dot, lower for Euclid.
- Filtering on a payload field is fastest when that field has a payload index (see
payload_schemaingetCollection). - Hybrid search:
prefetchdense and sparse sub-queries, thenquery: {"fusion": "rrf"}. - Keep
limitsmall (≤ 50) to keep responses short.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “Qdrant Vector Search” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.