Skip to main content

qdrant

Manage Qdrant vector database via REST API. Use when the user asks to create or delete collections, upsert or search vectors, inspect points, filter by payload fields, manage snapshots, check cluster status, or debug semantic search issues. Covers collection CRUD, point upsert/search/scroll/count, payload indexes, filtering (must/should/must_not), recommend, discover, snapshots, aliases, and cluster operations.

Source facts

Repository
bug-ops/zeph
Last source activity
March 30, 2026 at 00:01
Detected SKILL.md language
English
Stars
66
Forks
7

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
qdrant
category
data
description
Manage Qdrant vector database via REST API. Use when the user asks to create or delete collections, upsert or search vectors, inspect points, filter by payload fields, manage snapshots, check cluster status, or debug semantic search issues. Covers collection CRUD, point upsert/search/scroll/count, payload indexes, filtering (must/should/must_not), recommend, discover, snapshots, aliases, and cluster operations.
compatibility
Requires curl and a running Qdrant instance (default http://localhost:6333)
metadata
{"author":"zeph","version":"1.0"}
# Qdrant Vector Database Base URL: `http://localhost:6333` (default). Override with `QDRANT_URL` env var. All examples use curl. Replace `localhost:6333` with the actual Qdrant endpoint. ## Quick Reference | Task | Endpoint | |------|----------| | List collections | `GET /collections` | | Create collection | `PUT /collections/{name}` | | Delete collection | `DELETE /collections/{name}` | | Collection info | `GET /collections/{name}` | | Upsert points | `PUT /collections/{name}/points` | | Search | `POST /collections/{name}/points/search` | | Scroll (paginate) | `POST /collections/{name}/points/scroll` | | Get point | `GET /collections/{name}/points/{id}` | | Delete points | `POST /collections/{name}/points/delete` | | Count points | `POST /collections/{name}/points/count` | | Health check | `GET /healthz` | ## Collections ### List all collections ```bash curl -s http://localhost:6333/collections | jq ``` ### Create collection ```bash curl -s -X PUT http://localhost:6333/collections/my_collection \ -H "Content-Type: application/json" \ -d '{ "vectors": { "size": 384, "distance": "Cosine" } }' | jq ``` Distance metrics: `Cosine`, `Euclid`, `Dot`, `Manhattan`. ### Create collection with named vectors ```bash curl -s -X PUT http://localhost:6333/collections/my_collection \ -H "Content-Type: application/json" \ -d '{ "vectors": { "content": {"size": 384, "distance": "Cosine"}, "title": {"size": 128, "distance": "Cosine"} } }' | jq ``` ### Collection info ```bash curl -s http://localhost:6333/collections/my_collection | jq ``` Key fields: `vectors_count`, `points_count`, `segments_count`, `status` (green/yellow/red). ### Delete collection ```bash curl -s -X DELETE http://localhost:6333/collections/my_collection | jq ``` ### Check collection exists ```bash curl -sI http://localhost:6333/collections/my_collection -o /dev/null -w "%{http_code}" # 200 = exists, 404 = not found ``` ## Points ### Upsert points (insert or update) ```bash curl -s -X PUT http://localhost:6333/collections/my_collection/points \ -H "Content-Type: application/json" \ -d '{ "points": [ { "id": 1, "vector": [0.1, 0.2, 0.3, ...], "payload": {"title": "Example", "category": "test", "score": 0.95} }, { "id": 2, "vector": [0.4, 0.5, 0.6, ...], "payload": {"title": "Another", "category": "prod", "score": 0.87} } ] }' | jq ``` Point IDs can be integers or UUIDs. ### Upsert with named vectors ```bash curl -s -X PUT http://localhost:6333/collections/my_collection/points \ -H "Content-Type: application/json" \ -d '{ "points": [ { "id": 1, "vector": { "content": [0.1, 0.2, ...], "title": [0.3, 0.4, ...] }, "payload": {"title": "Example"} } ] }' | jq ``` ### Get point by ID ```bash curl -s http://localhost:6333/collections/my_collection/points/1 | jq ``` ### Get multiple points ```bash curl -s -X POST http://localhost:6333/collections/my_collection/points \ -H "Content-Type: application/json" \ -d '{"ids": [1, 2, 3]}' | jq ``` ### Delete points by ID ```bash curl -s -X POST http://localhost:6333/collections/my_collection/points/delete \ -H "Content-Type: application/json" \ -d '{"points": [1, 2, 3]}' | jq ``` ### Delete points by filter ```bash curl -s -X POST http://localhost:6333/collections/my_collection/points/delete \ -H "Content-Type: application/json" \ -d '{ "filter": { "must": [ {"key": "category", "match": {"value": "obsolete"}} ] } }' | jq ``` ### Count points ```bash # Total count curl -s -X POST http://localhost:6333/collections/my_collection/points/count \ -H "Content-Type: application/json" \ -d '{}' | jq '.result.count' # Count with filter curl -s -X POST http://localhost:6333/collections/my_collection/points/count \ -H "Content-Type: application/json" \ -d '{ "filter": { "must": [{"key": "category", "match": {"value": "test"}}] }, "exact": true }' | jq '.result.count' ``` ## Search ### Basic vector search ```bash curl -s -X POST http://localhost:6333/collections/my_collection/points/search \ -H "Content-Type: application/json" \ -d '{ "vector": [0.1, 0.2, 0.3, ...], "limit": 10, "with_payload": true, "with_vector": false }' | jq ``` ### Search with filter ```bash curl -s -X POST http://localhost:6333/collections/my_collection/points/search \ -H "Content-Type: application/json" \ -d '{ "vector": [0.1, 0.2, 0.3, ...], "limit": 5, "with_payload": true, "filter": { "must": [ {"key": "category", "match": {"value": "prod"}} ], "must_not": [ {"key": "archived", "match": {"value": true}} ] } }' | jq ``` ### Search with score threshold ```bash curl -s -X POST http://localhost:6333/collections/my_collection/points/search \ -H "Content-Type: application/json" \ -d '{ "vector": [0.1, 0.2, 0.3, ...], "limit": 10, "score_threshold": 0.7, "with_payload": true }' | jq ``` ### Search with named vector ```bash curl -s -X POST http://localhost:6333/collections/my_collection/points/search \ -H "Content-Type: application/json" \ -d '{ "vector": { "name": "content", "vector": [0.1, 0.2, 0.3, ...] }, "limit": 10, "with_payload": true }' | jq ``` ### Scroll (paginate through all points) ```bash # First page curl -s -X POST http://localhost:6333/collections/my_collection/points/scroll \ -H "Content-Type: application/json" \ -d '{ "limit": 100, "with_payload": true, "with_vector": false }' | jq # Next page (use next_page_offset from previous response) curl -s -X POST http://localhost:6333/collections/my_collection/points/scroll \ -H "Content-Type: application/json" \ -d '{ "limit": 100, "offset": NEXT_PAGE_OFFSET, "with_payload": true }' | jq ``` ### Recommend (find similar to existing points) ```bash curl -s -X POST http://localhost:6333/collections/my_collection/points/recommend \ -H "Content-Type: application/json" \ -d '{ "positive": [1, 2], "negative": [3], "limit": 10, "with_payload": true }' | jq ``` ## Filtering Filters use `must` (AND), `should` (OR), `must_not` (NOT) clauses. ### Condition types ```json // Exact match {"key": "city", "match": {"value": "Berlin"}} // Match any {"key": "color", "match": {"any": ["red", "blue", "green"]}} // Match except {"key": "status", "match": {"except": ["deleted", "archived"]}} // Range (numeric) {"key": "price", "range": {"gte": 10.0, "lte": 100.0}} // Range (dates as strings) {"key": "created_at", "range": {"gte": "2025-01-01T00:00:00Z"}} // Geo bounding box {"key": "location", "geo_bounding_box": { "top_left": {"lat": 52.52, "lon": 13.38}, "bottom_right": {"lat": 52.50, "lon": 13.42} }} // Geo radius {"key": "location", "geo_radius": { "center": {"lat": 52.52, "lon": 13.405}, "radius": 1000.0 }} // Has key (field exists) {"has_id": [1, 2, 3]} // Is empty (field missing or null) {"is_empty": {"key": "optional_field"}} // Is null {"is_null": {"key": "nullable_field"}} // Nested filter {"nested": {"key": "tags", "filter": { "must": [{"key": "tags[].name", "match": {"value": "important"}}] }}} // Values count {"values_count": {"key": "tags", "gte": 2}} ``` ### Combined filter example
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub