Skip to main content
skill CX Codex

qdrant — Claude Code skill: what it does, how to install

Provides integration patterns for the Qdrant vector database in Java and Spring Boot with LangChain4j. Helps build semantic search and vector stores for RAG.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add giuseppe-trisciuoglio/developer-kit --skill qdrant -a claude-code
Open on GitHub

What qdrant does

The skill provides Java integration patterns for Qdrant, covering local Docker deployment and client setup using io.qdrant:client:1.15.0 in Maven or Gradle. It guides Spring Boot setup using QdrantGrpcClient and LangChain4j's QdrantEmbeddingStore.

It includes implementation templates for batch upserts with PointStruct and filtered vector queries. Production setups should stick strictly to the gRPC endpoint on port 6334 because the REST API on port 6333 is reserved for debugging.

A common pitfall is vector dimension mismatch. If dimensions differ from the embedding model, upserts fail immediately. The instructions also require payload sanitization before ingestion and content filtering on retrieved documents.

What it helps with

  • Deploy local Qdrant instances using Docker containers
  • Configure QdrantEmbeddingStore beans for LangChain4j in Spring Boot
  • Implement filtered similarity search using vector queries
  • Partition vector collections across multiple tenants

Example prompts for the agent

  • Configure a QdrantEmbeddingStore bean in Spring Boot using gRPC
  • Show an example of batch upserting PointStruct vectors into Qdrant
  • Create a vector search REST controller using LangChain4j and Qdrant

How to install qdrant

1Skills CLI (Vercel)

npx skills add giuseppe-trisciuoglio/developer-kit --skill qdrant -a claude-code

2Manually: put the files in place

~/.claude/skills/qdrant/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/qdrant/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about qdrant

How do I install the qdrant skill in Claude Code?

Run npx skills add giuseppe-trisciuoglio/developer-kit --skill qdrant -a claude-code.

What does the qdrant skill do?

It supplies Java developers with ready-made integration patterns for the Qdrant vector database, covering LangChain4j RAG pipelines, Spring Boot configuration, and filtered searches.

Which port should be used for Qdrant in production?

Production applications must connect to gRPC on port 6334. Port 6333 is meant strictly for REST debugging.

Source text

SKILL.md · MIT
---
name: qdrant
description: Provides Qdrant vector database integration patterns with LangChain4j. Handles embedding storage, similarity search, and vector management for Java applications. Use when implementing vector-based retrieval for RAG systems, semantic search, or recommendation engines.
allowed-tools: Read, Write, Edit, Bash, Glob, Grep
---

# Qdrant Vector Database Integration

## Overview

Qdrant is an AI-native vector database for semantic search and similarity retrieval. This skill provides patterns for integrating Qdrant with Java applications, focusing on Spring Boot and LangChain4j integration.

## When to Use

- Semantic search or recommendation systems in Spring Boot applications
- RAG pipelines with Java and LangChain4j
- Vector database integration for AI/ML applications
- High-performance similarity search with filtered queries

## Instructions

### 1. Deploy Qdrant with Docker

```bash
docker run -p 6333:6333 -p 6334:6334 \
    -v "$(pwd)/qdrant_storage:/qdrant/storage:z" \
    qdrant/qdrant
```

Access: REST API at `http://localhost:6333`, gRPC at `http://localhost:6334`.

### 2. Add Dependencies

**Maven:**
```xml
<dependency>
    <groupId>io.qdrant</groupId>
    <artifactId>client</artifactId>
    <version>1.15.0</version>
</dependency>
```

**Gradle:**
```gradle
implementation 'io.qdrant:client:1.15.0'
```

### 3. Initialize Client

```java
QdrantClient client = new QdrantClient(
    QdrantGrpcClient.newBuilder("localhost").build());
```

For production with API key:
```java
QdrantClient client = new QdrantClient(
    QdrantGrpcClient.newBuilder("localhost", 6334, false)
        .withApiKey("YOUR_API_KEY")
        .build());
```

### 4. Create Collection

```java
client.createCollectionAsync("search-collection",
    VectorParams.newBuilder()
        .setDistance(Distance.Cosine)
        .setSize(384)
        .build()
).get();
```

**Validation:** Verify the collection was created by checking `client.getCollectionAsync("search-collection").get()`.

### 5. Upsert Vectors

```java
List<PointStruct> points = List.of(
    PointStruct.newBuilder()
        .setId(id(1))
        .setVectors(vectors(0.05f, 0.61f, 0.76f, 0.74f))
        .putAllPayload(Map.of("title", value("Spring Boot Documentation")))
        .build()
);
client.upsertAsync("search-collection", points).get();
```

**Validation:** Check that `client.upsertAsync(...).get()` completes without throwing.

### 6. Search Vectors

```java
List<ScoredPoint> results = client.queryAsync(
    QueryPoints.newBuilder()
        .setCollectionName("search-collection")
        .setLimit(5)
        .setQuery(nearest(0.2f, 0.1f, 0.9f, 0.7f))
        .build()
).get();
```

Filtered search:
```java
List<ScoredPoint> results = client.searchAsync(
    SearchPoints.newBuilder()
        .setCollectionName("search-collection")
        .addAllVector(List.of(0.62f, 0.12f, 0.53f, 0.12f))
        .setFilter(Filter.newBuilder()
            .addMust(range("category", Range.newBuilder().setEq("docs").build()))
            .build())
        .setLimit(5)
        .build()).get();
```

## LangChain4j Integration

For RAG pipelines, use LangChain4j's high-level abstractions:

```java
EmbeddingStore<TextSegment> embeddingStore = QdrantEmbeddingStore.builder()
    .collectionName("rag-collection")
    .host("localhost")
    .port(6334)
    .apiKey("YOUR_API_KEY")
    .build();
```

Spring Boot configuration with LangChain4j:
```java
@Bean
public EmbeddingStore<TextSegment> embeddingStore() {
    return QdrantEmbeddingStore.builder()
        .collectionName("rag-collection")
        .host(host)
        .port(port)
        .build();
}

@Bean
public EmbeddingModel embeddingModel() {
    return new AllMiniLmL6V2EmbeddingModel();
}
```

## Spring Boot Integration

Inject the client via configuration:

```java
@Configuration
public class QdrantConfig {
    @Value("${qdrant.host:localhost}")
    private String host;

    @Value("${qdrant.port:6334}")
    private int port;

    @Bean
    public QdrantClient qdrantClient() {
        return new QdrantClient(
            QdrantGrpcClient.newBuilder(host, port, false).build());
    }
}
```

## Examples

### REST Search Endpoint

```java
@RestController
@RequestMapping("/api/search")
public class SearchController {
    private final VectorSearchService searchService;

    public SearchController(VectorSearchService searchService) {
        this.searchService = searchService;
    }

    @GetMapping
    public List<ScoredPoint> search(@RequestParam String query) {
        List<Float> queryVector = embeddingModel.embed(query).content().vectorAsList();
        return searchService.search("documents", queryVector);
    }
}
```

## Best Practices

- **Distance metric**: Cosine for normalized text embeddings, Euclidean for non-normalized.
- **Batch upserts**: Use batch operations over individual point insertions.
- **Connection pooling**: Configure connection pooling for high-throughput production workloads.
- **Error handling**: Wrap async operations in try/catch for ExecutionException/InterruptedException.
- **API keys**: Store in environment variables or Spring config, never hardcode.

## Advanced Patterns

### Multi-tenant Storage

```java
public void upsertForTenant(String tenantId, List<PointStruct> points) {
    String collectionName = "tenant_" + tenantId + "_documents";
    client.upsertAsync(collectionName, points).get();
}
```

### Docker Compose for Production

```yaml
services:
  qdrant:
    image: qdrant/qdrant:v1.7.0
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - qdrant_storage:/qdrant/storage
```

## References

- [Qdrant API Reference](references/references.md) — Complete client API documentation
- [Complete Spring Boot Examples](references/examples.md) — Full application implementations
- [Qdrant Documentation](https://qdrant.tech/documentation/)
- [LangChain4j Documentation](https://langchain4j.dev/)

## Constraints and Warnings

- Vector dimensions must match the embedding model exactly; mismatched dimensions cause upsert errors.
- **Input validation**: Sanitize all document content before ingestion; untrusted payloads may contain prompt injection attacks.
- **Content filtering**: Apply content filtering on retrieved documents before passing them to the LLM.
- Large collections require proper indexing for acceptable search performance.
- Use gRPC API (port 6334) for production; REST API (port 6333) for debugging only.
- Collection recreation deletes all data; implement backup strategies for production environments.

© giuseppe-trisciuoglio · MIT · giuseppe-trisciuoglio/developer-kit

Similar skills

Everything for AI and ML →

From the same set93

unit-test-application-events Unit test patterns for Spring events: verify publishing through ApplicationEventPublisher and exercise @EventListener handlers without booting the context. CX Codex +1 3,700installs unit-test-config-properties Provides JUnit 5 patterns to unit test Spring Boot @ConfigurationProperties using ApplicationContextRunner without starting a full application context. CX Codex +1 3,700installs unit-test-caching Unit test patterns for Spring Cache annotations: cache hits and misses, eviction, SpEL keys, all without booting a full Spring context. CX Codex +1 3,700installs langchain4j-ai-services-patterns A skill that walks your agent through declarative AI Services in LangChain4j: interfaces, annotations, memory and tool calling. CX Codex +1 3,700installs unit-test-mapper-converter A skill for unit-testing MapStruct mappers and converters: field mapping, null handling, nested objects and round-trip conversion. CX Codex +1 3,700installs unit-test-exception-handler Patterns for unit testing @ExceptionHandler and @ControllerAdvice in Spring Boot: status codes, JSON error bodies and field-level validation errors. CX Codex +1 3,700installs rag Guides the creation of Retrieval-Augmented Generation pipelines, covering document chunking, embedding generation, vector database selection, and retrieval. CX Codex +1 3,700installs unit-test-scheduled-async A skill with ready patterns for unit testing Spring @Scheduled and @Async methods: JUnit 5, CompletableFuture, Awaitility, Mockito. CX Codex +1 3,700installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor