🎯

qdrant

🎯Skill

from vm0-ai/vm0-skills

VibeIndex|
What it does

Stores, searches, and manages vector embeddings for semantic search, RAG, and recommendation applications using Qdrant's vector database REST API.

πŸ“¦

Part of

vm0-ai/vm0-skills(138 items)

qdrant

Installation

DockerRun with Docker
docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant
πŸ“– Extracted from docs: vm0-ai/vm0-skills
13Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

Qdrant vector database REST API via curl. Use this skill to store, search, and manage vector embeddings.

Overview

# Qdrant API

Use the Qdrant REST API via direct curl calls to store and search vector embeddings for RAG, semantic search, and recommendations.

> Official docs: https://qdrant.tech/documentation/

---

When to Use

Use this skill when you need to:

  • Store vector embeddings for semantic search
  • Search for similar vectors using cosine, dot product, or euclidean distance
  • Build RAG applications with retrieval from vector store
  • Implement recommendations based on similarity
  • Filter search results by metadata/payload

---

Prerequisites

Option 1: Qdrant Cloud (Recommended)

  1. Sign up at [Qdrant Cloud](https://cloud.qdrant.io/)
  2. Create a cluster and get your URL and API key
  3. Store credentials in environment variables

```bash

export QDRANT_URL="https://xyz-example.aws.cloud.qdrant.io:6333"

export QDRANT_API_KEY="your-api-key"

```

Option 2: Self-hosted

Run Qdrant locally with Docker:

```bash

docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant

```

```bash

export QDRANT_URL="http://localhost:6333"

export QDRANT_API_KEY="" # Optional for local

```

---

> Important: When using $VAR in a command that pipes to another command, wrap the command containing $VAR in bash -c '...'. Due to a Claude Code bug, environment variables are silently cleared when pipes are used directly.

> ```bash

> bash -c 'curl -s "https://api.example.com" -H "Authorization: Bearer $API_KEY"'

> ```

How to Use

All examples below assume you have QDRANT_URL and QDRANT_API_KEY set.

---

1. Check Server Status

Verify connection to Qdrant:

```bash

bash -c 'curl -s -X GET "${QDRANT_URL}" --header "api-key: ${QDRANT_API_KEY}"'

```

---

2. List Collections

Get all collections:

```bash

bash -c 'curl -s -X GET "${QDRANT_URL}/collections" --header "api-key: ${QDRANT_API_KEY}"'

```

---

3. Create a Collection

Create a collection for storing vectors:

Write to /tmp/qdrant_request.json:

```json

{

"vectors": {

"size": 1536,

"distance": "Cosine"

}

}

```

Then run:

```bash

bash -c 'curl -s -X PUT "${QDRANT_URL}/collections/my_collection" --header "api-key: ${QDRANT_API_KEY}" --header "Content-Type: application/json" -d @/tmp/qdrant_request.json'

```

Distance metrics:

  • Cosine - Cosine similarity (recommended for normalized vectors)
  • Dot - Dot product
  • Euclid - Euclidean distance
  • Manhattan - Manhattan distance

Common vector sizes:

  • OpenAI text-embedding-3-small: 1536
  • OpenAI text-embedding-3-large: 3072
  • Cohere: 1024

---

4. Get Collection Info

Get details about a collection:

```bash

bash -c 'curl -s -X GET "${QDRANT_URL}/collections/my_collection" --header "api-key: ${QDRANT_API_KEY}"'

```

---

5. Upsert Points (Insert/Update Vectors)

Add vectors with payload (metadata):

Write to /tmp/qdrant_request.json:

```json

{

"points": [

{

"id": 1,

"vector": [0.05, 0.61, 0.76, 0.74],

"payload": {"text": "Hello world", "source": "doc1"}

},

{

"id": 2,

"vector": [0.19, 0.81, 0.75, 0.11],

"payload": {"text": "Goodbye world", "source": "doc2"}

}

]

}

```

Then run:

```bash

bash -c 'curl -s -X PUT "${QDRANT_URL}/collections/my_collection/points" --header "api-key: ${QDRANT_API_KEY}" --header "Content-Type: application/json" -d @/tmp/qdrant_request.json'

```

---

6. Search Similar Vectors

Find vectors similar to a query vector:

Write to /tmp/qdrant_request.json:

```json

{

"query": [0.05, 0.61, 0.76, 0.74],

"limit": 5,

"with_payload": true

}

```

Then run:

```bash

bash -c 'curl -s -X POST "${QDRANT_URL}/collections/my_collection/points/query" --header "api-key: ${QDRANT_API_KEY}" --header "Content-Type: application/json" -d @/tmp/qdrant_request.json'

```

Response:

```json

{

"result": {

"points": [

{"id": 1, "score": 0.99, "payload": {"text": "Hello world"}}

]

}

}

```

---

7. Search with Filters

Filter results by payload fields:

Write to /tmp/qdrant_request.json:

```json

{

"query": [0.05, 0.61, 0.76, 0.74],

"limit": 5,

"filter": {

"must": [

{"key": "source", "match": {"value": "doc1"}}

]

},

"with_payload": true

}

```

Then run:

```bash

bash -c 'curl -s -X POST "${QDRANT_URL}/collections/my_collection/points/query" --header "api-key: ${QDRANT_API_KEY}" --header "Content-Type: application/json" -d @/tmp/qdrant_request.json'

```

Filter operators:

  • must - All conditions must match (AND)
  • should - At least one must match (OR)
  • must_not - None should match (NOT)

---

8. Get Points by ID

Retrieve specific points:

Write to /tmp/qdrant_request.json:

```json

{

"ids": [1, 2],

"with_payload": true,

"with_vector": true

}

```

Then run:

```bash

bash -c 'curl -s -X POST "${QDRANT_URL}/collections/my_collection/points" --header "api-key: ${QDRANT_API_KEY}" --header "Content-Type: application/json" -d @/tmp/qdrant_request.json'

```

---

9. Delete Points

Delete by IDs:

Write to /tmp/qdrant_request.json:

```json

{

"points": [1, 2]

}

```

Then run:

```bash

bash -c 'curl -s -X POST "${QDRANT_URL}/collections/my_collection/points/delete" --header "api-key: ${QDRANT_API_KEY}" --header "Content-Type: application/json" -d @/tmp/qdrant_request.json'

```

Delete by filter:

Write to /tmp/qdrant_request.json:

```json

{

"filter": {

"must": [

{"key": "source", "match": {"value": "doc1"}}

]

}

}

```

Then run:

```bash

bash -c 'curl -s -X POST "${QDRANT_URL}/collections/my_collection/points/delete" --header "api-key: ${QDRANT_API_KEY}" --header "Content-Type: application/json" -d @/tmp/qdrant_request.json'

```

---

10. Delete Collection

Remove a collection entirely:

```bash

bash -c 'curl -s -X DELETE "${QDRANT_URL}/collections/my_collection" --header "api-key: ${QDRANT_API_KEY}"'

```

---

11. Count Points

Get total count or filtered count:

Write to /tmp/qdrant_request.json:

```json

{

"exact": true

}

```

Then run:

```bash

bash -c 'curl -s -X POST "${QDRANT_URL}/collections/my_collection/points/count" --header "api-key: ${QDRANT_API_KEY}" --header "Content-Type: application/json" -d @/tmp/qdrant_request.json'

```

---

Filter Syntax

Common filter conditions:

```json

{

"filter": {

"must": [

{"key": "city", "match": {"value": "London"}},

{"key": "price", "range": {"gte": 100, "lte": 500}},

{"key": "tags", "match": {"any": ["electronics", "sale"]}}

]

}

}

```

Match types:

  • match.value - Exact match
  • match.any - Match any in list
  • match.except - Match none in list
  • range - Numeric range (gt, gte, lt, lte)

---

Guidelines

  1. Match vector size: Collection vector size must match your embedding model output
  2. Use Cosine for normalized vectors: Most embedding models output normalized vectors
  3. Add payload for filtering: Store metadata with vectors for filtered searches
  4. Batch upserts: Insert multiple points in one request for efficiency
  5. Use score_threshold: Filter out low-similarity results in search

More from this repository10